Intent
Intent,消息传递对象,用于android组件间通讯。
三大用处:启动Activity、启动Service、传递Broadcast
1. 启动Activity
例:AActivity启动BActivity
AActivity.java
Intent intent = new Intent(this, BActivity.class);
intent.putExtra("key_str", "value_str");
// ...
startActivity(intent);
BActivity.java
Intent intent = getIntent();
String values = getStringExtra("values");
2. 启动Service
待补充
3. 传递广播
Intent intent = new Intent();
intent.setAction(BROADCAST_ACTION);
sendBroadcast(intent);
Intent 分为 显式Intent 和 隐式Intent。
区别在于:
显式Intent在参数中显式指定要启动的组件(类名);隐式Intent不指定类名,而是声明
Action、Data、Category,让系统筛选出具体的组件。
显式Intent举例上面有,略。
隐式Intent举例:
在AndroidManifest.xml中为Activity设置intent-filter
设置BActivity能处理的intent(可以是多个)
<activity
android:name="com.example.BActivity">
<intent-filter>
<action android:name="abcdefg"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
在AActivity中才能通过action name找到BActivity。
AActivity.java
Intent intent = new Intent();
intent.setAction("abcdefg");
startActivity(intent);
//或者.....构造方法直接设置Action
Intent intent = new Intent("abcdefg");
startActivity(intent);
一些常用的内置Action常量(String类型)(Android Intent Action 大全)
android.intent.action.DIAL # 拨号
android.intent.action.MAIN # 作为主入口点启动
隐式intent例2:
//调用系统浏览器打开网页
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
通常action的命名规则是包名+Action名。
如果系统根据Action、Data、Catagory找到多个符合条件的Activity,系统就会让用户选择一个打开;
我们也可以开发一个DialApp设置action为android.intent.action.DIAL,这样别的程序调用拨号器时,就会弹出 系统 or DialApp 来选择。
如果没找到Activity,程序会抛出ActivityNotFoundException异常。可以在代码中try catch异常。