Android广播接收器:在运行时注册/注销

一篇文章中 ,我们倾向于启用和禁用添加在Android清单文件中的Broadcast接收器。 在这篇文章中,我们将学习以编程方式注册和注销广播接收器。 始终建议以编程方式注册和注销广播接收器,因为这样可以节省系统资源。 在本教程中,我们将制作一个具有两个按钮的应用程序,分别用于注册和注销广播接收器。

范例程式码

让我们定义布局文件并添加两个按钮。 将registerBroadcastReceiver onclick方法与注册按钮关联,并将unregisterBroadcastReceiver onclick方法与注销按钮关联。

<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/register_broadcast_receiver'
    android:onClick='registerBroadcastReceiver'
    tools:context='.RegisterUnregister' />
  <Button
   android:layout_width='fill_parent'
   android:layout_height='wrap_content'
   android:padding='@dimen/padding_medium'
   android:text='@string/unregister_broadcast_receiver'
   android:onClick='unregisterBroadcastReceiver'
   tools:context='.RegisterUnregister' />

</LinearLayout>

在string.xml中定义布局文件中使用的字符串常量。

<resources>
    <string name='app_name'>EnableDisableBroadcastReceiver2</string>
    <string name='menu_settings'>Settings</string>
    <string name='title_activity_enable_disable'>EnableDisable</string>
    <string name='register_broadcast_receiver'>Register Broadcast Receiver</string>
    <string name='unregister_broadcast_receiver'>Unregister Broadcast Receiver</string>
</resources>

现在定义广播接收器。 在onReceive()方法中,我们将显示一个包含当前时间的祝酒消息。 广播特定意图时,将调用onReceive()方法。

package com.code4reference.broadcastreceiver.enabledisable;

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.widget.Toast;

public class UserDefinedBroadcastReceiver extends BroadcastReceiver {

 @Override
 public void onReceive(Context context, Intent intent) {

         //You can do the processing here update the widget/remote views.
         StringBuilder msgStr = new StringBuilder('Current time : ');
         Format formatter = new SimpleDateFormat('hh:mm:ss a');
         msgStr.append(formatter.format(new Date()));
         Toast.makeText(context, msgStr, Toast.LENGTH_SHORT).show();
 }
}

我们将定义称为RegisterUnregister的主要活动类。 在此类中,我们将定义两个onclick方法,registerBroadcastReceiver和unregisterBroadcastReceiver分别与布局文件中的Register和Unregister按钮相连。 registerBroadcastReceiver()方法为TIME_TICK意向操作类型注册UserDefinedBroadcastReceiver。 TIME_TICK意图每分钟触发一次。 广播接收器注册后,您将在每分钟之后看到敬酒消息。

package com.code4reference.broadcastreceiver.enabledisable;

import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class RegisterUnregister extends Activity {

 UserDefinedBroadcastReceiver broadCastReceiver = new UserDefinedBroadcastReceiver();

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_register_unregister);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.activity_enable_disable, menu);
  return true;
 }

 /**
  * This method enables the Broadcast receiver for
  * 'android.intent.action.TIME_TICK' intent. This intent get
  * broadcasted every minute.
  *
  * @param view
  */
 public void registerBroadcastReceiver(View view) {

  this.registerReceiver(broadCastReceiver, new IntentFilter(
    'android.intent.action.TIME_TICK'));
  Toast.makeText(this, 'Registered broadcast receiver', Toast.LENGTH_SHORT)
    .show();
 }

 /**
  * This method disables the Broadcast receiver
  *
  * @param view
  */
 public void unregisterBroadcastReceiver(View view) {

  this.unregisterReceiver(broadCastReceiver);

  Toast.makeText(this, 'unregistered broadcst receiver', Toast.LENGTH_SHORT)
    .show();
 }
}

我们不会修改AndroidManifest文件,因为我们没有在AndroidManifest文件中注册广播接收器。

<manifest xmlns:android='http://schemas.android.com/apk/res/android'
 package='com.code4reference.broadcastreceiver.enabledisable'
 android:versionCode='1'
 android:versionName='1.0' >
   <uses-sdk
    android:minSdkVersion='8'
    android:targetSdkVersion='15' />
  <application
    android:icon='@drawable/ic_launcher'
    android:label='@string/app_name'
    android:theme='@style/AppTheme' >
     <activity
      android:name='.RegisterUnregister'
      android:label='@string/title_activity_enable_disable' >
       <intent-filter>
        <action android:name='android.intent.action.MAIN' />
        <category android:name='android.intent.category.LAUNCHER' />
       </intent-filter>
    </activity>
  </application>
</manifest>

只需完成编码并执行代码,您将看到如下所示的应用程序。

您可以在github / Code4Reference上获得完整的源代码。

参考: 在运行时注册/注销Android广播接收器。 从我们的JCG合作伙伴 Rakesh Cusat在Code4Reference博客上获得。


翻译自: https://www.javacodegeeks.com/2012/09/android-broadcast-receiver.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值