2016-01-13 5 views
0

У меня есть служба, которая обрабатывает соединение трубки и останавливает медиаплеер, если он отключенручка гарнитура отключается после того, как приложение будет прокатывается из списка последних приложений

здесь код

private static int headsetSwitch = 1; 
    public static boolean headsetconnected = false; 

public BroadcastReceiver headsetReciever = new BroadcastReceiver() { 


     public void onReceive(Context context, Intent intent) { 

      if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent 
        .getAction())) { 
       // Pause the playback 
       mediaPlayer.pause(); 
      } 

      if (intent.hasExtra("state")) { 


       if (headsetconnected && intent.getIntExtra("state", 0) == 0) { 
        headsetconnected = false; 
        Toast.makeText(getApplicationContext(), 
          "headsetconnected = false", Toast.LENGTH_SHORT) 
          .show(); 
        headsetSwitch = 0; 
       } 

       else if (!headsetconnected 
         && intent.getIntExtra("state", 0) == 1) { 
        headsetconnected = true; 
        Toast.makeText(getApplicationContext(), 
          "headsetconnected = true", Toast.LENGTH_SHORT) 
          .show(); 
        headsetSwitch = 1; 
        // Lockscreencontrol(); 
       } 

      } 

      switch (headsetSwitch) { 
      case (0): 
       headsetDisconnected(); 
       break; 
      case (1): 
       break; 
      } 
     } 

    }; 

    private void headsetDisconnected() { 
     try { 

      if (mediaPlayer != null && mediaPlayer.isPlaying()) { 
       mediaPlayer.pause(); 
       if (PlayerActivity.play != null) { 
        PlayerActivity.play 
          .setImageResource(R.drawable.ic_play_arrow_white_36dp); 
       } 
       if (MainActivity.play != null) { 
        MainActivity.play 
          .setImageResource(R.drawable.ic_play_arrow_white_24dp); 
       } 
       if (getallsongs.play != null) { 
        getallsongs.play 
          .setImageResource(R.drawable.ic_play_arrow_white_24dp); 
       } 

      } 


     } catch (Exception e) { 


     } 

    } 

Этот код работает отлично, если приложение минимизировано и служба работает

проблема возникает, если мы красть приложение от списка последних приложений

в настоящее время ссылаюсь на эту https://stackoverflow.com/a/18618060/3126760

ответ говорит Don't ever swipe apps, но это не общее поведение пользователей

приложение будет просто крах и попытаться перезапустить службу и снова врезаться

Мой вопрос

Как мы можем управлять этим конкретным событием жизненного цикла, которое не обрабатывается

ondestroy по адресу onpause

как мы можем управлять приложением, попавшие службы работает в фоновом режиме и приложение было прокатывается из списка последних приложений

Я видел приложения, которые спокойно закрыть приложение один раз вышеприведенного случая происходит

Как мы можем просто остановить приложение без его разбивания.

Я даже пытался управлять unregister listeners когда приложение прокатывается с использованием

<service 
      android:name="com.musicplayer.mp3player.PlayService" 
      android:enabled="true" 
      android:stopWithTask="false" 
      android:label="Audio-playback service" > 
      <intent-filter> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
    </service> 

, а затем

общественного недействительный onTaskRemoved (Intent rootIntent) {

// unregister listeners 
    // do any other cleanup if required 
    try { 




     unregisterReceiver(headsetReciever); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 


    // stop service stopSelf(); 
} 

делает вызов stopForeground(true); в ondestroy вызывают такую ​​проблему.

предоставьте пояснения для ответа, который вы можете предоставить, спасибо.

+0

Можете ли вы опубликовать StackTrace о том, что вы называете _ Приложение просто потерпит крах и попытается перезапустить службу, а затем снова свернуть _ –

ответ

0

Ну после того, как много поисков пришли к такому выводу

Служба в onstartcommand имела START_STICKY поэтому всякий раз, когда служба была остановлена ​​она будет перезапустить, если stopService() or stopSelf() не называло

моей службы требуют некоторых getintentextras, которые не были найдены когда служба была возобновлена ​​

поэтому сделал чек как

if (intent == null) { 
      stopSelf(); 
      return START_NOT_STICKY; 
     } 

START_NOT_STICKY не запустите услугу снова и, следовательно, не произойдет ошибка

Это неправильный способ, но это проблема с самим андроидом.

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

  • Нет связанных вопросов^_^