阅读《Android 从入门到精通》(33)——Intent 分类

Intent 分类

显式 Intent:Intent("android.intent.action.CALL", Uri.parse("tel:" + string));

须要指明名字启动。用于程序内多 Activity 交互,通经常使用于应用程序内部消息,有名 Action Intent。

隐式 Intent:一般不指明名字,而是採用广播的形式,一般是 Broadcast Intent。

Action Intent:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

动作非常大程度上决定了剩下的 Intent 怎样构建,特别是数据(data)和附加(extras)字段,就像一个方法名决定了參数和返回值。

因此,Intent 对象动作通过 setAction 设置后。详细的 Action 具有详细的数据格式要求。比方:ACTION_EDIT 的数据字段将包括用于编辑文档的 URL;ACTION_CALL 则是 tel:URL。此外,还应了解数据格式类型。比方获取的数据是音频、视频、文字、图像还是其它,这就须要通过 setType 指定 MIME。经常使用的 Category
例如以下:

CATEGORY_BROWSABLE

CATEGORY_GADGET

CATEGORY_HOME

CATEGORY_LAUNCHER

CATEGORY_PREFERENCE

addCategory 用于加入一个种类到 Intent。与此相应的是 removeCategory 用于删除前一个种类。一个Intent 能够有多个 Category,getCategories 用于获取 Intent 中的全部种类

Broadcast Intent

Action Intent 仅仅能被一个指定的 Activity 响应,假设须要推送通知这种广播信息。则须要 Broadcast Intent

Broadcast Intent 处理流程

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

注冊 Broadcast Intent 步骤

继承 BroadcastReceiver,并重写 onReceiver 方法:

package com.sweetlover.camera2basic;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context arg0, Intent arg1) {
		// TODO Auto-generated method stub

	}

}

依据 IntentFilter 注冊 Broadcast Intent

Java 注冊

IntentFilter myFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVER");
MyReceiver myReceiver = new MyReceiver();
Context.registerReceiver(myReceiver, myFilter);

XML 注冊

<receiver android:name=".MyReceiver">
	<intent-filter>
		<action android:name="<receiver android:name=".MyReceiver">
	</intent-filter>
</receiver>

广播

接收

Broadcast Receiver 接收到 Intent 后对其推断,符合条件则响应 onReceiver 方法

public void onReceiver(Context myContext, Intent myIntent) {
	if (myIntent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
		// TODO 电量低时切换到节电模式,关闭 WIFI 和 GPS
	}
}

销毁

每当 Receiver 响应一个 Intent 后就被自己主动销毁,Receiver 有时间限制,超时则觉得程序无响应

详细演示样例

完整程序:http://download.csdn.net/detail/sweetloveft/9468520

1.MainActivity.java

@Override
protected void onStart() {
	// TODO Auto-generated method stub
	super.onStart();

	try {
		Thread.sleep(5000);
	} catch (InterruptedException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	final Intent intent = new Intent(MY_NEW_LIFEFORM);
	sendBroadcast(intent);
}

2.Receiver.java

package com.sweetlover.activity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class Receiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		Toast.makeText(context, "收到广播信息", Toast.LENGTH_SHORT).show();
	}
}

3.activity_main.xml

加入一个空的 LinearLayout 布局就可以

4.AndroidManifest.xml

在 <application> 标签里面加入

        <receiver android:name="com.sweetlover.activity.Receiver">
            <intent-filter>
                <action android:name="com.china.ui.NEW_LIFEFORM" />
            </intent-filter>
        </receiver>
时间: 2024-08-06 01:42:59

阅读《Android 从入门到精通》(33)——Intent 分类的相关文章

Android从入门到精通pdf+书源码

Android从入门到精通的pdf,入门的好书籍,由于csdn文件大小的限制所以分成了两部分. part1地址:http://download.csdn.net/detail/a358763471/7838725 part2地址:http://download.csdn.net/detail/a358763471/7838337 另外本书的源码连接: 源码地址:http://download.csdn.net/detail/a358763471/7725129

Android Volley入门到精通:使用Volley加载网络图片

在上一篇文章中,我们了解了Volley到底是什么,以及它的基本用法.本篇文章中我们即将学习关于Volley更加高级的用法,如何你还没有看过我的上一篇文章的话,建议先去阅读Android Volley完全解析(一),初识Volley的基本用法. 在上篇文章中有提到过,Volley是将AsyncHttpClient和Universal-Image-Loader的优点集成于一身的一个框架.我们都知道,Universal-Image-Loader具备非常强大的加载网络图片的功能,而使用Volley,我们

阅读《Android 从入门到精通》(31)——Intent

意图(Intent) java.lang.Object; android.content.intend; android.content.pm.LabeledIntent; 主要分为 Action Intent 和 Broadcast Intent,Intent 服务于 Android 三大核心组件:Activity.Services.Broadcast Receiver Intent 的处理方式 Intent 启动新的 Activity public void StartMainActivit

阅读《Android 从入门到精通》(14)——时间选择器

时间选择器(TimePicker) java.lang.Object; android.view.View; android.view.ViewGroup; android.widget.FrameLayout; android.widget.TimePicker; TimePicker 类方法 TimePick 示例 完整工程:http://download.csdn.net/detail/sweetloveft/9410965 下述程序主要学习 TimePicker 的用法,不使用 Cale

阅读《Android 从入门到精通》(17)——进度条

进度条(ProgressBar) java.lang.Object; android.view.View; android.widget.ProgressBar; ProgressBar 类方法 ProgressBar 演示样例 完整project:http://download.csdn.net/detail/sweetloveft/9416791 以下我们要学习该类中最经常使用的方法.主要是 setMax 和 setProgress 等方法. 1.MainActivity.java pack

阅读《Android 从入门到精通》(16)——表状时钟

表状时钟(AnalogClock) java.lang.Object; android.view.View; android.widget.AnalogClock; AnalogClock 类方法 AnalogClock 示例 完整工程:http://download.csdn.net/detail/sweetloveft/9416138 这个程序只要贴图就可以了,回想之前的 DigitalClock,后来查证得知,这类工程一般是贴图,非要自绘的话,需要派生类做相关的重写,这里面将会用到 Can

阅读《Android 从入门到精通》(15)——数字时钟

数字时钟(DigitalClock) java.lang.Object; android.view.View; android.widget.TextView; android.widget.DigitalClock; DigitalClock 类方法 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

阅读《Android 从入门到精通》(10)——单项选择

单项选择(RadioGroup) RadioGroup 是 LinearLayout 的子类,继承关系例如以下: android.view.ViewGroup android.widget.LinearLayout android.widget.RadioGroup RadioGroup 类方法 RadioGroup 演示样例 完整project:http://download.csdn.net/detail/sweetloveft/9402088 下述程序中,主要学习 RadioGroup 的

阅读《Android 从入门到精通》(20)——图片视图

图片视图(ImageView) ImageView 类属于 android.Widget 包并且继承于 android.widget.View 类,派生了 ImageButton 和 ZoomButton 等子类,主要用于对图片作相关处理.可以通过 setImageBitmap 方法或 setImageResource(int) 方法设置图片资源,或者通过 android:src 属性指定. ImageView 类方法 ImageView 示例 完整工程:http://download.csdn