PendingIntent es una parte importante del marco de Android, pero la mayoría de los recursos disponibles para los desarrolladores se centran en los detalles de su implementación, una "referencia de token compatible con el sistema", en lugar de usarlos.
Android 12 , , PendingIntent
, , , , , PendingIntent
.
PendingIntent?
PendingIntent
Intent
, , . , .
, . .
PendingIntent
, Intent
, PendingIntent
, . , , .
, PendingIntent
, .
PendingIntent
- , :
val intent = Intent(applicationContext, MainActivity::class.java).apply {
action = NOTIFICATION_ACTION
data = deepLink
}
val pendingIntent = PendingIntent.getActivity(
applicationContext,
NOTIFICATION_REQUEST_CODE,
intent,
PendingIntent.FLAG_IMMUTABLE
)
val notification = NotificationCompat.Builder(
applicationContext,
NOTIFICATION_CHANNEL
).apply {
// ...
setContentIntent(pendingIntent)
// ...
}.build()
notificationManager.notify(
NOTIFICATION_TAG,
NOTIFICATION_ID,
notification
)
, Intent
, , PendingIntent
, .
, , , PendingIntent
, , , FLAG_IMMUTABLE.
NotificationManagerCompat.notify() . , , PendingIntent.send() PendingIntent
, .
PendingIntent
, PendingIntent
, , ! , PendingIntent
, , FLAG_UPDATE_CURRENT:
val updatedIntent = Intent(applicationContext, MainActivity::class.java).apply {
action = NOTIFICATION_ACTION
data = differentDeepLink
}
// Because we're passing `FLAG_UPDATE_CURRENT`, this updates
// the existing PendingIntent with the changes we made above.
val updatedPendingIntent = PendingIntent.getActivity(
applicationContext,
NOTIFICATION_REQUEST_CODE,
updatedIntent,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
// The PendingIntent has been updated.
, PendingIntent
.
Inter-app APIs
. startActivityForResult() onActivityResult(), .
-, API . PendingIntent
extra Intent
, . PendingIntent
, .
PendingIntent
, , , , .
PendingIntent
, , - - Intent
. , , , .
PendingIntents
, , ? , - : " PIZZA!".
PendingIntent
.
PendingIntent
— , , Intent
, , PendingIntent.getIntent()
, Intent
, . ?
send()
PendingIntent
, , , , Intent
:
fun PendingIntent.send(
context: Context!,
code: Int,
intent: Intent?
)
intent
Intent
, PendingIntent
, Intent
, PendingIntent
.
.
val orderDeliveredIntent = Intent(applicationContext, OrderDeliveredActivity::class.java).apply {
action = ACTION_ORDER_DELIVERED
}
val mutablePendingIntent = PendingIntent.getActivity(
applicationContext,
NOTIFICATION_REQUEST_CODE,
orderDeliveredIntent,
PendingIntent.FLAG_MUTABLE
)
PendingIntent
-. customerMessage
, :
val intentWithExtrasToFill = Intent().apply {
putExtra(EXTRA_CUSTOMER_MESSAGE, customerMessage)
}
mutablePendingIntent.send(
applicationContext,
PENDING_INTENT_CODE,
intentWithExtrasToFill
)
EXTRA_CUSTOMER_MESSAGE
Intent
.
(pending intent)
PendingIntent
,Intent
. , , , , Intent.setComponent().
,
Intent.setPackage()
. , .Intent
, .
PendingIntent
,FLAG_IMMUTABLE
, ,Intent
.
, PendingIntent
, . PendingIntent
- - Intent
.
, PendingIntent
, , .
FLAG_IMMUTABLE: , Intent
PendingIntent
, Intent
PendingIntent.send()
. FLAG_UPDATE_CURRENT
PendingIntent
.
Android 12 PendingIntent
, , .
Android Android 6 (API 23) PendingIntents
.
FLAG_MUTABLE: , Intent
PendingIntent
PendingIntent.send()
.
ComponentName Intent
PendingIntent
. !
Android 12. Android 12 PendingIntents
, FLAG_IMMUTABLE
, .
FLAG_UPDATE_CURRENT: , PendingIntent
, PendingIntent
. PendingIntent
, .
FLAG_ONE_SHOT: PendingIntent
( PendingIntent.send()
). PendingIntent
, Intent
. - .
FLAG_ONE_SHOT , " (replay attacks)".
FLAG_CANCEL_CURRENT: PendingIntent
, , . , PendingIntent
, , . FLAG_CANCEL_CURRENT
, , .
PendingIntents
PendingIntent API. MediaStore.createWriteRequest(), Android 11.
static fun MediaStore.createWriteRequest(
resolver: ContentResolver,
uris: MutableCollection<Uri>
): PendingIntent
, PendingIntent
Intent
, Intent
, , , .
, PendingIntents
PendingIntent
. , FLAG_UPDATE_CURRENT
FLAG_IMMUTABLE
.
, - ComponentName Intent
- PendingIntent
.
, , PendingIntent
, , .
"Android Developer. Basic". , , .