别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述阅读《Android 从入门到精通》(33)——Intent 分类相关的知识,希望能为你提供帮助。
Intent 分类显式 Intent:Intent("
android.intent.action.CALL"
, Uri.parse("
tel:"
+
string));
须要指明名字启动。用于程序内多 Activity 交互,通经常使用于应用程序内部消息,有名 Action Intent。
隐式 Intent:一般不指明名字,而是採用广播的形式,一般是 Broadcast Intent。
Action Intent:
【阅读《Android 从入门到精通》(33)——Intent 分类】动作非常大程度上决定了剩下的 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 IntentAction Intent 仅仅能被一个指定的 Activity 响应,假设须要推送通知这种广播信息。则须要 Broadcast Intent
Broadcast Intent 处理流程
注冊 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>
推荐阅读
- SimpliciTI APP
- android 三种定位方式
- 像音乐播放App一样移动背景
- 我的Android Studio 优化之路
- create-react-app之Invalid Host Header
- 使用Android的硬件缩放技术优化执行效率
- android-调用系统的ContentPrivder获取单张图片实现剪切做头像及源代码下载
- android动画具体解释六 XML中定义动画
- Android学习——控件ListView的使用