Bu dersimizde iki uygulama arası broadcast mesaj kullanımını ve güvenlik önlemlerini anlatmaya çalıştım.
Daha önceki örneklerde aynı uygulama içinde broadcast mesaj gönderdik ve aynı uygulamadaki başka bir sınıf bu mesajı ele aldı. Bu derste bir gönderici uygulama broadcast mesaj yayınlıyor ve başka bir uygulama bu mesajı alıp işlem yapıyor.
Günlük hayatta çok da kullanılmayan bir durum da olsa android işletim sisteminin nasıl çalıştığını ve broadcast receiverların mantığını daha iyi anlamamız için gayet güzel bir kullanım olduğunu düşünüyorum.
Gönderici uygulamada bir intent oluşturup, bir action name tanımlıyoruz ve başka bir uygulamada aynı action name’e sahip bir receiver tanımlıyoruz (manifest.xml dosyasında). Daha sonra bu örneği daha güvenli bir hale getirmek için action name taşıyan intent’e bir de izin değeri tanımlıyoruz ve broadcast mesajımızı gönderiyoruz.
Eğer alıcı uygulamada action name’i aynı olan bir receiver sınıfı varsa ve de bu uygulamanın manifest dosyasında göndericideki izin verilmişse mesajımızı receiver tarafından alınıyor, aksi taktirde mesaj ulaşmayacaktır.
Bu derste exported etiketinin( true ise başka uygulamalardan broadcast mesaj alabilir, false ise başka uygulamalar bu receiver’a ulaşamaz ama aynı uygulama içinden broadcast mesaj alabilir ) kullanımını, permission ve uses-permission kullanımını ve de bunları kullanırken protectionLevel etiketinin ne işe yaradığını görmüş olduk.
protectionLevel=signature ise aynı ismi taşıyan izin varsa sistem tarafından otomatik olarak izin verilir, kullanıcıdan herhangi bir izin talep edilmez.
APP1 KODLARI :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void sendBroadcastMesaj(View view) { Intent intent=new Intent("my.action.name"); /* İzin tanımlanmadan broadcast mesaj gönderme sendBroadcast(intent); */ //izin ve action name ile broadcast mesaj gönderme sendBroadcast(intent, "my.permission"); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.emrealtunbilek.securitywithbroadcastapp1"> <permission android:name="my.permission" android:protectionLevel="signature"></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> </application> </manifest> |
APP2 KODLARI:
1 2 3 4 5 6 7 8 |
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "My Receiver çağrıldı", 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 29 30 31 32 33 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.emrealtunbilek.securitywithbroadcastapp2"> <uses-permission android:name="my.permission"></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" android:exported="true"> <intent-filter> <action android:name="my.action.name"></action> </intent-filter> </receiver> </application> </manifest> |
abi çok sağol uzun süredir BroadcastReceiver konusunu araştırıyordum sayende çözdüm