Intent学习篇

Intent

  • Intent分为显式Intent和隐式Intent。
  • Intent包含以下几项:组件名称、操作、数据、类别、Extra和标志。
  • 在启动服务的时候,为了确保应用的安全性,会使用显式Intent,并且不要为服务声明过滤器。因为在使用隐式Intent启动服务的时候无法确定哪些服务会响应Intent,并且用户无法看到哪些服务已经启动。从Android5.0开始,使用隐式Intent调用bindService(),系统会引发异常。
  • 使用隐式Intent的时候需要注意,在调用startActivity()或startActivityForResult()将Intent发送出去的时候,会为Intent添加一项Category为GATEGORY_DEFAULT,所以要在你想要接受该Intent的Activity的过滤器中添加这一类别。
  • 当以startActivity()的形式传递一个intent,并且有多个app可以handle时,用户可以在弹出dialog的时候选择默认启动的app(通过勾选dialog下面的选择框,如上图所示)。该功能对于用户有特殊偏好的时候非常有用(例如用户总是喜欢启动某个app来查看网页,总是喜欢启动某个camera来拍照)。
    然而,如果用户希望每次都弹出选择界面,而且每次都不确定会选择哪个app启动,例如分享功能,用户选择分享到哪个app都是不确定的,这个时候,需要强制弹出选择的对话框。(这种情况下用户不能选择默认启动的app)。
    为了显示chooser, 需要使用createChooser()来创建Intent:
Intent intent = new Intent(Intent.ACTION_SEND);
...

// Always use string resources for UI text. This says something like "Share this photo with"
String title = getResources().getText(R.string.chooser_title);
// Create and start the chooser
Intent chooser = Intent.createChooser(intent, title);
startActivity(chooser);

PendingIntent

PendingIntent 对象是 Intent 对象的包装器。PendingIntent 的主要目的是授权外部应用使用包含的 Intent,就像是它从您应用本身的进程中执行的一样。

使用待定Intent的主要用例:

  • 声明用户使用您的通知执行操作时所要执行的Intent(Android系统的NotificationManager执行的Intent)
  • 声明用户使用您的应用小组件执行操作的时执行的Intent(主屏幕应用执行Intent)
  • 声明未来某一特定时间要执行的Intent(AlarmManager执行Intent)

由于每个 Intent 对象均设计为由特定类型的应用组件(Activity、Service 或 BroadcastReceiver)进行处理,因此还必须基于相同的考虑因素创建 PendingIntent。使用待定 Intent 时,应用不会使用调用(如 startActivity())执行该 Intent。相反,通过调用相应的创建器方法创建 PendingIntent 时,您必须声明所需的组件类型:

  • PendingIntent.getActivity(),适用于启动 Activity 的 Intent
  • PendingIntent.getService(),适用于启动 Service 的 Intent
  • PendingIntent.getBroadcast(),适用于启动 BroadcastReceiver 的 Intent
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值