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 🙂
yardımlarından dolayı değerli dostum BARAN KARABOĞA’ya ben de çok teşekkür ederim harikasın Baran :))
Ne demek dostum rica ederim 🙂