Android学习笔记之Intent
一.显示Intent
例如:startActivity(new Intent(MainActivity.this,MyAty.class));
二.隐式Intent
使用意图过滤器来启动activity,注意从application的图形页面来注册activity,这样名字不易出错。
在清单文件中至少要有action和category
<!-- ImplicitIntentTestActivity 活动配置信息 -->
<activity android:name=".ImplicitIntentTestActivity"
android:label="@string/title_activity_main">
<intent-filter>
<action android:name="com.example.chapter3_2.test"/>
<action android:name="com.example.chapter3_2.test2"/>
<category android:name="com.freedie.category.test1"/>
<category android:name="android.intent.category.DEFAULT"/><!-- 由于要接受startActivity(intent)的隐式Intent -->
<data android:scheme="http" android:host="www.baidu.com" android:port="80" android:path="/blog/abc.html"/>
<data android:mimeType="audio/*"/>
</intent-filter>
</activity>
使用startActivity方法后出现at dalvik.system.NativeStart.main(Native Method),这一错误的原因是因为忘了在AndroidManifest.xml中配置新的activity,或者经常有人打错了activity的名字,从而导致错误的出现。
如果是从A应用来启动B应用就需要隐式意图,显示意图无法实现。如果不允许其他应用访问可以在activity节点添加android:exported=“false”来设置。若强行启动会抛出安全异常,可以捕获。
隐式Intent可以多匹配,弹出对话框供用户选择activity.
三.Intent过滤器相关选项
intent-filter节点中
action节点中android:name属性来指定声明的组件可以对什么名称的动作的意图来执行服务和处理。每一个intent-filter至少有一个action节点,否则任何Intent请求都不能和该intent-filter匹配。
category节点中android:name属性来指定声明的组件可以对什么种类的意图进行处理和服务。
其中BROWSABLE:表明所声明的Activity可以在浏览器当中通过发送意图而激活。
DEFAULT:对没有设置种类的intent对象进行处理和服务。
GADGET:拥有嵌入其他activity当中运行的能力。
HOME:按下HOME键就会看到所声明的Activity。
LAUNCHER:作为程序的主入口。
data节点作为对可操作的数据进行描述,描述可以是数据类型,也可以是URI。
android:scheme是URL的协议,这个属性必须声明了,其他属性才有意义。
android:host是URI的主机名。
android:mimeType是MIME的媒体类型
android:path是用来匹配完整路径的
android:pathPrefix是用来匹配路径的开头部分
android:pathPattern是用表达式来匹配整个路径
android:port是URI的端口,指定了sheme和host才有意义。
四.Intent过滤器匹配
1.只要activity中的action或者category任意一项匹配即可,调用的方法是intent.setAction(“com.example.chapter3.test”);或者intent.addCategory(“…..”)
2.也可以通过data节点配对,例如
android:sheme = “http” android:host = “www.baidu.com” android:port = “80” android:path = “/blog/abc.html” android:mimeType = “audio/*”
则使用方法intent.setDataAndType(Uri.parse(“http://www.baidu.com:80/blog/abc.html“), “audio/*”);
五.Intent启动内部组件