14 Şubat 2018 Çarşamba

Android Dersleri 24 - PendingIntent

4 - PendingIntent
What Is PendingIntent ?
A PendingIntent has defined Activity, Broadcast or Service  within it, and those can be sent to other applications to use it. ( PendingIntent, bir Activity, Broadcast veya Service tanımlar sonra bunları kullanabilmeleri için diğer uygulamalara gönderir. )
PendingIntent'İn yaratıldığı uygulamadaki izinlere, pendingIntent'in gönderildiği uygulama da sahiptir yani pendingIntent'i kullanabilmek için gerekli izinlere sahiptir.
Why PendingIntent ?
I can define my Intent (Activity, BroadcastReceiver or Service) and can send to other application to use it. Why PendingIntent is required ? ( Kendi intent'i tanımladım sonra bu inten'i yabancı bir uygulamaya kullanabilmesi için gönderdim. Peki PendingIntent neden gerekli? )

If I create Intent, ( Aşağıdaki gibi bir intent yarattım diyelim: )
Intent bIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

and sending "bIntent" to other application , which is not having permission (android.permission.BLUETOOTH_ADMIN). ( Yukarıdaki yarattığım intent'i yabancı bir uygulamaya gönderdim diyelim. Bu yabancı uygulama android.permission.BLUETOOTH_ADMIN permission'ına sahip değilse eğer, aşağıdaki şekilde activity'yi başlatmaya çalıştığımda activity asla çalışmayacaktır error verecektir, çünkü yabancı uygulama android.permission.BLUETOOTH_ permission'ına sahip değildir. )

So, When I do,
startActivity(bIntent);
It will never launch bluetooth enabling Activity.

If we use PendingIntent, the application (which use PendingIntent) no need to have permission. But the application which creates PendingIntent must have required permission for Intents. ( Ama eğer PendingIntent kullanırsak, gelen PendingIntent'i kullanan uygulamanın gerekli permission'lara sahip olmasına gerek yoktur. PendingIntent'i yaratan uygulamanın gerekli permission'lara sahip olması yeterlidir. )

PendingIntent can be created using its static methods getActivity(), getBroadcast() and getService(). ( PendingIntent class'ının getActivity(), getBroadcast() ve getService() method'ları çağırılarak bir PendingIntent object yaratılabilir. )

-*-*----------------------------------------------
A PendingIntent is a token that you give to a foreign application (e.g. NotificationManager, AlarmManager, Home Screen AppWidgetManager, or other 3rd party applications), which allows the foreign application to use your application's permissions to execute a predefined piece of code. (PendingIntent, yabancı bir uygulamaya mesela AlarmManager uygulamasına verilen bir token'dir. Bizim kendi uygulamamızdaki izinleri yabancı uygulama mesela AlarmManager kullanabilir, bu izinleri kullanarak daha önceden tanımlanmış olan kodları çalıştırabilir. PendingIntent kısaca bunu sağlar yani.  )
If you give the foreign application an Intent, and that application sends/broadcasts the Intent you gave, they will execute the Intent with their own permissions. But if you instead give the foreign application a PendingIntent you created using your own permission, that application will execute the contained Intent using your application's permission. ( Foreign application'ımız AlarmManager olsun diyelim. Uygulamamızdan AlarmManager'a normal bir intent gönderirsek, AlarmManager bu intent'i gönderebilmek broadcast edebilmek vs. için gerekli izinlere kendi uygulaması içerisinde sahip olmak zorundadır.
Ama uygulamamızda gerekli izinleri kullanarak bir PendingIntent object yaratıp bu object'i AlarmManager'a verirsek, AlarmManager bizim kendi uygulamamızda bu PendingIntent'i yaratırken sahip olduğumuz izinlere sahiptir. AlarmManager'In bu pendingIntent'i kullanması için gerekli izinlere sahip olmasına gerek yoktur çünkü uygulamamızda PendingIntent yaratılırken uygulamamız bu izinler zaten sahipti. )
-*-*----------------------------------------------
By giving a PendingIntent to another application, you are granting it the right to perform the operation you have specified as if the other application was yourself (with the same permissions and identity). As such, you should be careful about how you build the PendingIntent: almost always, for example, the base Intent you supply should have the component name explicitly set to one of your own components, to ensure it is ultimately sent there and nowhere else. ( PendingIntent'i bir uygulamaya gönderirken şunu demiş oluruz : Ey yabancı uygulama ben bu intent'i kullanmak için gerekli izinleri aldım, bu izinlere artık sen de sahipsin, bu intent'i ben nasıl kullanabiliyorsam sen de aynı izinlerle kullanabilirsin. )
For more info :
https://developer.android.com/reference/android/app/PendingIntent.html

Hiç yorum yok:

Yorum Gönder