pending intent

PendingIntent这个类用于处理即将发生的事情。比如在通知Notification中用于跳转页面,但不是马上跳转。

Intent 是及时启动,intent 随所在的activity 消失而消失。


PendingIntent可以看作是对intent的包装,通常通过getActivity, getBroadcast , getService来得到pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。

  1. PendingIntentpi=PendingIntent.getBroadcast(SmsActivity.this,0,newIntent(XXX),0);
  2. sms.sendTextMessage(number,null,msg,pi,null);
  3. 上例子中,当短信发送成功时,则用pendingIntent发送一个广播出去

正由于pendingintent中 保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行pendingintent里的 Intent, 就算在执行时当前App已经不存在了,也能通过存在pendingintent里的Context照样执行Intent。另外还可以处理intent执行 后的操作。常和alermanger 和notificationmanager一起使用。
Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,pending表示即将发生或来临的事情,可以理解为延迟执行的intent

PendingIntent是对Intent一个包装。

如:


mPermissionIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_USB_PERMISSION), 0);

mUsbManager.requestPermission(usbDevice, mPermissionIntent);

@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION}) 1662 public void requestLocationUpdates(@NonNull String provider, 1663 @NonNull LocationRequest locationRequest, 1664 @NonNull PendingIntent pendingIntent) { 1665 Preconditions.checkArgument(provider != null, "invalid null provider"); 1666 Preconditions.checkArgument(locationRequest != null, "invalid null location request"); 1667 Preconditions.checkArgument(pendingIntent != null, "invalid null pending intent"); 1668 1669 //#ifdef OPLUS_EXTENSION_HOOK 1670 //zengziping@ANDROID.ARCHDESIGN, 2021/07/08, Add for AOSP hook 1671 if (!mLocationManagerExt 1672 .checkPermission(Binder.getCallingPid(), Binder.getCallingUid(), "requestLocationUpdates")) { 1673 return; 1674 } 1675 //#endif /* OPLUS_EXTENSION_HOOK */ 1676 if (Compatibility.isChangeEnabled(BLOCK_UNTARGETED_PENDING_INTENTS)) { 1677 Preconditions.checkArgument(pendingIntent.isTargetedToPackage(), 1678 "pending intent must be targeted to a package"); 1679 } 1680 1681 if (Compatibility.isChangeEnabled(BLOCK_IMMUTABLE_PENDING_INTENTS)) { 1682 //#ifdef OPLUS_ARCH_INJECT 1683 //Huaqiu.Lin@CONNECTIVITY.GPS.LOCATION.STABILITY, 2021/08/18, Add for code arch. 1684 if (pendingIntent.isImmutable()) { 1685 mLocationManagerExt.handleCompatibilityException(mContext); 1686 } 1687 // #endif /* OPLUS_ARCH_INJECT */ 1688 Preconditions.checkArgument(!pendingIntent.isImmutable(), 1689 "pending intent must be mutable"); 1690 } 1691 1692 try { 1693 mService.registerLocationPendingIntent(provider, locationRequest, pendingIntent, 1694 mContext.getPackageName(), mContext.getAttributionTag()); 1695 } catch (RemoteException e) { 1696 throw e.rethrowFromSystemServer(); 1697 } 1698 }
最新发布
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值