阅读《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" alt="">
动作非常大程度上决定了剩下的 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" alt="">
注冊 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 有时间限制,超时则觉得程序无响应
详细演示样例
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>
阅读《Android 从入门到精通》(33)——Intent 分类的更多相关文章
- Android从入门到精通pdf+书源代码
不须要积分,免费放送 Android从入门到精通的pdf,入门的好书籍,因为csdn文件大小的限制所以分成了两部分. part1地址:http://download.csdn.net/detail/a ...
- Android Volley入门到精通:使用Volley加载网络图片
在上一篇文章中,我们了解了Volley到底是什么,以及它的基本用法.本篇文章中我们即将学习关于Volley更加高级的用法,如何你还没有看过我的上一篇文章的话,建议先去阅读Android Volley完 ...
- 阅读《Android 从入门到精通》(12)——自己主动完毕文本框
自己主动完毕文本框(AutoCompleteTextView) java.lang.Object; android.view.View; android.view.TextView; android. ...
- 阅读《Android 从入门到精通》(9)——多项选择
多项选择(CheckBox) CheckBox 类是 Button 的子类,层次关系例如以下: android.widget.Button android.widget.CompoundButton ...
- 阅读《Android 从入门到精通》(17)——进度条
进度条(ProgressBar) java.lang.Object; android.view.View; android.widget.ProgressBar; ProgressBar 类方法 Pr ...
- 阅读《Android 从入门到精通》(24)——切换图片
切换图片(ImageSwitcher) java.lang.Object; android.view.View; android.widget.ViewGroup; android.widget.Fr ...
- 阅读《Android 从入门到精通》(15)——数字时钟
数字时钟(DigitalClock) java.lang.Object; android.view.View; android.widget.TextView; android.widget.Digi ...
- 阅读《Android 从入门到精通》(10)——单项选择
单项选择(RadioGroup) RadioGroup 是 LinearLayout 的子类,继承关系例如以下: android.view.ViewGroup android.widget.Linea ...
- 阅读《Android 从入门到精通》(29)——四大布局
LinearLayout 类方法 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQ ...
随机推荐
- 数据库_11_1~10总结回顾+奇怪的NULL
校对集问题: 比较规则:_bin,_cs,_ci利用排序(order by) 另外两种登录方式: 奇怪的NULL: NULL的特殊性:
- [BZOJ3207]:花神的嘲讽(分块解法)
题目传送门 题目描述:背景花神是神,一大癖好就是嘲讽大J,举例如下:“哎你傻不傻的![hqz:大笨J]”“这道题又被J屎过了!!”“J这程序怎么跑这么快!J要逆袭了!”…… 描述这一天DJ在给吾等众蒟 ...
- MySQL数据库常见面试题
什么是存储过程?有哪些优缺点? 存储过程简单来说就是为了以后使用而保存的一条或多条预编译SQL语句,这些语句块像一个方法一样执行一些功能. 优点: 类似于封装,简化操作: 不用反复建立一系列处理步骤, ...
- elementary 5.0 安装 chrome
sudo apt install google-chrome-stable wget -q -O - https://dl.google.com/linux/linux_signing_key.pub ...
- POJ 2631 Roads in the North (求树的直径)
Description Building and maintaining roads among communities in the far North is an expensive busine ...
- POJ 1161 Walls(Floyd , 建图)
题意: 给定n个城市, 然后城市之间会有长城相连, 长城之间会围成M个区域, 有L个vip(每个vip会处于一个城市里)要找一个区域聚会, 问一共最少跨越多少个长城. 分析: 其实这题难就难在建图, ...
- 如何用scanf读入一个string
#include <stdio.h> #include <string> using namespace std; int main() { string a; a.resiz ...
- 机器学习基础-Logistic回归2
随机梯度上升法--一次仅用一个样本点来更新回归系数(因为可以在新样本到来时对分类器进行增量式更新,因而属于在线学习算法) 梯度上升法在每次更新回归系统时都需要遍历整个数据集,该方法在处理100个左右的 ...
- 《Shell脚本学习指南》书籍目录
摘要:Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的.但是它比Windows下的批处理更 ...
- 间谍网络(tarjan缩点)
洛谷传送门 看着这道题给人感觉就是tarjan求SCC,然而还得判断是否能控制全部间谍,这就得先从可以贿赂的点dfs一遍. 如果没有全部被标记了,就输出NO,再从没被标记的点里找最小的标号. 如果全被 ...