【Android 进阶学习】Android- 广播接收器 (Broadcast-Receivers)
| android.intent.action.BOOT_COMPLETED | 在系统完成启动后广播一次。 || android.intent.action.BUG_REPORT | 显示报告 bug 的活动。 || android.intent.action.CALL | 执行呼叫数据指定的某人。 || android.intent.action.CALL_BUTTON | 用户点击"呼叫"按钮打开拨号器或者其他拨号的合适界面。 || android.intent.action.DATE_CHANGED | 日期发生改变。 || android.intent.action.REBOOT | 设备重启。 |
广播自定义意图
如果你想要应用程序中生成并发送自定义意图,你需要在活动类中通过 sendBroadcast()来创建并发送这些意图。如果你使用 sendStickyBroadcast(Intent)方法,则意图是持久的(sticky),这意味者你发出的意图在广播完成后一直保持着。
public void broadcastIntent(View view){Intent intent = new Intent();intent.setAction("cn.uprogrammer.CUSTOM_INTENT");sendBroadcast(intent);}
cn.uprogrammer.CUSTOM_INTENT 的意图可以像之前我们注册系统产生的意图一样被注册。
<applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><receiver android:name="MyReceiver">
<intent-filter><action android:name="cn.uprogrammer.CUSTOM_INTENT"></action></intent-filter>
</receiver></application>
实例
这个实例将解释如何创建广播接收器来拦截自定义意图。一旦你熟悉自定义意图,你可以为应用程序编程来拦截系统产生的意图。让我们按照下面的步骤来修改 Hello World 实例章节中我们创建的 Android 应用程序。
下面是修改的主要活动文件 src/cn.uprogrammer.broadcastreceiver/MainActivity.java 的内容。这个文件包含了每个基础的生命周期方法。我们添加了 broadcastIntent()方法来广播自定义事件。
package cn.uprogrammer.broadcastreceiver;
import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.content.Intent;import android.view.View;
public class MainActivity extends Activity {
@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.menu_main, menu);return true;}
// 广播自定义意图 public void broadcastIntent(View view){Intent intent = new Intent();intent.setAction("cn.programmer.CUSTOM_INTENT");sendBroadcast(intent);}}
下面是 src/cn.uprogrammer.broadcastreceiver/MyReceiver.java 的内容:
package cn.uprogrammer.broadcastreceiver;
import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;
public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "检测到意图。", Toast.LENGTH_LONG).show();}}
接下来修改 AndroidManifest.xml 文件。这里通过添加<receiver.../>标签来包含我们的广播接收器:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="cn.uprogrammer.broadcastreceiver"android:versionCode="1"android:versionName="1.0" >
<uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="22" />
<applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" >
<activityandroid:name=".MainActivity"android:label="@string/title_activity_main" >
<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER"/></intent-filter>
</activity>
<receiver android:name="MyReceiver">
<intent-filter><action android:name="cn.programmer.CUSTOM_INTENT"></action></intent-filter>
</receiver>
</application>
</manifest>
下面是 res/layout/activity_main.xml 文件的内容,包含广播自定义意图的按钮。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="广播实例"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:textSize="30dp" />
<TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="www.uprogrammer.cn"android:textColor="#ff87ff09"android:textSize="30dp"android:layout_above="@+id/imageButton"android:layout_centerHorizontal="true"android:layout_marginBottom="40dp" />
<ImageButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/imageButton"android:src="@drawable/ic_launcher"android:layout_centerVertical="true"android:layout_centerHorizontal="true" />
<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/button2"android:text="广播意图"android:onClick="broadcastIntent"android:layout_below="@+id/imageButto
n"android:layout_centerHorizontal="true" />
</RelativeLayout>
下面是 res/values/strings.xml 文件的内容,定义了两个新的常量。
评论