Bugün şu an için broadcast receiver konusunun son dersini işleyeceğiz. Bu son örnekte telefonumuzun aranma olaylarını ele alan bir broadcast receiver örneği yapacağız.
Bu örneği yapmak için uygulamaya dangerous yani tehlikeli bir izin türü olan READ_PHONE_STATE izni verilmelidir. Aksi taktirde çalışmaz. Bu izni de API 23 ve sonrasındaki cihazlar için çalışma anında kullanıcıdan istememiz gerekiyor.
Bu broadcast mesajı alacak olan sınıfımızı manifest.xml dosyamıza PHONE_STATE action name’i ile tanımlıyoruz. Ve bu sınıfın içerisine arama ile ilgili olayları belirten kodlarımızı yazıyoruz.
Runtime permission ile ilgili daha detaylı bilgi almak isteyen arkadaşlar lütfen burada belirtilen dersi tekrar izlesinler.
Bu derste yazılan kodlar aşağıdaki gibidir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public class MainActivity extends RuntimeIzinlerActivity { private static final int ARAMA_IZNI= 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String[] istenilenIzinler={Manifest.permission.READ_PHONE_STATE}; MainActivity.super.izinIste(istenilenIzinler, ARAMA_IZNI); } @Override public void izinVerildi(int requestCode) { if(requestCode==ARAMA_IZNI) Toast.makeText(this, "GEREKEN IZIN VERILDI", Toast.LENGTH_LONG).show(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String durum=intent.getStringExtra(TelephonyManager.EXTRA_STATE); if(durum.equals(TelephonyManager.EXTRA_STATE_RINGING)){ Toast.makeText(context, "Çalıyor", Toast.LENGTH_LONG).show(); } if(durum.equals(TelephonyManager.EXTRA_STATE_IDLE)){ Toast.makeText(context, "Kapandı", Toast.LENGTH_LONG).show(); } if(durum.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){ Toast.makeText(context, "Beklemede", Toast.LENGTH_LONG).show(); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.emrealtunbilek.incomingcalltest"> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MyReceiver"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE"></action> </intent-filter> </receiver> </application> </manifest> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
public abstract class RuntimeIzinlerActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public void izinIste(final String[] istenilenIzinler, final int requestCode) { int izinKontrol = PackageManager.PERMISSION_GRANTED; boolean mazeretGoster = false; //izinkontrol=0 ise izin/izinler verilmiştir //aksi durumda izin/izinler verilmemiştir. //mazeret göster = false ise ilk defa izin sorulmustur //mazeret goster= true ise kullanıcı izni reddetmiştir, ona bir mazeret sunabiliriz. for (String izin : istenilenIzinler) { izinKontrol = izinKontrol + ContextCompat.checkSelfPermission(this, izin); mazeretGoster = mazeretGoster || ActivityCompat.shouldShowRequestPermissionRationale(this, izin); } if (izinKontrol != PackageManager.PERMISSION_GRANTED) { if (mazeretGoster) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Neden İzin Vermelisin?"); builder.setMessage("Arama yapmak istiyorsan bu izni vermen gerekiyor"); builder.setNegativeButton("IZIN YOK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.setPositiveButton("IZIN VERMEK ISTIYORUM", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ActivityCompat.requestPermissions(RuntimeIzinlerActivity.this, istenilenIzinler, requestCode); } }); builder.show(); } else { ActivityCompat.requestPermissions(RuntimeIzinlerActivity.this, istenilenIzinler, requestCode); } } else { izinVerildi(requestCode); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); int izinKontrol = PackageManager.PERMISSION_GRANTED; //izinkontrol=0 ise tüm izinler verilmiştir for (int izinDurumu : grantResults) { izinKontrol = izinKontrol + izinDurumu; } if ((grantResults.length > 0) && izinKontrol == PackageManager.PERMISSION_GRANTED) { izinVerildi(requestCode); } else { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("IZIN LAZIM"); builder.setMessage("Ayarladan tüm izinleri vermen gerekiyor"); builder.setNegativeButton("OLMAZ", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.setPositiveButton("IZIN VERICEM", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse("package:" + getPackageName())); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); startActivity(intent); } }); builder.show(); } } public abstract void izinVerildi(int requestCode); } |