范例程式码
让我们定义布局文件并添加两个按钮。 将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