上杭网站定制,个人网站备案 内容,质监站网址,移动端网站开发流程Broadcast Receivers 仅响应来自其他应用程序或系统本身的广播消息#xff0c;这些消息有时称为events或intents。例如#xff0c;应用程序还可以启动广播#xff0c;以使其他应用程序知道某些数据已下载到设备并可供他们使用#xff0c;因此广播接收器将拦截此通信并启动适… Broadcast Receivers 仅响应来自其他应用程序或系统本身的广播消息这些消息有时称为events或intents。例如应用程序还可以启动广播以使其他应用程序知道某些数据已下载到设备并可供他们使用因此广播接收器将拦截此通信并启动适当的操作。 要使BroadcastReceiver用于系统的广播意图(intents)需要执行以下两个重要步骤-
创建 Broadcast Receiver.注册 Broadcast Receiver.
如果要实现您的自定义意图(intents)还有另外一个步骤那么您将必须创建并广播这些意图。
创建广播接收器
broadcast receiver 实现为 BroadcastReceiver 类的子类并覆盖onReceive()方法在该方法中每个消息均作为 Intent 对象参数接收。
public class MyReceiver extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, Intent Detected., Toast.LENGTH_LONG).show();}
}
注册广播接收器
应用程序通过在AndroidManifest.xml文件中注册广播接收器来侦听特定的广播意图。考虑一下无涯教程将为系统生成的事件ACTION_BOOT_COMPLETED注册MyReceiver一旦Android系统完成启动过程系统就会触发该事件。 applicationandroid:icondrawable/ic_launcherandroid:labelstring/app_nameandroid:themestyle/AppTheme receiver android:nameMyReceiverintent-filteraction android:nameandroid.intent.action.BOOT_COMPLETED/action/intent-filter/receiver
/application
现在无论何时启动Android设备BroadcastReceiver MyReceiver 都会拦截它并且 onReceive()中的已实现逻辑将被执行。
下表列出了一些重要的系统事件。
Sr.NoEvent Constant 描述1 android.intent.action.BATTERY_CHANGED 即时广播包含充电状态电量和有关电池的其他信息。 2 android.intent.action.BATTERY_LOW 表示设备的电池电量不足。 3 android.intent.action.BATTERY_OKAY 指示电池电量低后现在可以了。 4 android.intent.action.BOOT_COMPLETED 系统完成引导后将广播一次。 5 android.intent.action.BUG_REPORT 显示报告错误的Activity。 6 android.intent.action.CALL 对数据指定的某人执行呼叫。 7 android.intent.action.CALL_BUTTON 用户按下呼叫按钮以转到拨号器或其他适当的UI来发出呼叫。 8 android.intent.action.DATE_CHANGED 日期已更改。 9 android.intent.action.REBOOT 重新启动设备。
自定义广播
如果您希望应用程序本身应生成并发送自定义意图则必须使用Activity类内的 sendBroadcast()方法来创建并发送这些意图如果您使用 sendStickyBroadcast(Intent)方法这意味着您要发送的 Intent 会在广播完成后停留。
public void broadcastIntent(View view) {Intent intent new Intent();intent.setAction(com.learnfk.CUSTOM_INTENT);sendBroadcast(intent);
}
该意图 com.learnfk.CUSTOM_INTENT 也可以通过与无涯教程重新注册系统生成的意图相同的方式进行注册。
applicationandroid:icondrawable/ic_launcherandroid:labelstring/app_nameandroid:themestyle/AppTheme receiver android:nameMyReceiverintent-filteraction android:namecom.learnfk.CUSTOM_INTENT/action/intent-filter/receiver
/application
本示例将向您说明如何创建BroadcastReceiver来拦截自定义意图熟悉自定义意图后即可对应用程序进行编程以拦截系统生成的意图。
以下是修改后的主要Activity文件 MainActivity.java 的内容该文件可以包括每个基本生命周期方法。添加了 broadcastIntent()方法来广播自定义意图。
package com.example.learnfk7.myapplication;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;public class MainActivity extends Activity {/** 在第一次创建Activity时调用。 */Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}//广播自定义意图。public void broadcastIntent(View view){Intent intent new Intent();intent.setAction(com.learnfk.CUSTOM_INTENT); sendBroadcast(intent);}
}
以下是 MyReceiver.java 的内容:
package com.example.learnfk7.myapplication;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;/*** Created by LearnFk7 on 8/23/2021.*/
public class MyReceiver extends BroadcastReceiver{Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, Intent Detected., Toast.LENGTH_LONG).show();}
}
以下将修改AndroidManifest.xml文件的内容。在这里无涯教程添加了receiver ... /标签以包括无涯教程的服务:
?xml version1.0 encodingutf-8?
manifest xmlns:androidhttp://schemas.android.com/apk/res/androidpackagecom.example.learnfk7.myapplicationapplicationandroid:allowBackuptrueandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:supportsRtltrueandroid:themestyle/AppThemeactivity android:name.MainActivityintent-filteraction android:nameandroid.intent.action.MAIN /category android:nameandroid.intent.category.LAUNCHER //intent-filter/activityreceiver android:nameMyReceiverintent-filteraction android:namecom.learnfk.CUSTOM_INTENT/action/intent-filter/receiver/application/manifest
以下是 res/layout/activity_main.xml 文件的内容其中包括一个用于广播无涯教程的自定义意图的按钮-
RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/tools android:layout_widthmatch_parentandroid:layout_heightmatch_parent android:paddingLeftdimen/activity_horizontal_marginandroid:paddingRightdimen/activity_horizontal_marginandroid:paddingTopdimen/activity_vertical_marginandroid:paddingBottomdimen/activity_vertical_margin tools:context.MainActivityTextViewandroid:idid/textView1android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textExample of Broadcastandroid:layout_alignParentToptrueandroid:layout_centerHorizontaltrueandroid:textSize30dp /TextViewandroid:idid/textView2android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textLearnfk point android:textColor#ff87ff09android:textSize30dpandroid:layout_aboveid/imageButtonandroid:layout_centerHorizontaltrueandroid:layout_marginBottom40dp /ImageButtonandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:idid/imageButtonandroid:srcdrawable/abcandroid:layout_centerVerticaltrueandroid:layout_centerHorizontaltrue /Buttonandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:idid/button2android:textBroadcast Intentandroid:onClickbroadcastIntentandroid:layout_belowid/imageButtonandroid:layout_centerHorizontaltrue //RelativeLayout
让无涯教程尝试运行刚刚修改的修改后的 Hello World!应用程序。无涯教程假设您在进行环境设置时创建了 AVD 。要从Android Studio运行该应用程序请打开您项目的Activity文件之一然后单击运行工具栏。 Android Studio将应用程序安装在您的AVD上并启动它如果设置和应用程序一切正常它将显示在Emulator窗口下面- 现在要广播无涯教程的自定义意图让无涯教程单击 Broadcast Intent 按钮这将广播无涯教程的自定义意图 com.learnfk.CUSTOM_INTENT 这将被无涯教程注册的BroadcastReceiver截获即MyReceiver以及按照无涯教程实现的逻辑出现在模拟器的底部如下所示: 您可以尝试实现其他BroadcastReceiver来拦截系统生成的意图如系统启动日期更改电池电量低等。 Android - Broadcast Receivers - 无涯教程网无涯教程网提供Broadcast Receivers 仅响应来自其他应用程序或系统本身的广播消息这些消息有时称为...https://www.learnfk.com/android/android-broadcast-receivers.html