2016-11-10 4 views
0

Я запускаю услугу из кнопки активности, которая запускает класс обслуживания и запускает Broadcastreceiver, и он запускается в фоновом режиме, но я хочу отменить регистрацию с помощью нажатия кнопки с того же класса activity.it, похоже, не работает. добавлен класс приемников к манифесту. Вот мой код.Как отменить регистрацию из-за активности

кнопка активность нажмите для registerreceiver

save.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent svc = new Intent(this, DemoService.class); 
     startService(svc); 
    }); 

DemoService.class

public class DemoService extends Service { 
    static final String LOGGING_TAG = "MyDemo"; 
    private static Alarm1 tickReceiver =new Alarm1(); 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onStart(Intent intent, int startId){ 
     super.onStart(intent, startId); 
     Log.v(LOGGING_TAG, "DemoService.onStart()"); 
    } 

    @Override 
    public void onCreate(){ 
     super.onCreate(); 
     Log.d(LOGGING_TAG, "DemoService.onCreate()"); 

     registerReceiver(
      new Alarm1(), 
      new IntentFilter(Intent.ACTION_TIME_TICK)); 
    } 
} 

кнопка активность нажмите для unregisterReceiver

unreg.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      DemoService demo=new DemoService(); 
      demo.unreg(); 
    }); 

И класс приемника

public class Alarm1 extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Log.d("tag","working"); 
    } 

Как я могу отменить регистрацию с помощью кнопки отмены. Если я нажму кнопку Unreg, то покажите мне ошибку java.lang.IllegalArgumentException: Получатель не зарегистрирован:

+0

если это локально целью вы должен использовать LocalBroadcastReceiver. Вы видели это: http://stackoverflow.com/questions/8241128/dynamically-register-unregister-a-broadcast-receiver-in-android Это может помочь вам –

+0

мое приложение будет работать в background.so я не могу использовать метод onpause для отмены регистрации. @ KrzysztofTurek – shakac

+0

Можете ли вы показать мне свой метод unreg() в DemoService? Я вижу, что у вас есть ссылка tickerReceiver, но в методе onCreate вы создаете новый 'registerReceiver ( новый Alarm1(), новый IntentFilter (Intent.ACTION_TIME_TICK)); –

ответ

0

Для этого вам необходимо использовать Bound Services. Проверить ссылку для внедрения и использования

0

Если вы хотите правильно зарегистрировать и отменить регистрацию BroadcastReceiver. BroadcastReceiver, переданный в registerReceiver(), и unregisterReceiver() должен быть одним и тем же экземпляром, так что экземпляр контекста будет вызван. Поскольку в инструменте используется Контекст и BroadcastReceiver экземпляров для однозначной привязки к операции «Регистрация».

1

создать метод для регистратор-регистратор в классе обслуживания. И позвоните в службу с такими действиями.

Intent svc = new Intent(this, DemoService.class); 
svc.setAction("com.package.UN_REGISTER"); 
startService(svc); 

и в Service классе обрабатывать их в onStartCommand()

как

if(intent.getAction().equals("com.package.UN_REGISTER") 
    //call your unregister method 

Добавить действие в манифесте в категории обслуживания

<IntentFilter> 
    <action name = "com.package.UN_REGISTER"> 
</IntentFilter> 
+0

привет, если я пытаюсь зарегистрироваться при нажатии кнопки с кодом, он дает мне исключение нулевого указателя, мой отредактированный код @Override public int onStartCommand (Intent intent, int flags, int startId) { f (intent.getAction(). Equals ("com.package.UN_REGISTER")) { unreg(); } return super.onStartCommand (намерение, флаги, startId); } public void unreg() { unregisterReceiver (новый Alarm1()); } – shakac

+0

См. Редактирование. Добавить действие для манифеста – Nepster

+0

теперь это дает мне исключение из-за нелегальной игры java.lang.RuntimeException: Не удается запустить службу [email protected] с Intent {act = com.package.UN_REGISTER cmp = com.kotha.bola. ghori/.DemoService}: java.lang.IllegalArgumentException: Получатель не зарегистрирован: [email protected] Nepster – shakac

Смежные вопросы