如何停止或暂停 Pandora 和 Spotify

2024-03-11

我有一个应用程序,具有启动应用程序、Pandora 站或快捷方式的功能。一切都很好。后来我想停止我启动的应用程序。这适用于大多数事情,但 Pandora 和 Spotify 并不总是关闭。有时他们会这样做,但并非总是如此。这似乎与当前的 UI 状态有关。例如,当我显示潘多拉或显示主屏幕时,它工作正常。当 Home Dock 或汽车模式处于活动状态时,它不起作用。你可以在这里看到我所有的源代码:http://code.google.com/p/a2dpvolume/ http://code.google.com/p/a2dpvolume/service.java 是具有此功能的文件。

这是该代码的一部分,尝试停止播放音乐,然后停止应用程序。

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();

        }
    }

这是函数 stopApp()。

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();
        }

    }
}

还有其他人遇到过这个问题吗?如何可靠地停止已启动的应用程序?我需要首先让它暂停并将其置于后台。这就是我遇到的问题。它适用于大多数情况,但并非全部。在某些情况下,Pandora 和 Spotify 不会响应发送的关键事件,而是继续播放。这使通知图标保持活动状态并使应用程序成为前台活动,因此我无法停止它。


我终于发现潘多拉在看到耳机断开连接时确实会暂停音乐。所以,我只需发送断开连接意图,这样潘多拉就会暂停。一旦暂停,它就可以被推到后台并被杀死。

//Try telling the system the headset just disconnected to stop other players
            Intent j = new Intent("android.intent.action.HEADSET_PLUG");
            j.putExtra("state", 0);
            sendBroadcast(j);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何停止或暂停 Pandora 和 Spotify 的相关文章

  • SpinnerAdapter 中 getView 和 getDropDownView 的区别

    当你实现 SpinnerAdapter 时 你会得到获取下拉视图 http developer android com reference android widget SpinnerAdapter html getDropDownView
  • 图像识别后如何在vuforia sdk ImageTarget中显示布局而不是茶壶模型

    如果图像在 qualcomm vuforia sdk 中被识别 我们如何在布局中显示简单的文本 即 Hello 我正在使用 ImageTarget 的 qualcomm vuforia sdk 示例 现在它在识别图像后显示一个茶壶 我是增强
  • 在 Android 中通过蓝牙接收音频

    我想创建一个能够接收音频流的 Android 应用程序 我想过使用 A2DP 配置文件 但似乎 Android 不支持 A2DP 接收器 看起来有很多人正在寻找这个问题的解决方案 但是接收普通的比特流 然后在应用程序中将数据转换为音频呢 我
  • 停止在列表视图中滚动

    我的活动中有一个列表视图和一个图像按钮 当我单击图像按钮时 我想转到列表中的特定位置 我通过调用列表上的 setSelection intposition 来实现此目的 当用户滑动列表视图然后单击图像按钮时会出现问题 列表将转到指定位置但继
  • 如何在 PercentRelativeLayout 中使用layout_aspectRatio?

    我尝试在视图上实现 16 9 的纵横比PercentRelativeLayout https developer android com reference android support percent PercentRelativeLa
  • Android 堆栈大小

    我如何获取和更改 Android 应用程序的堆栈大小 即使是主线程 主线程堆栈大小是在固件中设置的 无法修改 除非修改您自己手机的固件 正如斯特朗先生指出的那样 对于您分叉的线程 您可以设置自己的堆栈大小
  • phonestateintentreceiver.notifyPhoneCallState 的用途是什么?

    谁能告诉我有什么用phonestateintentreceiver notifyPhoneCallState 我知道现在在这里发布答案为时已晚 可能对将来参考此问题的人有所帮助 如果您的应用程序希望收到有关来电的通知 则必须调用notify
  • 在 Android 上使用 Fluidsynth 从 SoundFonts 播放音符

    有没有办法让android通过使用FluidSynth使用SoundFont文件播放声音 我一直在看jOrgan http sourceforge net apps mediawiki jorgan index php title Deve
  • Android 3.1 USB 主机 - BroadcastReceiver 未收到 USB_DEVICE_ATTACHED

    我经历过USB 主机的描述和示例位于developer android com http developer android com guide topics usb host html检测连接和分离的 USB 设备 如果我在清单文件中使用
  • 使用动画来滑动视图

    我有一个可以识别滑动手势 向上和向下 的 FrameLayout 例如 如果执行向上滑动 我应该对当前视图 即 MATCH PARENT x MATCH PARENT 进行动画处理 使其向上移动 同时新视图来自底部 我可以用动画来实现这一点
  • 将侦听器添加到各个 ListPreference 项

    我正在尝试将单个侦听器添加到ListPreference但我只是找不到正确的代码来做到这一点 例如 假设我有一个应用程序需要region要设置 所以我有一个ListPreference有三个选项 美洲 亚洲 欧洲 当我使用触控板滚动浏览项目
  • Android:Google Maps API 密钥注册:MD5 认证密钥

    如何获取MD5指纹密钥 我正在使用这个命令 C Program Files Java jdk1 7 0 04 bin gt keytool exe list alias androiddebugkey keystore C Document
  • 如何在Android上获取角度中的按键事件?

    我们如何在 Android 上的 Angular 中获取按键事件及其值 我使用phonegap Cordova Angular JS
  • 迭代 Sqlite-query 中的行

    我有一个表布局 我想用数据库查询的结果填充它 我使用全选 查询返回四行数据 我使用此代码来填充表行内的 TextView Cursor c null c dh getAlternative2 startManagingCursor c th
  • setOnTouchListener() 给我一个错误

    button setOnTouchListener new OnTouchListener public void onClick View v Toast makeText MainActivity this YOUR TEXT 5000
  • Android Studio 1.0 在 dexDebug 或 dexRelease 上构建失败

    我最近从 Android Studio 0 9 2 升级到 1 0 包括 Gradle 插件版本 1 0 0 并且在构建项目时遇到问题 每当我构建时 我都会在 dexDebug 或 dexRelease 步骤中收到以下异常 UNEXPECT
  • android中ScrollView中的图像

    在我的应用程序中 我想放置一个 png 文件 并且希望它在横向和纵向模式下都被视为滚动图像 请建议代码或示例 要使您的 Imageview 在高度不适合时滚动 您可以在 xml 中的 ScrollView 内添加一个 ImageView 并
  • libgdx SpriteBatch 渲染到纹理

    是否可以使用 libGdx 适用于 Android 桌面的 Java 引擎 中的 SpriteBatch 渲染到纹理 如果是这样 怎么办 基本上我想将所有内容渲染到 512 x 256 纹理的 320 x 240 区域 然后缩放区域以适合屏
  • 没有 Google Play 服务的设备的后备计划是什么

    目前 我正在将以前使用 jar 库的 Google 服务迁移到 Google Play 服务 谷歌广告移动 谷歌分析 谷歌云端硬盘 然而 在迁移指南中 Google 没有提到对于没有 Google Play 服务或没有最新的 Google
  • 如何在 Android 上设置 Google Drive API?

    我一直在尝试将 Google Drive 功能集成到我的应用程序中 但我无法使用任何内置功能 因此我相信我要么错过了一个步骤 要么做得不正确 我正在遵循官方的 Google 开发者指南 https developers google com

随机推荐

  • 将 Python 枚举编码为 JSON

    我有一本字典 其中一些键是 Enum 实例 enum Enum 的子类 我正在尝试使用自定义 JSON 编码器类将字典编码为 JSON 字符串 如下所示文档 https docs python org 3 library json html
  • 创建卷的 Docker 容器后,本地主机上的权限更改为 1000

    我的容器使用外部卷创建后 权限变为1000 drwxr x 71000 10004096 三月 02 01 13 my domain 每次我需要更改它我的用户 AS docker 由 root 用户安装 我怎样才能避免这种情况 有人可以写点
  • 将 Jython 与 Maven 结合使用

    我有一个 Maven 模块 它依赖于我通过 jython 代码访问的各种其他 Maven 依赖项 我现在已经完成了 我想将项目编译为 jar 或者甚至只是运行它而不编译 但我不知道从哪里开始 有谁知道如何运行一些 py 文件来访问其他包中的
  • MYSQL - 使用 while 循环更新

    declare c int set c 1 while c lt 700 do update users set profile display name concat substring first name 1 1 last name
  • .NET Core 更新迁移正在尝试再次重新创建表

    我首先正在开发 net core 3 项目代码 在此步骤中 我在表中添加了 2 列 然后我通过此代码 CLI 对解决方案进行了迁移添加 dotnet ef startup project MyApi Api migrations add a
  • mysql.service 丢失但显示在列表中 - 安装失败

    我使用的是 Ubuntu 17 04 长话短说 在与 MariaDB 进行了一些斗争之后 我遵循了一些关于如何完全地从我的家庭服务器中删除 MySQL 和 MariaDB 现在我无法重新安装mysql server 当我尝试时出现此错误 F
  • 非 ANSI 文件的 TStringList 行为

    在我的应用程序中 当我想要导入文件时 我使用 TStringList 但是 当有人从Excel导出数据时 文件编码是UCS 2 Little Endian TStringList无法读取数据 有什么方法可以验证这种情况 识别文本编码并向用户
  • Mod_wsgi工作进程分段错误(11)

    我的 django 应用程序有问题 该应用程序由 apache mod wsgi 托管 我在应用程序中添加了一些 matplotlib 代码 apache 工作进程现在崩溃了 我将这个问题简化为以下内容 没有任何 matplotlib 导入
  • 添加模型到集合后自动保存

    我有一个收藏myCollection我向其中添加模型如下 myCollection add title Romeo and Juliette author Shakespear 我现在可以将这个添加的模型保存到服务器吗 骨干Collecti
  • 找不到方法:'Void Google.Apis.Util.Store.FileDataStore..ctor(System.String)'

    我已经被困在这个问题上好几天了 我从 google api 示例中复制了确切的代码以将文件上传到 Google Drive 这是代码 UserCredential credential GoogleWebAuthorizationBroke
  • Spark失败:引起:org.apache.spark.shuffle.FetchFailedException:框架太大:5454002341

    我正在为确定父子项的表生成层次结构 以下是使用的配置 即使在收到有关太大框架的错误后也是如此 火花特性 conf spark yarn executor memoryOverhead 1024mb conf yarn nodemanager
  • 什么是 XPS 文件以及如何使用它

    我有一个简单的 C net Web 应用程序 我正在使用 XPS 文件 我使用了以下代码 private void button1 Click object sender EventArgs e try string xpsFile D C
  • C++ 多维数组运算符

    是否可以以某种方式重载多维数组的运算符 就像是 class A int operator const int x const int y 不 那是不可能的 不过 还有两种选择 你可以有operator 返回较小维度的数组 对于 3D 数组
  • Swift 中的懒惰是什么意思? [复制]

    这个问题在这里已经有答案了 我询问了有关堆栈溢出的多个问题 但没有得到可以定义什么是 LAZY 关键字以及为什么我们在 Swift 中使用它的答案 我对 Swift 很陌生 请解释一下 该词在两种情况下使用 惰性变量是一种存储的属性 只计算
  • action:@selector(showAlert:) 如何在这个showAlert方法中传递参数?

    我正在将自定义按钮添加到我的UITableViewCell 在该按钮的操作中我想打电话showAlert 函数并希望在方法中传递单元格标签 我如何在其中传递参数showAlert方法 action selector showAlert 如果
  • ASP.NET Core 6 中的非缓冲输出

    我正在尝试使用真正基本的 ASP NET Core 6 应用程序实现简单的流 非缓冲输出 下面的简单代码应该将 hello world 文本输出到客户端 然后关闭连接 甚至通过添加文档IHttpResponseBodyFeature选项 a
  • Google 地图动态语言更改

    我在我的一个项目中使用backbone js 并且使用Google 地图api 版本3 根据一些ajax 响应 我想动态更改Google 地图语言 有什么方法可以做到这一点 任何建议将不胜感激 提前致谢 考虑以下示例 其中我使用按钮 但您可
  • Java 代码中出现“没有为‘plsql’语言注册查询执行器工厂”异常

    我有一个简单的报告 显示数据库中的字段 我在 Jasper 中设置了一个数据适配器并放置了查询 我可以从 Jasper 成功预览报告 但是当涉及到 Java 时 它无法编译报告并显示以下异常 2014 年 6 月 18 日下午 3 17 4
  • 测试实体框架数据库连接

    我有一个通过实体框架连接到 MYSQL 数据库的应用程序 它工作 100 完美 但我想添加一小段代码 用于在应用程序启动时测试与数据库的连接 我的想法是简单地对数据库运行一个小命令并捕获任何异常 但是如果出现问题 例如 App Config
  • 如何停止或暂停 Pandora 和 Spotify

    我有一个应用程序 具有启动应用程序 Pandora 站或快捷方式的功能 一切都很好 后来我想停止我启动的应用程序 这适用于大多数事情 但 Pandora 和 Spotify 并不总是关闭 有时他们会这样做 但并非总是如此 这似乎与当前的 U