Статьи

Приемник Android-трансляции: регистрация / отмена регистрации во время выполнения

В предыдущем посте мы полагались на включение и отключение приемника Broadcast, добавленного в файл манифеста Android. В этом посте мы научимся регистрировать и отменять регистрацию приемника вещания программным способом. Всегда рекомендуется регистрировать и отменять регистрацию приемника вещания программно, так как это экономит системные ресурсы. В этом уроке мы создадим приложение, имеющее две кнопки для регистрации и отмены регистрации приемника вещания соответственно.

Пример кода

Давайте определим файл макета и добавим две кнопки. Свяжите метод onBlick registerBroadcastReceiver с кнопкой регистрации, а метод onclick unregisterBroadcastReceiver с кнопкой отмены регистрации.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<LinearLayout xmlns:android='http://schemas.android.com/apk/res/android'
  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.

1
2
3
4
5
6
7
<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 () вызывается, когда передается конкретное намерение.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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 () регистрирует UserDefinedBroadcastReceiver для типа действия намерения TIME_TICK. Намерение TIME_TICK срабатывает каждую минуту. Как только получатель трансляции будет зарегистрирован, вы будете замечать тостовое сообщение через каждую минуту.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
 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 Ракеша Кусата в блоге Code4Reference .