android 隐式意图打开浏览器
2014-02-06 22:35:00 weixin_33877885 阅读数 3

场景:

自己的应用内,显式意图 效率高

激活其他应用或希望自己被别人激活,使用隐式意图或声明Action 

<?xml version="1.0" encoding="utf-8"?>
	<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	    package="com.pas.intenttest"
	    android:versionCode="1"
	    android:versionName="1.0" >
	
	    <uses-sdk
	        android:minSdkVersion="8"
	        android:targetSdkVersion="18" />
	    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
	
	    <application
	        android:allowBackup="true"
	        android:icon="@drawable/ic_launcher"
	        android:label="@string/app_name"
	        android:theme="@style/AppTheme" >
	        <activity
	            android:name="com.pas.intenttest.MainActivity"
	            android:label="@string/app_name"
	            android:icon="@drawable/ic_launcher" >
	            <intent-filter>
	                <action android:name="android.intent.action.MAIN" />
	                <category android:name="android.intent.category.LAUNCHER" />
	            </intent-filter>
	        </activity>
	        <activity
	            android:name="com.pas.intenttest.SecActivity"
	            android:label="@string/title_activity_sec" >
	            <!-- 自定义intent动作Action -->
	            <intent-filter >
	                <action android:name="com.pas.intenttest.sec"/>
	                <category android:name="android.intent.category.DEFAULT" />
	                <!-- 接受的数据描述 表示数据格式开头-->
	                <!-- mimeType表示数据类型 若没有标准格式 一般写为vnd.android.cursor.item/xxx -->
	                <data android:scheme="pas" android:mimeType="vnd.android.cursor.item/pas"></data>
	            </intent-filter>
	        </activity>
	    </application>
	
	</manifest>

 

public void click2(View v)
	{
		//隐式意图
		//描述动作的行为
		Intent intent=new Intent();
		intent.setAction(Intent.ACTION_VIEW);
		intent.setData(Uri.parse("http://www.baidu.com"));
		startActivity(intent);
	}
	
	public void click3(View v)
	{
		//隐式意图
		//描述动作的行为
		//Category用于提供一些额外的环境参数
		//参数必须与配置中相符合 不可短缺 否则造成找不到Activity
		Intent intent=new Intent();
		intent.setAction("com.pas.intenttest.sec");
		intent.setDataAndType(Uri.parse("pas:asdwd"), "vnd.android.cursor.item/pas");
		intent.addCategory(Intent.CATEGORY_DEFAULT);
		startActivity(intent);
	}
	
	public void click4(View v)
	{
		//隐式意图
		Intent intent=new Intent();
		intent.setAction("android.intent.action.SEND");
		intent.setData(Uri.parse("mms:110"));
		intent.addCategory(Intent.CATEGORY_DEFAULT);
		startActivity(intent);
	}

 

转载于:https://my.oschina.net/u/1246663/blog/197468

2016-03-01 19:48:13 u012842688 阅读数 605
转自:http://www.cnblogs.com/javayuan/p/4951075.html

在有些时候,我们可能想打开某个不确定的应用,比如,我们想要通过浏览器打开百度的站点,但是我们并不强调必须要使用哪一个浏览器,那么这种情况我们使用显示意图可能不太好,更好的做法是使用隐式意图打开网站。

效果:

 

点击按钮后:

 

附代码:

复制代码
 1 package com.yy.activity;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.net.Uri;
 6 import android.os.Bundle;
 7 import android.view.View;
 8 
 9 public class MainActivity extends Activity {
10 
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_main);
15     }
16     
17     /**
18      * 使用隐式意图打开浏览器
19      * @param view
20      */
21     public void click(View view){
22         //意图
23         Intent intent=new Intent();
24         //意图的行为,隐式意图
25         intent.setAction(Intent.ACTION_VIEW);
26         //意图的数据
27         intent.setData(Uri.parse("http://www.baidu.com"));
28         //启动
29         startActivity(intent);
30     }
31 }
2014-09-03 16:29:51 hai_chong123 阅读数 915

场景:

自己的应用内,显式意图 效率高

激活其他应用或希望自己被别人激活,使用隐式意图或声明Action 

<?xml version="1.0" encoding="utf-8"?>
	<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	    package="com.pas.intenttest"
	    android:versionCode="1"
	    android:versionName="1.0" >
	
	    <uses-sdk
	        android:minSdkVersion="8"
	        android:targetSdkVersion="18" />
	    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
	
	    <application
	        android:allowBackup="true"
	        android:icon="@drawable/ic_launcher"
	        android:label="@string/app_name"
	        android:theme="@style/AppTheme" >
	        <activity
	            android:name="com.pas.intenttest.MainActivity"
	            android:label="@string/app_name"
	            android:icon="@drawable/ic_launcher" >
	            <intent-filter>
	                <action android:name="android.intent.action.MAIN" />
	                <category android:name="android.intent.category.LAUNCHER" />
	            </intent-filter>
	        </activity>
	        <activity
	            android:name="com.pas.intenttest.SecActivity"
	            android:label="@string/title_activity_sec" >
	            <!-- 自定义intent动作Action -->
	            <intent-filter >
	                <action android:name="com.pas.intenttest.sec"/>
	                <category android:name="android.intent.category.DEFAULT" />
	                <!-- 接受的数据描述 表示数据格式开头-->
	                <!-- mimeType表示数据类型 若没有标准格式 一般写为vnd.android.cursor.item/xxx -->
	                <data android:scheme="pas" android:mimeType="vnd.android.cursor.item/pas"></data>
	            </intent-filter>
	        </activity>
	    </application>
	
	</manifest>
public void click2(View v)
	{
		//隐式意图
		//描述动作的行为
		Intent intent=new Intent();
		intent.setAction(Intent.ACTION_VIEW);
		intent.setData(Uri.parse("http://www.baidu.com"));
		startActivity(intent);
	}
	
	public void click3(View v)
	{
		//隐式意图
		//描述动作的行为
		//Category用于提供一些额外的环境参数
		//参数必须与配置中相符合 不可短缺 否则造成找不到Activity
		Intent intent=new Intent();
		intent.setAction("com.pas.intenttest.sec");
		intent.setDataAndType(Uri.parse("pas:asdwd"), "vnd.android.cursor.item/pas");
		intent.addCategory(Intent.CATEGORY_DEFAULT);
		startActivity(intent);
	}
	
	public void click4(View v)
	{
		//隐式意图
		Intent intent=new Intent();
		intent.setAction("android.intent.action.SEND");
		intent.setData(Uri.parse("mms:110"));
		intent.addCategory(Intent.CATEGORY_DEFAULT);
		startActivity(intent);
	}


声明:OSCHINA 博客文章版权属于作者,受法律保护。未经作者同意不得转载。


http://www.kankanews.com/ICkengine/archives/108030.shtmlhttp://www.kankanews.com/ICkengine/archives/108030.shtml

2010-10-02 10:33:00 i_like_cpp 阅读数 638

Android的隐式意图

对于隐式意图,Android是怎样寻找到这个最合适的组件呢?记的前面我们在定义活动时,指定了一个intent-filter,Intent Filter(意图过滤器)其实就是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,只有三个方面会被参考到:动作、数据(URI以及数据类型)和类别。
动作测试(Action test)
  一个意图对象只能指定一个动作名称,而一个过滤器可能列举多个动作名称。如果意图对象或过滤器没有指定任何动作,结果将如下:
• 如果过滤器没有指定任何动作,那么将阻塞所有的意图,因此所有的意图都会测试失败。没有意图能够通过这个过滤器。
• 另一方面,只要过滤器包含至少一个动作,一个没有指定动作的意图对象自动通过这个测试
类别测试(Category test)
对于一个能够通过类别匹配测试的意图,意图对象中的类别必须匹配过滤器中的类别。这个过滤器可以列举另外的类别,但它不能遗漏在这个意图中的任何类别。
原则上一个没有类别的意图对象应该总能够通过匹配测试,而不管过滤器里有什么。大部分情况下这个是对的。但有一个例外,Android把所有传给startActivity()的隐式意图当作他们包含至少一个类别:"android.intent.category.DEFAULT" (CATEGORY_DEFAULT常量)。 因此,想要接收隐式意图的活动必须在它们的意图过滤器中包含"android.intent.category.DEFAULT"。(带"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"设置的过滤器是例外)
数据测试(Data test)
当一个意图对象中的URI被用来和一个过滤器中的URI比较时,比较的是URI的各个组成部分。例如,如果过滤器仅指定了一个scheme,所有该scheme的URIs都能够和这个过滤器相匹配;如果过滤器指定了一个scheme、主机名但没有路经部分,所有具有相同scheme和主机名的URIs都可以和这个过滤器相匹配,而不管它们的路经;如果过滤器指定了一个scheme、主机名和路经,只有具有相同scheme、主机名和路经的URIs才可以和这个过滤器相匹配。当然,一个过滤器中的路径规格可以包含通配符,这样只需要部分匹配即可。
数据测试同时比较意图对象和过滤器中指定的URI和数据类型。规则如下:
a. 一个既不包含URI也不包含数据类型的意图对象仅在过滤器也同样没有指定任何URIs和数据类型的情况下才能通过测试。
b. 一个包含URI但没有数据类型的意图对象仅在它的URI和一个同样没有指定数据类型的过滤器里的URI匹配时才能通过测试。这通常发生在类似于mailto:和tel:这样的URIs上:它们并不引用实际数据。
c. 一个包含数据类型但不包含URI的意图对象仅在这个过滤器列举了同样的数据类型而且也没有指定一个URI的情况下才能通过测试。
d. 一个同时包含URI和数据类型(或者可从URI推断出数据类型)的意图对象可以通过测试,如果它的类型和过滤器中列举的类型相匹配的话。如果它的URI和这个过滤器中的一个URI相匹配或者它有一个内容content:或者文件file: URI而且这个过滤器没有指定一个URI,那么它也能通过测试。换句话说,一个组件被假定为支持content:和file: 数据如果它的过滤器仅列举了一个数据类型。

2013-02-20 16:47:40 jaycee110905 阅读数 1130
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="cn.itcast.intent"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".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=".OtherActivity"  android:label="@string/app_name">
            <intent-filter>
                <action android:name="cn.itcast.lao.li" />
                <action android:name="cn.itcast.lao.zhang" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="cn.itcast.category.li" />
                <data android:scheme="itcast" android:host="www.itcast.cn" android:path="/person"/>
                <data android:mimeType="image/gif"/>
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="8" />

</manifest> 

package cn.itcast.intent;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override     
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button button = (Button) this.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setAction("cn.itcast.lao.li");
				intent.setDataAndType(Uri.parse("itcast://www.itcast.cn/person"), "image/gif");
				startActivity(intent);
			}
		});
    }
}

android的隐式意图

阅读数 239

Android的隐式意图

阅读数 127

Android 隐式意图

阅读数 16

Android隐式意图

阅读数 261

没有更多推荐了,返回首页