您的位置:首页 > 移动开发 > Android开发

【Android基础】(5)应用核心之Intent

2014-12-16 10:41 387 查看

文章地址:/article/1876456.html



一 Intent对象介绍

1. Component name

我们可以根据一个Component name来启动一个Activity:
Intent intent = new Intent();
		intent.setComponent(new ComponentName("com.thr.testandroid",
				"com.thr.testandroid.OtherActivity"));
		startActivity(intent);

ComponentName构造方法第一个参数传应用的包名,第二个参数传要启动的Activity的完整类名。这种方式是显示Intent。

2. Action

我们还可以根据Action来启动Activity,首先需要在Manifest中将要新启动的Activity节点内增加intent-filter节点:
<activity android:name="com.thr.testandroid.OtherActivity" >
            <intent-filter>
                <action android:name="com.thr.intents.intent.action.OtherActivity" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
之后我们就可以用另一种方式启动Activity:
Intent intent = new Intent(
				"com.thr.intents.intent.action.OtherActivity");
		startActivity(intent);

这种方式是隐式Intent。

3. Category

用来给Intent进行分类

4. Extras

封装数据用

5. Flags

用来指定启动时的启动模式



二 IntentFilter概念

1. 图片查看

通过上面的例子,应该能稍微了解到IntentFilter的意思,它可以通过过滤器,隐式的启动Activity,这样子就可能会匹配的Activity不止一个。
接下来我们继续用一个隐式Intent启动一个图片浏览器:
假设我们在SD卡根目录放了一个pic.jpg的图片文件,然后使用如下:
File file = new File("/mnt/sdcard/pic.jpg");
		Intent intent = new Intent(Intent.ACTION_VIEW);
		intent.setDataAndType(Uri.fromFile(file), "image/*");
		startActivity(intent);
就会发现调用了Android系统的图片浏览器打开了我们刚才放的图片。
如果我们新建一个ImageActivity,在Manifest中作如下配置:
<activity android:name="com.thr.testandroid.ImageActivity" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:mimeType="image/*"
                    android:scheme="file" />
            </intent-filter>
        </activity>
此处的action是使用系统的action
android.intent.action.VIEW

ImageActivity如下:
package com.thr.testandroid;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;

public class ImageActivity extends Activity {

	private ImageView iv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		iv = new ImageView(this);
		setContentView(iv);
		iv.setImageURI(getIntent().getData());
	}

}
此时再次执行上面的startActivity方法就会发现,多了一个选择一个是系统给的图片浏览器,另一个可以选择我们刚才自己写的那个intent打开。这也就是如何自己写一个图片浏览器的思路。

2. 电话拨号

那么如何使用Intent来拨打电话呢?还是用到了IntentFilter:
Intent intent = new Intent(Intent.ACTION_VIEW);
		intent.setData(Uri.parse("tel:10010"));
		startActivity(intent);

3. 打开网页

使用IntentFilter打开网页:

Intent intent = new Intent(Intent.ACTION_VIEW,
				Uri.parse("http://www.baidu.com"));
		startActivity(intent);
调用就会直接调用浏览器打开百度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: