zoukankan      html  css  js  c++  java
  • Android菜鸟的成长笔记(9)——Intent与Intent Filter(下)

    接着上一篇的内容,下面我们再来看看Intent的Data与Type属性。

    一、Data属性与Type属性

    Data属性通常用于向Action属性 提供操作的数据,Data属性接受一个Uri对象

    格式:scheme://host:port/path

    例如:

    content://com.android.contacts/contacts/1

    tel:123

    其中prot部分被省略了,contacts/1是path部分。

    Type属性用于指定该Data所指定Uri所对应的MIME类型,这种MIME类型可以是自定义的,但是要符合abc/xyz格式。

    二、Data属性与Type属性之间的关系

    Type属性和Data同时出现会出现覆盖现象,如果要同时设置要使用setDataAndType()方法,举例如下:

    	//Type属性被Data覆盖
    	public void overrideType(View source){
    		Intent intent = new Intent();
    		intent.setType("abc/xyz");
    		intent.setData(Uri.parse("lee://www.baidu.com:80/test"));
    	}
    	//Data属性被Type覆盖
    	public void overrideData(View source){
    		Intent intent = new Intent();
    		intent.setData(Uri.parse("lee://www.baidu.com:80/test"));
    		intent.setType("abc/xyz");
    	}
    	//同时设置Data和Type
    	public void dataAndType(View source){
    		Intent intent = new Intent();
    		intent.setDataAndType(
    				Uri.parse("lee://www.baidu.com:80/test"), "abc/xyz");
    	}	
    在manifest配置文件中配置Activity的方法如下

                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                    <data 
                        android:mimeType=""  <!-- Type属性 -->
                        android:scheme=""	<!-- scheme部分 -->
                        android:host=""		<!-- host部分 -->
                        android:port=""		<!-- port部分 -->
                        android:path=""		<!-- path部分 -->
                        android:pathPrefix=""	<!-- path前缀 -->
                        android:pathPattern=""/>    <!-- path模版 -->
                </intent-filter>

    三、Data属性与Type属性的匹配方式

    Type属性也是用户指定组件匹配的组件,Type是需要严格匹配的。

    Data属性则不需要严格匹配,过程如下:

    如果指定了android:scheme属性,那么只要Intent的Data属性的scheme部分与android:scheme属性相同就可以启动该组件。

    如果制定了android:scheme属性和android:host需要两个属性与Intent的Data部分的该部分相同则启动该组件。

    如果定制了android:scheme、android:host、android:port属性则需要与该部分相同才能启动该组件。

    ...................

    四、小练习

    Intent intent = new Intent();
    String data = "http://blog.csdn.net/dawanganban";
    Uri uri = Uri.parse(data);
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(uri);
    startActivity(intent);

    Intent intent = new Intent();
    String data = "content://com.android.contacts/contacts/1";
    Uri uri = Uri.parse(data);
    intent.setData(uri);
    startActivity(intent);

    Intent intent = new Intent();
    String data = "tel:10000";
    Uri uri = Uri.parse(data);
    intent.setData(uri);
    startActivity(intent);

    五、Intent的其他属性

    Extra属性:用于在多个Activity之间传递数据,该属性其实是一个Bundle对象,后面在Activity间传值的文章中将会介绍。

    Flag属性:一些额外的控制旗标,在后面将会详细介绍。


  • 相关阅读:
    应用量化时代 | 微服务架构的服务治理之路
    API网关——Kong实践分享
    容器云未来:Kubernetes、Istio 和 Knative
    微服务网关实战——Spring Cloud Gateway
    服务迁移之路 | Spring Cloud向Service Mesh转变
    基于事件驱动机制,在Service Mesh中进行消息传递的探讨
    MSMQ 和 MQTT
    MQTT和WebSocket
    NetCore WebSocket 即时通讯示例
    .NET 即时通信,WebSocket服务端实例
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469212.html
Copyright © 2011-2022 走看看