0

以下代码适用于任何 android 设备(api >= 8),但不适用于三星 Galaxy S3(未找到音乐播放器)。

try {
    String name;
    try {
        name = (String) MediaStore.class.getDeclaredField("INTENT_ACTION_MUSIC_PLAYER").get(null);
    } catch(Exception e) {
        name = (String) Intent.class.getDeclaredField("CATEGORY_APP_MUSIC").get(null);
    }
    startActivity(new Intent(name));
} catch(Exception e) {
    // music player not found
}

三星构造函数层是什么东西呢?有没有人有办法在 Galaxy S3 上打开媒体播放器?

作为更新,我改变了我的错误,但我仍然没有在 Galaxy S3 上获得媒体播放器:

try {
    try {
        // 8 <= API < 15
        String action = (String) MediaStore.class.getDeclaredField("INTENT_ACTION_MUSIC_PLAYER").get(null);
        Intent intent = new Intent(action);
        startActivity(intent);
    } catch(Exception e) {
        // 15 <= API
        String category = (String) Intent.class.getDeclaredField("CATEGORY_APP_MUSIC").get(null);
        Method method = Intent.class.getMethod("makeMainSelectorActivity", String.class, String.class);
        Intent intent = (Intent) method.invoke(null, Intent.ACTION_MAIN, category);
        startActivity(intent);
    }
catch(Exception e) {
    // music player not found
}
4

3 回答 3

1

CATEGORY_APP_MUSIC 是一个类别。直接对此打开意图是行不通的。

根据文档:

公共静态最终字符串 CATEGORY_APP_MUSIC

自:API 级别 15 与 ACTION_MAIN 一起用于启动音乐应用程序。Activity 应该能够播放、浏览或操作存储在设备上的音乐文件。

注意:这不应用作 Intent 的主键,因为它不会导致应用程序以正确的操作和类别启动。相反,将此与 makeMainSelectorActivity(String, String) 一起使用以在选择器中生成具有此类别的主 Intent

您需要使用操作 MAIN 打开它并将类别设置为 CATEGORY_APP_MUSIC

于 2012-09-21T14:55:50.993 回答
1

我终于通过以下步骤找到了我的问题的解决方案:

  • 我从 Android Market 安装了“包名称”应用程序
  • 我找到了名为“com.sec.android.app.music”的音乐播放器包
  • 我使用 PackageManager 中的“getLaunchIntentForPackage”方法创建了一个 Intent
  • 我用这个 Intent 开始活动,找到了音乐播放器

此生成的 Intent 转换为 String 返回:

Intent {
    act=android.intent.action.MAIN
    cat=[android.intent.category.LAUNCHER]
    flg=0x10000000
    pkg=com.sec.android.app.music
    cmp=com.sec.android.app.music/.MusicActionTabActivity
}

我不明白为什么“CATEGORY_APP_MUSIC”不能只在 GS3 上工作......

启动音乐播放器的代码:

try {
    String pkgname = "com.sec.android.app.music";
    PackageManager pkgmanager = getPackageManager();
    Intent intent = pkgmanager.getLaunchIntentForPackage(pkgname);
    startActivity(intent);
} catch(Exception e) {
    // music player not found
}
于 2012-09-25T23:34:15.820 回答
0

这可能会帮助你

 Intent intent = new Intent(Intent.ACTION_VIEW);
 intent.setDataAndType(Uri.fromFile(new File(mpath + "/" + filename)), "audio/"+extension);
 try {
   startActivity(intent);
 } catch ( Exception e ) {
   e.printStackTrace();
 }

或者

Intent intent = new Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER);
 try {
       startActivity(intent);
     } catch ( Exception e ) {
       e.printStackTrace();
     }
于 2012-09-21T14:20:05.570 回答