安卓中Intent(意图)是一种消息机制,活动、服务和广播接收器之间的调用和消息传递都是通过Intent实现的。
意图实现组件之间的通信:
1.启动活动:
- startActivity()
- startActivityForResult()
2.启动服务:
- startService()//启动一个本地服务
- bindService()//连接一个远程服务
3.发送广播:
- sendBroadcast()//将广播发送给其他应用
意图的内容:
- Component(目标组件)://显式意图
- Action(动作)://隐式意图
- Data(数据):
- Category(类别):
- Extra(附加数据):
- Flag(标志)://目标组件任务行为
意图类型:
显式意图:
需要提供包名、类名或context上下文对象:
setComponent(ComponentName name)
//Intent 类的方法,提供包名和目标组件类
setClassName(String packageName,String classNameInThatContext)
//Intent 类的方法,context上下文对象和目标组件类
setClassName(Context context,String classNameInThatContext)
//Intent 类的方法,context上下文对象和目标组件类
setClass(Context context,Class classObjectInThatContext)
隐式意图:
应用在应用与不同应用之间,请求需要意图过滤器(Intent Filter)
需要在AndroidManifest.xml中注册:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
隐式意图组件匹配,检查三个信息:Action、Data、Category
Action动作:
- ACTION_CALL 活动
- ACTION_EDIT 活动
- ACTION_MAIN 活动
- ACTION_VIEW 活动
- ACTION_SENDTO 活动
- ACTION_BATTERY_LOW 广播接收器
- ACTION_HEADSET_PLUG 广播接收器 耳机插入拔出
- ACTION_SCREEN_ON 广播接收器
- ACTION_TIMEZONE_CHANGED 广播接收器
//fpt访问本地资源
Intent intent = new Intent();
Intent.setAction(Intent.ACTION_SENDTO);
startActivity(intent)
Data数据:指定数据URI和数据的MIME类型组成
- URI :scheme /host /port /path
- MIME :text/html multipart/form-data image/png
Intent intent = new Intent();
Uri playUri = Uri.parse(“XXX”);
intent.setDataAndType(playUri,”audio/MP3”)
startActivity(intent);
Category类别:
- android.intent.category.LAUNCHER //启动项
- android.intent.category.DEFAULT //默认类别
intent.addCategory(CATEGORY_APP_SUCCESS)
系统内置意图:
// 打开Web浏览器
Uri uri = Uri.parse("http://www.sina.com/");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
// 打开地图
Uri uri = Uri.parse("geo:39.904667,116.408198");//纬度、经度
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
// 拨打电话
Uri uri = Uri.parse("tel:100861");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
// 发送Email
Intent it = new Intent(Intent.ACTION_SEND);
//发送内容
it.putExtra(Intent.EXTRA_TEXT, "The email body text");
//发送主题
it.putExtra(Intent.EXTRA_SUBJECT, "Subject");
//设置数据类型
it.setType("text/plain");
startActivity(it);