标签:class ons center stack article int out text sso
显式 Intent:Intent("android.intent.action.CALL", Uri.parse("tel:" + string));
须要指明名字启动。用于程序内多 Activity 交互,通经常使用于应用程序内部消息,有名 Action Intent。
隐式 Intent:一般不指明名字,而是採用广播的形式,一般是 Broadcast 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 中的全部种类
Action Intent 仅仅能被一个指定的 Activity 响应,假设须要推送通知这种广播信息。则须要 Broadcast Intent
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 myFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVER"); MyReceiver myReceiver = new MyReceiver(); Context.registerReceiver(myReceiver, myFilter);
<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 有时间限制,超时则觉得程序无响应
@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); }
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(); } }
加入一个空的 LinearLayout 布局就可以
在 <application> 标签里面加入
<receiver android:name="com.sweetlover.activity.Receiver"> <intent-filter> <action android:name="com.china.ui.NEW_LIFEFORM" /> </intent-filter> </receiver>
阅读《Android 从入门到精通》(33)——Intent 分类
标签:class ons center stack article int out text sso
原文地址:http://www.cnblogs.com/clnchanpin/p/7189820.html