Android intent-filter意图过滤器


  意图过滤器在Android中应用比较广泛,但是我们使用得最多的还是给启动页面设置意图过滤器,这样我们才能在打开一个应用时知道第一个启动的Activity是哪一个.当然Intent-filter不止拥有这一个功能.还可以实现页面和原生的跳转,实现隐式意图的响应等.

  • category(类别):category中一般会配置一条默认的参数,“android.intent.category.DEFAULT”,没有这一条参数的Activity无法响应隐式意图.
  • action(行为):表示Activity需要执行的动作.
  • data(数据):启动activity所需要的资源,为uri类型数据.由scheme、host、port、path、mimeType组成.
  • extras:表示该Activity启动时需要的额外数据,通过putExtras()方法设置.

category常用值


  • CATEGORY_DEFAULT:默认值,没有该默认值则无法响应隐式意图

  • CATEGORY_HOME:用于表示该组件是Home Activity.按下Home键后返回到的页面.

  • CATEGORY_VOICE:表示该Activity可以响应声音播放

  • CATEGORY_APP_MUSIC:表示该Activity可以响应音乐播放

  • CATEGORY_APP_MESSAGING:该Activity可以做消息传递

  • CATEGORY_LAUNCHER:常与action android:name="android.intent.action.MAIN"配合使用,用于表名应用的第一个启动的Activity

  • CATEGORY_BROWSABLE :该组件可以通过浏览器打开

      category还有很多值,需要使用到时,自行研究.
    

Action常用值


  • ACTION_MAIN:程序入口
  • ACTION_VIEW:通过一个应用来显示数据
  • ACTION_EDIT:通过一个应用来修改数据
  • ACTION_DIAL:打开默认的拨号应用
  • ACTION_CALL:直接拨号,电话号码在data中
  • ACTION_ANSWER:接听电话
  • ACTION_SEND:由用户指定发送方式进行数据发送操作
  • ACTION_SENDTO:转发数据
  • ACTION_BOOT_COMPLETED:Android系统在启动完毕后发出带有此Action的广播(Broadcast)
  • ACTION_TIME_CHANGED:Android系统的时间发生改变后发出带有此Action的广播(Broadcast)
  • ACTION_PACKAGE_ADDED:Android系统安装了新的Application之后发出带有此Action的广播(Broadcast)
  • ACTION_PACKAGE_CHANGED:Android系统中已存在的Application发生改变之后(如应用更新操作)发出带有此Action的广播(Broadcast)

Uri类型


tel://    号码数据格式,后跟电话号码。 
mailto://    邮件数据格式,后跟邮件收件人地址。
smsto://    短息数据格式,后跟短信接收号码。
content://    内容数据格式,后跟需要读取的内容。 
file://    文件数据格式,后跟文件路径。
market://search?q=pname:pkgname    市场数据格式,在Google Market里搜索包名为pkgname的应用。
geo://latitude,longitude    经纬数据格式,在地图上显示经纬度指定的位置。

Scheme跳转协议


当我们需要在网页中跳转原生Android应用时,我们可以通过意图过滤器中的scheme协议来实现跳转功能.要实现网页跳转协议还需要包含BROWSABLE的category,否则也无法实现跳转.

 <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="test"
               android:host="app"/>
</intent-filter>

测试:打开一个网页点击<a href=“test://app”/>即可以打开该Activity

带参数跳转
跳转时带参数的URL:<a href=“test://app?a=100&b=99&c=98”/>
在代码中做以下解析

Uri uri = getIntent().getData();
if (uri != null) {
    String url = uri.toString();
    Log.e(TAG, "Url : " + url);
    String scheme = uri.getScheme();
    Log.e(TAG, "Scheme : " + scheme);
    String host = uri.getHost();
    Log.e(TAG, "Host : " + host);
    int port = uri.getPort();
    Log.e(TAG, "Port : " + port);
    String path = uri.getPath();
    Log.e(TAG, "Path : " + path);
    String query = uri.getQuery();
    Log.e(TAG, "Query : " + query);
    String authority = uri.getAuthority();
    Log.e(TAG, "Authority : " + authority);
    String token = uri.getQueryParameter("a");//获取指定参数
    Log.e(TAG, "Token : " + token);
    List<String> segments = uri.getPathSegments();
    Log.e(TAG, "Segments : " + segments);
    Set<String> names = uri.getQueryParameterNames();
    Log.e(TAG, "QueryParameterNames : " + names);
    String schemeSpecificPart = uri.getSchemeSpecificPart();
    Log.e(TAG, "SchemeSpecificPart : " + schemeSpecificPart);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值