广播接收器是Android应用程序的基本组成部分之一。
在Android应用程序中添加广播接收器有两种不同的方法。
可以以编程方式或在Android Manifest文件中添加它。
添加广播接收器时应小心,因为不必要的广播接收器会消耗电池电量。
如果将广播接收器添加到Android清单文件中,则意味着您将在广播接收器中处理特定的意图,而不是忽略它。
有一种方法可以启用和禁用清单文件中添加的广播接收器。
范例程式码
应用程序布局文件。
<LinearLayout 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:orientation='vertical'>
<Button
android:layout_width='fill_parent'
android:layout_height='wrap_content'
android:padding='@dimen/padding_medium'
android:text='@string/start_repeating_alarm'
android:onClick='startRepeatingAlarm'
tools:context='.EnableDisableBroadcastReceiver' />
<Button
android:layout_width='fill_parent'
android:layout_height='wrap_content'
android:padding='@dimen/padding_medium'
android:text='@string/cancel_alarm'
android:onClick='cancelAlarm'
tools:context='.EnableDisableBroadcastReceiver' />
<Button
android:layout_width='fill_parent'
android:layout_height='wrap_content'
android:padding='@dimen/padding_medium'
android:text='@string/enable_broadcast_receiver'
android:onClick='enableBroadcastReceiver'
tools:context='.EnableDisableBroadcastReceiver' />
<Button
android:layout_width='fill_parent'
android:layout_height='wrap_content'
android:padding='@dimen/padding_medium'
android:text='@string/disable_broadcast_receiver'
android:onClick='disableBroadcastReceiver'
tools:context='.EnableDisableBroadcastReceiver' />
</LinearLayout>
在上面的布局文件中,我们在按钮的文本字段中使用了一些字符串常量。 让我们在string.xml中定义这些字符串常量,如下所示。
<resources>
<string name='app_name'>EnableDisableBroadcastReceiver</string>
<string name='enable_broadcast_receiver'>Enable Broadcast Receiver</string>
<string name='disable_broadcast_receiver'>Disable Broadcast Receiver</string>
<string name='start_repeating_alarm'>Start Repeating Alarm</string>
<string name='cancel_alarm'>Cancel Alarm</string>
<string name='menu_settings'>Settings</string>
<string name='title_activity_enable_disable_boradcast_receiver'>EnableDisableBoradcastReceiver</string>
</resources>
广播接收器
我们将使用AlarmManager设置重复警报,该警报最终将在特定时间间隔发送意图。 阅读这篇文章以了解有关AlarmManager的更多信息。现在创建AlarmManagerBroadcastReceiver类以扩展BroadcastReceiver类。 该类的内容如下。
package com.code4reference.enabledisablebroadcastreceiver;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.widget.Toast;
public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {
final public static String ONE_TIME = 'onetime';
@Override
public void onReceive(Context context, Intent intent) {
//You can do the processing here update the widget/remote views.
StringBuilder msgStr = new StringBuilder();
//Format time.
Format formatter = new SimpleDateFormat('hh:mm:ss a');
msgStr.append(formatter.format(new Date()));
Toast.makeText(context, msgStr, Toast.LENGTH_SHORT).show();
}
}
启用/禁用广播接收器
现在,我们将定义主要活动,该活动使用alarmManager设置重复警报。 重复警报将每3秒广播一次意图。 此警报已在下面的setRepeatingAlarm()方法中设置。
package com.code4reference.enabledisablebroadcastreceiver;
import com.example.enabledisablebroadcastreceiver.R;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class EnableDisableBroadcastReceiver extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* This method gets called when 'Start Repeating Alarm' button is pressed.
* It sets the repeating alarm whose periodicity is 3 seconds.
* @param view
*/
public void startRepeatingAlarm(View view)
{
AlarmManager am=(AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmManagerBroadcastReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);
//After after 2 seconds
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 4 , pi);
Toast.makeText(this, 'Started Repeating Alarm', Toast.LENGTH_SHORT).show();
}
/**
* This method gets called when 'cancel Alarm' button is pressed.
* This method cancels the previously set repeating alarm.
* @param view
*/
public void cancelAlarm(View view)
{
Intent intent = new Intent(this, AlarmManagerBroadcastReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
Toast.makeText(this, 'Cancelled alarm', Toast.LENGTH_SHORT).show();
}
/**
* This method enables the Broadcast receiver registered in the AndroidManifest file.
* @param view
*/
public void enableBroadcastReceiver(View view){
ComponentName receiver = new ComponentName(this, AlarmManagerBroadcastReceiver.class);
PackageManager pm = this.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Toast.makeText(this, 'Enabled broadcast receiver', Toast.LENGTH_SHORT).show();
}
/**
* This method disables the Broadcast receiver registered in the AndroidManifest file.
* @param view
*/
public void disableBroadcastReceiver(View view){
ComponentName receiver = new ComponentName(this, AlarmManagerBroadcastReceiver.class);
PackageManager pm = this.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Toast.makeText(this, 'Disabled broadcst receiver', Toast.LENGTH_SHORT).show();
}
}
我们在清单文件中添加AlarmManagerBroadcastReceiver。 这将注册广播接收器。
<manifest xmlns:android='http://schemas.android.com/apk/res/android'
package='com.example.enabledisablebroadcastreceiver'
android:versionCode='1'
android:versionName='1.0' >
<uses-sdk
android:minSdkVersion='15'
android:targetSdkVersion='15' />
<application
android:icon='@drawable/ic_launcher'
android:label='@string/app_name'
android:theme='@style/AppTheme' >
<activity
android:name='com.code4reference.enabledisablebroadcastreceiver.EnableDisableBroadcastReceiver'
android:label='@string/title_activity_enable_disable_boradcast_receiver' >
<intent-filter>
<action android:name='android.intent.action.MAIN' />
<category android:name='android.intent.category.LAUNCHER' />
</intent-filter>
</activity>
<!-- Broadcast receiver -->
<receiver android:name='com.code4reference.enabledisablebroadcastreceiver.AlarmManagerBroadcastReceiver' />
</application>
</manifest>
完成后,执行代码,您将注意到如下所示的应用程序。
您可以在github / Code4Reference上获得完整的源代码。 您可以在此处找到更多Android教程。
参考: 在运行时 ,通过Code4Reference博客上的JCG合作伙伴 Rakesh Cusat 启用和禁用广播接收器 。
翻译自: https://www.javacodegeeks.com/2012/08/android-broadcast-receiver-enable-and.html