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 分类的更多相关文章

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

    不须要积分,免费放送 Android从入门到精通的pdf,入门的好书籍,因为csdn文件大小的限制所以分成了两部分. part1地址:http://download.csdn.net/detail/a ...

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

    在上一篇文章中,我们了解了Volley到底是什么,以及它的基本用法.本篇文章中我们即将学习关于Volley更加高级的用法,如何你还没有看过我的上一篇文章的话,建议先去阅读Android Volley完 ...

  3. 阅读《Android 从入门到精通》(12)——自己主动完毕文本框

    自己主动完毕文本框(AutoCompleteTextView) java.lang.Object; android.view.View; android.view.TextView; android. ...

  4. 阅读《Android 从入门到精通》(9)——多项选择

    多项选择(CheckBox) CheckBox 类是 Button 的子类,层次关系例如以下: android.widget.Button android.widget.CompoundButton ...

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

    进度条(ProgressBar) java.lang.Object; android.view.View; android.widget.ProgressBar; ProgressBar 类方法 Pr ...

  6. 阅读《Android 从入门到精通》(24)——切换图片

    切换图片(ImageSwitcher) java.lang.Object; android.view.View; android.widget.ViewGroup; android.widget.Fr ...

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

    数字时钟(DigitalClock) java.lang.Object; android.view.View; android.widget.TextView; android.widget.Digi ...

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

    单项选择(RadioGroup) RadioGroup 是 LinearLayout 的子类,继承关系例如以下: android.view.ViewGroup android.widget.Linea ...

  9. 阅读《Android 从入门到精通》(29)——四大布局

    LinearLayout 类方法 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQ ...

随机推荐

  1. QT+UI界面初识+界面与编辑区结合操作

    图片中时UI界面的初识,了解界面部件都是干啥的: 有了界面之后,使得QT的开发变的更加的便捷,但是在ui界面有时满足不了的功能,就需要使用代码解决,怎么利用代码呢? 首先:打开程序编辑区: #incl ...

  2. Hash冲突的几种解决方法

    1. 开放定值法: 也叫再散列法,当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突 ...

  3. 使用dockerfile构建nginx镜像

    使用dockerfile构建nginx镜像 docker构建镜像的方法:   commit.dockerfile 1.使用commit来构建镜像: commit是基于原有镜像基础上构建的镜像,使用此方 ...

  4. Ubuntu配置SSH服务器

    SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远 ...

  5. 剑指Offer(书):机器人的运动范围

    题目:地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能够进 ...

  6. 安装完Centos 7后的一些处理

    1.安装dkms:dkms-2.2.0.3-31.1.noarch.rpm 2.安装显卡驱动:amdgpu-pro-18.10-572953 3.启动图形界面使用init 5 不能使用startx

  7. LeetCode(52) N-Queens II

    题目 Follow up for N-Queens problem. Now, instead outputting board configurations, return the total nu ...

  8. ES6(Proxy 和 Reflect)

    Proxy 和 Reflect 1.Proxy 和 Reflect 的概念 Proxy 意为 ‘代理’,连接了用户和真实对象之间的一个层 Reflect 意为‘反射’   反射的是Object 2.适 ...

  9. Sticky footer经典布局--绝对底部布局

    原文转载于:https://cnodejs.org/topic/56ebdf2db705742136388f71 何为Sticky footer布局? 我们常见的网页布局方式一般分为header(页头 ...

  10. linux find的用法

    ①.一般格式: ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; 说明: #-print 将查找到的文 ...