之前已经接触过Intent,现在来深入学习Intent的一些东西
Intent可以用来启动一个Activity,一个Service,还可以用来发起一个广播(Broadcast)
启动方法如下:
组件名称 方法名称
Activity startActivity() ; startActivityForResult()
Service startService ; bindService()
Broadcast sendBroadcast() ; sendOrderedBroadcast() ; sendStickyBroadcast()
Intent由一下几个部分组成:动作(Action)、数据(Data)、分类(Category)、类型(Type)、组件(Component)、扩展信息(Extra)
Intent寻找目标组件时有两种方法:1.通过组件名称直接制定 2.通过Intent Filter过滤指定
Intent的通过Intent Filter过滤指定
在AndroidManifest.xml中添加指定活动,服务,广播等后,找到相应的xml位置,加入声明action的xml语句即可实现,例如:
<service android:name=".SubService">
<intent-filter >
<action android:name="com.example.SubService.MY_ACTION"/>
</intent-filter>
</service>
调用的语句如下:
private static final String MY_ACTION = "com.example.SubService.MY_ACTION"; //这里的字符串要和上面xml中的android:name代码的字符串对应
Intent intent = new Intent();
intent.setAction(MY_ACTION); //设置ACTION为我们自定义的ACTION
startService(intent);
Intent的ComponentName属性
Intent的组件名称对象由ComponentName类来封装,组建名称包含包名称和类名称,被声明在AndroidManifest.xml文件中
组件名称通过setComponent()、setClass()、setClassName()设置,通过getComponent()获得
ConponentName cn = new ComponentName(MainActivity.this,"com.example.MyActivity"); //实例化组件名称
Intent intent = new Intent(); //实例化Intent
intent.setComponent(cn); //为Intent设置组件名称属性
startActivity(intent); //启动Activity
Intent的Action属性
Action是指Intent要完成的动作,是一个字符串常量。
Intent类中定义了大量Action常量属性,例如ACTION_CALL(打电话)
我们也可以自己定义Action来使用
通过setAction来设置IntentAction属性,通过getAction来获取Intent的Action属性
下面列出标准的Activity Action常量:
常量名称 常量值 意义
ACTION_MAIN android.intent.action.MAIN 应用程序的入口
ACTION_VIEW android.intent.action.VIEW 显示数据给用户
ACTION_ATTACH_DATA android.intent.action.ATTACH_DATA 指明附加给其他地方的一些数据
ACTION_EDIT android.intent.action.EDIT 显示可编辑的数据
ACTION_PICK android.intent.action.PICK 选择数据
ACTION_CHOOSER android.intent.action.CHOOSER 显示一个Activity选择器
ACTION_GET_CONTENT android.intent.action.GET_CONTENT 获得内容
ACTION_DIAL android.intent.action.DIAL 显示打电话面板
ACTION_CALL android.intent.action.CALL 直接打电话
ACTION_SEND android.intent.action.SEND 直接发送信息
ACTION_SENDTO android.intent.action.SENDTO 选择发信息
ACTION_ANSWER android.intent.action.ANSWER 应答电话
ACTION_INSERT android.intent.action.INSERT 插入数据
ACTION_DELETE android.intent.action.DELETE 删除数据
ACTION_RUN android.intent.action.RUN 运行数据
ACTION_SYNC android.intent.action.SYNC 同步数据
ACTION_PICK_ACTIVITY android.intent.action.PICK_ACTIVITY 选择Activity
ACTION_SEARCH android.intent.action.SEARCH 搜索
ACTION_WEN_SEARCH android.intent.action.WEB_SEARCH Web搜索
ACTION_FACTORY_TEST android.intent.action.FACTORY_TEST 工厂测试入口点
Intent的Data属性
Intent的Data属性是执行动作的URI和MIME类型,不同的Action有不同的Data数据指定
一些常见的Action和Data的匹配应用如下:
Action属性 Data属性 说明
ACTION_VIEW content://contacts/people/1 显示_id为1的联系人信息
ACTION_DIAL content://contacts/people/1 将_id为1的联系人电话号码显示在拨号界面中
ACTION_VIEW tel:123 显示电话为123的联系人信息
ACTION_VIEW http://www.baidu.com 在浏览器中浏览该网址
ACTION_VIEW file://sdcard/music.mp3 播放MP3
ACTION_VIEW geo:39.3256,116.2312 显示地图
public void onClick(View v)
{
String data = "http://baidu.com";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW); //设置ACTION
intent.setData(Uri.parse(data)); //为ACTION添加附加数据,数据是一个网址
startActivity(intent); //启动浏览网址
}
Intent的Category属性
Intent中的Category属性是一个执行Action的附加信息。
例如,CATEGORY_LAUNCHER意味着加载程序时,Activity出现在最上面。还有CATEGORY_HOME则表示回到Home界面
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME); //添加Category属性使得返回Home界面
startActivity(intent);
Intent的Extra属性
Intent的Extras属性是添加一些组件的附加信息
Intent intent = new Intent();
intent.setClass(MainActivity.this,OtherActivity.class);
intent.putExtra("name","This is a Test");
startActivity(intent);