Как остановить или приостановить Pandora и Spotify
У меня есть приложение для запуска приложения, станции Pandora или ярлыка. Это все работает отлично. Позже я хочу остановить приложение, которое я запустил. Это работает для большинства вещей, кроме Pandora и Spotify, которые не всегда закрываются. Иногда они делают, но не всегда. Кажется, это связано с текущим состоянием интерфейса. Например, он отлично работает, когда у меня отображается Pandora или домашний экран. Когда активирован режим Home Dock или Car Mode, он не работает. Вы можете увидеть весь мой исходный код здесь:http://code.google.com/p/a2dpvolume/ service.java - это файл с этой функциональностью.
Вот часть этого кода, которая пытается остановить воспроизведение музыки, а затем остановить приложение.
<code>if (bt2.hasIntent()) { // if music is playing, pause it if (am2.isMusicActive()) { // first pause the music so it removes the notify icon Intent i = new Intent("com.android.music.musicservicecommand"); i.putExtra("command", "pause"); sendBroadcast(i); // for more stubborn players, try this too... Intent downIntent2 = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent downEvent2 = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_STOP); downIntent2.putExtra(Intent.EXTRA_KEY_EVENT, downEvent2); sendOrderedBroadcast(downIntent2, null); } // if we opened a package for this device, try to close it now if (bt2.getPname().length() > 3 && bt2.isAppkill()) { // also open the home screen to make music app revert to // background Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); // now we can kill the app is asked to final String kpackage = bt2.getPname(); CountDownTimer killTimer = new CountDownTimer(6000, 3000) { @Override public void onFinish() { try { stopApp(kpackage); } catch (Exception e) { e.printStackTrace(); Log.e(LOG_TAG, "Error " + e.getMessage()); } } @Override public void onTick(long arg0) { if (am2.isMusicActive()) { // for more stubborn players, try this too... Intent downIntent2 = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent downEvent2 = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_STOP); downIntent2.putExtra(Intent.EXTRA_KEY_EVENT, downEvent2); sendOrderedBroadcast(downIntent2, null); } try { stopApp(kpackage); } catch (Exception e) { e.printStackTrace(); Log.e(LOG_TAG, "Error " + e.getMessage()); } } }; killTimer.start(); } } </code>
Вот функция stopApp ().
<code>protected void stopApp(String packageName) { Intent mIntent = getPackageManager().getLaunchIntentForPackage( packageName); if (mIntent != null) { try { ActivityManager act1 = (ActivityManager) this .getSystemService(ACTIVITY_SERVICE); // act1.restartPackage(packageName); act1.killBackgroundProcesses(packageName); List<ActivityManager.RunningAppProcessInfo> processes; processes = act1.getRunningAppProcesses(); for (ActivityManager.RunningAppProcessInfo info : processes) { for (int i = 0; i < info.pkgList.length; i++) { if (info.pkgList[i].contains(packageName)) { android.os.Process.killProcess(info.pid); } } } } catch (ActivityNotFoundException err) { err.printStackTrace(); Toast t = Toast.makeText(getApplicationContext(), R.string.app_not_found, Toast.LENGTH_SHORT); if (notify) t.show(); } } } </code>
Кто-то еще сталкивался с этой проблемой? Как я могу надежно остановить запущенное приложение? Мне нужно сначала заставить его остановиться и поставить его на задний план. Это проблема, с которой я столкнулся. Это работает для большинства ситуаций, но не для всех. В некоторых случаях Pandora и Spotify не реагируют на отправляемое ключевое событие и просто продолжают играть. Это сохраняет значок уведомления активным и делает приложение активным, поэтому я не могу его остановить.