Intent Filter用法
来源:互联网 发布:淘宝女装店铺推荐 编辑:程序博客网 时间:2024/06/05 16:34
Intent Filiter下可以使用如下标签:
action:使用android:name属性指定要为之服务的动作的名称。每个Intent Filiter必须要有至少一个action(标签)。
category:使用android:name属性来指定应该在哪种情况下为action提供服务。每个Intent Filiter可以包含多个category标签。即可以指定自己的category,也可以使用android提供的标准值。
data:data标签允许指定组件可以执行的数据类型。根据情况,也可以包含多个数据标签。可以使用以下属性的任意组合来指定你的组件所支持的数据。
android:host:指定一个有效的主机名
android:minetype:指定组件可以执行的数据类型
android:path:指定URI的有效路径值
android:port:指定主机的有效端口
android:scheme:要求一种特定的模式(如content或http)
<activity android:name=".MyActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="www.csdn.com"/> </intent-filter> </activity>
Android如何解析Intent Filter
当startActivity中传入一个隐式Intent时,决定启动哪一个Activity的过程叫做intent解析。目的是找出最匹配的Intent Filter
1:Android将已安装包的可用的Intent Filter放到一个表中。
2:解析Intent时相关联的动作或者类型不匹配的Intent Filter将会从列表中移除
如果Intent Filter包含了指定action(动作),那么就认为动作匹配了。如果检查到没有任何一个动作和Intent指定的动作匹配时,就认为动作匹配失败了
对category匹配来说,Intent Filter必须包含待解析的Intent中的所有category,当然还可以包含其它的
3:最后Intent的数据URI的每一部分都和Intent Filter的data标签进行比较。如果Intent Filter指定了scheme,host/authoriy,path或者MIME类型,那么这些值都要和Intent的URI比较。任意一个不匹配都会把Intent Filter从列表移除。没有指定数据值的Intent Filter将会和所有的Intent数据值匹配。
4:当隐式启动一个Activity时,如果这个进程解析出多个组件,那么所有可能匹配的组件都会呈现给用户。对于Broadcast Receiver,每个匹配的接收器将接收Broastcast Intent
下面写了个测试程序,简单明了。
package com.example.testintentfilter;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;//下面注释的方式也是可行的public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void start1(View v) {Intent intent = new Intent();Uri uri = Uri.parse("http://blog.csdn.net/chenliqiang12345678");intent.setAction("myaction");intent.setDataAndType(uri, "a/b"); //startActivity(intent);//这里需要注意的是,Type属性和Data属性一般会出现相互覆盖的情况,如果希望Intent既有Data属性也有Type属性,必须通过setDataAndType()方法来实现。/*Intent intent = new Intent("myaction", Uri.parse("http://blog.csdn.net/chenliqiang12345678"));startActivity(intent);*/}public void start2(View v) {Uri uri = Uri.parse("http://blog.csdn.net/chenliqiang12345678");Intent intent = new Intent(Intent.ACTION_VIEW, uri);startActivity(intent);/*Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");Uri content_url = Uri.parse("http://blog.csdn.net/chenliqiang12345678");intent.setData(content_url);startActivity(intent);*/}public void start3(View v) {Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");Uri content_url = Uri.parse("http://blog.csdn.net/chenliqiang12345678");intent.setData(content_url);intent.setClassName("com.UCMobile", "com.UCMobile.main.UCMobile"); //此处指定UC浏览器打开网页,当前packageName为:com.UCMobile className:为com.UCMobile.main.UCMobilestartActivity(intent);}}
package com.example.testintentfilter;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.widget.Toast;public class TestActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);String action = this.getIntent().getAction();final Uri data = this.getIntent().getData();String type = this.getIntent().getType();Toast.makeText(this, "action is:"+action+"\r\nuri is :"+data.toString()+"\r\ntype is :"+type+"\r\n2s latter will be open", Toast.LENGTH_SHORT).show();new Handler().postDelayed(new Runnable() {@Overridepublic void run() {Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");intent.setData(data);startActivity(intent);}}, 2000);}}
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.testintentfilter" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.testintentfilter.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.example.testintentfilter.TestActivity" android:label="@string/title_activity_test" > <intent-filter > <action android:name="myaction"/> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" android:path="blog.csdn.net/chenliqiang12345678"/> <!-- <data android:scheme="http" android:host="blog.csdn.net" android:path="/chenliqiang12345678"/> --> <data android:mimeType="a/b"></data> </intent-filter> </activity> </application></manifest>源码下载
- Intent Filter用法
- <intent-filter>隐式intent的用法
- Android中关于Intent filter和Intent的一些用法。
- Intent Filter
- intent filter
- <intent-filter>
- intent-filter
- intent-filter
- Intent-Filter
- Intent-filter
- Intent filter
- Intent 和Intent Filter
- Android intent intent-filter
- Android intent intent-filter
- Intent 和 Intent Filter
- Intent 和 Intent Filter
- Intent和Intent Filter
- Intent 和 Intent Filter
- android高级控件之Volley
- 安装CocoaPods提速的方法
- Android布局
- 泛型边界和通配符
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)|分块|莫队算法
- Intent Filter用法
- CoreData
- opencv的四舍五入原来是这样来的
- Google C++编程风格指南(一)之头文件的相关规范
- Python闭包
- POJ 3348 Cows (凸包+多边形面积)
- ios中将单个字典转换成json格式以及json格式的转换成字典解析
- NopCommerce添加新功能“类型属性”【新功能的实现步骤】
- 嵌入式开发环境搭建随记