0

I want to share the mp3 file on whatsapp , when I compile my codes, there is no problem, but when I press the share button in the application, it throws it from the application.

THERE İS MY MainActivity code ;

public class MainActivity extends AppCompatActivity {

Button sespaylasma;

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

    sespaylasma = (Button) findViewById(R.id.btnsespaylas);

    //butona tıklayınca ses paylaşıyoruz
    sespaylasma.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            //eğer kaydedilecek klasör oluşturulmadıysa oluşturuyoruz
            File kaydedileceklasor = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)+"/Sesler/");
            if (!kaydedileceklasor.exists()){
                kaydedileceklasor.mkdirs();
            }


            //fonskiyonumuzu hangi ses dosyasını göndermek istiyorsak onu belirterek çağıracağız
            dosyayikopyala(R.raw.ses);

            //şu anda ses1 dosyası telefonda da bulunuyor , bulunduğu yere giderek paylaşacağız.


            //burada ses dosyasının bulunduğu yere gittik , ses dosyamızı ismi ile bulduk ve artık hazır
            String seskonumu ="file://"+ getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/Sesler/"+getResources().getResourceEntryName(R.raw.ses)+".mp3";

            Intent intent = new Intent(Intent.ACTION_SEND);
            //audio şeklinin her türlüsünü desteklemesi için
            //bazı yerlerde bu şekilde whatsappın kabul etmediği yazar ama doğru değil, yani hata düzeltilmiş
            intent.setType("audio/mp3");
            //aşağıdaki kod isteğe bağlıdır yani sadece whatsapp uygulaması üzerinden paylaşıma açık
            //başka bir uygulama için yapmak istiyorsanız onun paket adını yazarsınız.
            intent.setPackage("com.whatsapp");
            intent.putExtra(Intent.EXTRA_STREAM,  Uri.parse(seskonumu));
            startActivity(Intent.createChooser(intent, "Sesi Paylaş"));
        }
    });





}

public void dosyayikopyala(int resId){

    //kopyalamak istediğimiz ses dosyasını belirttik
    InputStream inputStream = getResources().openRawResource(resId);
    //sesin kopyalandığı yerde de ismi aynı olsun diye ayni ismi getirttik. bunu isterseni değiştirebilirsiniz ama uzantıyı sakın unutmayın.
    String dosyaAdi = getResources().getResourceEntryName(resId)+".mp3";

    //burada dosyanın kopyalanacağı yolu gösterdik, yani dosya şuraya kopyalanacak /storage/emulated/0/Android/data/<paketadınız>/Sesler/
    String kopyalanacakyer = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/Sesler/";

    File f = new File(dosyaAdi);

    //dosya yoksa işleme devam ediyoruz , varsa problem çıkabilir
    if(!f.exists()){
        try {
            //burada dosya yolunu  bulunduğu klasörün içine belirlediğimiz isimle kopyalanması komutunu verdik
            OutputStream outputStream = new FileOutputStream(new File(kopyalanacakyer, dosyaAdi));
            byte[] buffer = new byte[1024];
            int len;
            while((len = inputStream.read(buffer, 0, buffer.length)) != -1){
                outputStream.write(buffer, 0, len);
            }
            inputStream.close();
            outputStream.close();
        } catch (FileNotFoundException e) {
            Log.i("Test", "Dosya Bulunamadı "+e.getMessage());
        } catch (IOException e) {
            Log.i("Test", "Hata oluştu "+e.getMessage());
        }
    }
}

}

There is my Logcat Error ;

2021-05-10 00:38:14.996 20409-20434/com.mec.bismillah E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1 2021-05-10 00:38:42.175 20409-20409/com.mec.bismillah E/AndroidRuntime: FATAL EXCEPTION: main Process: com.mec.bismillah, PID: 20409 android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.mec.bismillah/files/Download/Sesler/ses.mp3 exposed beyond app through ClipData.Item.getUri() at android.os.StrictMode.onFileUriExposed(StrictMode.java:1978) at android.net.Uri.checkFileUriExposed(Uri.java:2371) at android.content.ClipData.prepareToLeaveProcess(ClipData.java:963) at android.content.Intent.prepareToLeaveProcess(Intent.java:10216) at android.content.Intent.prepareToLeaveProcess(Intent.java:10222) at android.content.Intent.prepareToLeaveProcess(Intent.java:10201) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1667) at android.app.Activity.startActivityForResult(Activity.java:4586) at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676) at android.app.Activity.startActivityForResult(Activity.java:4544) at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663) at android.app.Activity.startActivity(Activity.java:4905) at android.app.Activity.startActivity(Activity.java:4873) at com.mec.bismillah.MainActivity$1.onClick(MainActivity.java:77) at android.view.View.performClick(View.java:6597) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) at android.view.View.performClickInternal(View.java:6574) at android.view.View.access$3100(View.java:778) at android.view.View$PerformClick.run(View.java:25885) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

mec
  • 1
  • 1
  • Don't post pictures of exceptions or code. Just copy the information and paste it into your question. Also, don't post questions without including the relevant code. No one wants to waste time playing guessing games about what is or is not in your code. – MarsAtomic May 09 '21 at 21:33
  • I edited, will you look ? – mec May 09 '21 at 21:50

0 Answers0