"Enter"a basıp içeriğe geçin

Uygulama İçinden WhatsApp’a MP3 Gönderme

Merhabalar, unutmadan yazıyoruzun bir başka konusu.Yazdığımız uygulama içinden herhangi bir dosyayı butona basıldığında nasıl WhatsApp mesajlarının içine gönderebiliriz bu konuyu ele alıcaz. Uğraşanlar bilir bir ara her siyasetçinin müzik dosyalarının olduğu appler vardı onlar üzerinden whatsapp mesajlarına küçük mp3ler gönderildi vs. 😀 Neyse konumuza geçelim.

Anlatım çok lazım değil bana kod lazım diyenleri baştan github hesabına alalım.

Burada dikkat etmemiz gereken 2 nokta var.

  • Android dosya izinlerinin doğru verilmiş olması.Sadece manifest dosyası için izin vermek bazen yetmeyebiliyor.Uygulama içinden kullanıcının kendi uygulamaya izin vermesi gerekiyor.
  • Göndereceğiniz dosya telefon hafızasında bulunmalı.Sadece resource > raw içine koymanız yetmiyor malasef.

Bir örnek üzerinden açıklayalım.Basit bir butona basıldığında bizim tanımladığımız mp3 dosyasını göndermesini istiyoruz.

activity_main.xml dosyamız şu şekilde sadece bir buton ekliyoruz.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Paylas" />

</RelativeLayout>

Daha sonra MainActivity.java sınıfımıza giriyoruz.Bu kısımda oluşturacağımız iki method var.Bunlardan ilki raw dosyamızı telefon içine kopyalamak.

 private String copyFiletoExternalStorage(int resourceId, String resourceName){
        String pathSDCard = Environment.getExternalStorageDirectory() + "/Android/data/" + resourceName;
        try{
            InputStream in = getResources().openRawResource(resourceId);
            FileOutputStream out = null;
            out = new FileOutputStream(pathSDCard);
            byte[] buff = new byte[1024];
            int read = 0;
            try {
                while ((read = in.read(buff)) > 0) {
                    out.write(buff, 0, read);
                }
            } finally {
                in.close();
                out.close();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return pathSDCard;
    }

Eğer henüz yapmadıysanız

Raw Dizini Oluşturma : res klasörüne sağ tıklayıp Android Resource Directory seçip , daha sonra açılan pencereden raw’ı seçip bir dizin oluşturun ve içine örnek bir mp3 dosyası atın.

Bu method sayesinde raw klasörü içindeki müzik dosyamızı telefonun içine kopyalıyoruz.

Daha sonra telefonumuzun içinden kullanıcıya dosya yazma izni aldırıyoruz.Çünki yukarıdaki bu işlem bir yazma yetkisi istiyor .

    public  boolean isStoragePermissionGranted() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    == PackageManager.PERMISSION_GRANTED) {
                Log.v("","Permission is granted");
                return true;
            } else {

                Log.v("","Permission is revoked");
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                return false;
            }
        }
        else { 
            Log.v("","Permission is granted");
            return true;
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
            Log.v("","Permission: "+permissions[0]+ "was "+grantResults[0]);
             
        }
    }

Bu izinler hakkınad detaylı bilgi almak isterseniz dökümantasyona bir göz atın.Önemli konudur 🙂

Sırada geldi ana methodu yazmaya.onCreate methodumuzda whatsapp kurulu olup olmadığı kontrollerini yapıyoruz ve Intent kullanarak WhatsApp uygulamasına dosyamızı gönderiyoruz.

    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isStoragePermissionGranted()) {
                    String rout = copyFiletoExternalStorage(R.raw.guitar,"guitar.mp3");
                    Uri uri = Uri.parse(rout);
                    Intent share = new Intent(Intent.ACTION_SEND);
                    share.setType("audio/*");
                    share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                    share.putExtra(Intent.EXTRA_STREAM,uri);
                    try {
                        startActivity(share);
                    }catch (android.content.ActivityNotFoundException ex){
                        Toast.makeText(getApplicationContext(),"Please, install Whatsapp", Toast.LENGTH_LONG).show();
                    }
                }
            }
        });

    }

Bu konu için bana değil yazmama vesile olan Alper Saraç‘a teşekkürü borç biliriz 🙂

2 Yorum

  1. ALPER SARAÇ
    ALPER SARAÇ Mart 6, 2019

    yardımlarından dolayı değerli dostum BARAN KARABOĞA’ya ben de çok teşekkür ederim harikasın Baran :))

    • rankend
      rankend Mart 6, 2019

      Ne demek dostum rica ederim 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir