Как остановить или приостановить Pandora и Spotify

У меня есть приложение, в котором есть функция для запуска приложения, станции Pandora или ярлыка. Все работает нормально. Позже я хочу остановить запущенное мной приложение. Это работает для большинства вещей, за исключением того, что Pandora и Spotify не всегда закрываются. Иногда да, но не всегда. Похоже, это связано с текущим состоянием пользовательского интерфейса. Например, он отлично работает, когда у меня отображается Пандора или отображается домашний экран. Когда активна домашняя док-станция или автомобильный режим, она не работает. Вы можете увидеть весь мой исходный код здесь: http://code.google.com/p/a2dpvolume/service.java — это файл с этой функцией.

Вот часть этого кода который пытается остановить воспроизведение музыки, а затем остановить приложение.

  if (bt2.hasIntent ()) {//если музыка играет, приостановить ее if (am2.  isMusicActive ()) {//сначала приостанавливаем воспроизведение музыки, чтобы удалить значок уведомления Intent i = new Intent ("com.android.music.musicservicecommand");  i.putExtra («команда», «пауза»);  sendBroadcast (i); //для более упорных игроков попробуйте это тоже ... Intent downIntent2 = new Intent (Intent.ACTION_MEDIA_BUTTON, null);  KeyEvent downEvent2 = новое событие KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_STOP);  downIntent2.putExtra (Intent.EXTRA_KEY_EVENT, downEvent2);  sendOrderedBroadcast (downIntent2, ноль);  }//если мы открыли пакет для этого устройства, попробуйте закрыть его сейчас if (bt2.getPname (). length ()> 3 && bt2.isAppkill ()) {//также откройте главный экран, чтобы вернуть музыкальное приложение  в//фоновое намерение startMain = новое намерение (Intent.ACTION_MAIN);  startMain.addCategory (Intent.CATEGORY_HOME);  startMain.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);  startActivity (startMain); //теперь мы можем убить приложение запрашивается final String kpackage = bt2.getPname ();  CountDownTimer killTimer = new CountDownTimer (6000, 3000) {@Override public void onFinish () {попробуйте {stopApp (kpackage);  } catch (исключение e) {e.printStackTrace ();  Log.e (LOG_TAG, «Ошибка» + e.getMessage ());  }} @Override public void onTick (long arg0) {if (am2.isMusicActive ()) {//для более упорных игроков попробуйте это тоже ... Intent downIntent2 = new Intent (Intent.ACTION_MEDIA_BUTTON, null);  KeyEvent downEvent2 = новое событие KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_STOP);  downIntent2.putExtra (Intent.EXTRA_KEY_EVENT, downEvent2);  sendOrderedBroadcast (downIntent2, ноль);  } попробуйте {stopApp (kpackage);  } catch (исключение e) {e.printStackTrace ();  Log.e (LOG_TAG, «Ошибка» + e.getMessage ());  }}};  killTimer.start ();  }}  

Вот функция stopApp ().

  protected void stopApp (String packageName) {Intent mIntent = getPackageManager (  ) .getLaunchIntentForPackage (имя_пакета);  if (mIntent! = null) {попробуйте {ActivityManager act1 = (ActivityManager) этот .getSystemService (ACTIVITY_SERVICE); //act1.restartPackage (packageName);  act1.killBackgroundProcesses (имя_пакета);  Список процессов ;  процессы = act1.getRunningAppProcesses ();  для (ActivityManager. RunningAppProcessInfo информация: процессы) {for (int i = 0; i  

Кто-нибудь еще сталкивался с этой проблемой? Как надежно остановить запущенное приложение? Мне нужно сначала поставить его на паузу и поместить в фоновый режим. Это проблема, с которой я столкнулся. Это работает в большинстве ситуаций, но не во всех. В некоторых случаях Pandora и Spotify не реагируют на отправляемое ключевое событие и просто продолжают играть. Это сохраняет значок уведомления активным и делает приложение активным, поэтому я не могу его остановить.


Я наконец понял, что Pandora приостанавливает воспроизведение музыки, когда видит, что гарнитура отключена. Итак, мне просто нужно было отправить это намерение отключиться, чтобы Пандора сделала паузу. После приостановки его можно было перевести в фоновый режим и убить.

 //Попробуйте сообщить системе, что гарнитура только что отключилась, чтобы остановить других игроков. Intent j = new Intent ("android  .intent.action.HEADSET_PLUG ");  j.putExtra ("состояние", 0);  sendBroadcast (j);  

Для всех, кто пытается это сделать; Намерение android.intent.action.HEADSET_PLUG больше не может транслироваться, если вы не работаете как система.


Поскольку намерение «HEADSET_PLUG» теперь поддерживается только в том случае, если оно вызывается системой, я обнаружил, что конкретные намерения приложения являются оптимальным вариантом:

  Intent pauseSpotify = новое намерение ("com.spotify.mobile.android.ui.widget.PLAY");  pauseSpotify.setPackage ("com.spotify.music");  sendBroadcast (pauseSpotify);  

По сути, он вызывает «PLAY» из приложения spotify.

Я получил эту идею от статья и применила ее к обычному Android.

Оцените статью
motary.ru
Добавить комментарий