写点什么

【Android 进阶学习】Android- 广播接收器 (Broadcast-Receivers)

用户头像
Android架构
关注
发布于: 2021 年 11 月 07 日

| 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


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


n"android:layout_centerHorizontal="true" />


</RelativeLayout>


下面是 res/values/strings.xml 文件的内容,定义了两个新的常量。

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
【Android进阶学习】Android-广播接收器(Broadcast-Receivers)