【问题标题】:Play song on default music player - android在默认音乐播放器上播放歌曲 - android
【发布时间】:2015-06-19 11:46:24
【问题描述】:

我的应用程序显示来自 sd 卡的歌曲列表。我希望能够在默认播放器上播放歌曲。我有关于这首歌的所有数据:id、标题、专辑、艺术家、路径...

有没有办法启动默认播放器来播放歌曲?

我的尝试:

  1. 使用Intent.CATEGORY_APP_MUSIC。我可以启动默认播放器,但无法设置歌曲。 Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_MUSIC) 打开默认音乐应用。 然而intent.setData(Uri.withAppendedPath(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id)) 抛出异常,即未找到意图。

  2. 使用已弃用的MediaStore.INTENT_ACTION_MUSIC_PLAYER。未找到活动。 Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER).setDataAndType(Uri.fromFile(songFile), "audio/*")

  3. 使用INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH。启动搜索,但不是歌曲,说无法在播放音乐上准备混音。但是,它现在可以在 Google 上使用,因此它可能是关键。 Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).putExtra(SearchManager.QUERY, name)
  4. 使用ACTION_VIEW。它可以工作,但它会启动播放器的紧凑版本,我想要完整的播放器。

注意:我想启动外部播放器,而不是在我的应用中。

更新:看起来像 Google Now 硬编码 Play Music 和 Youtube 支持。

【问题讨论】:

标签: android android-intent mediastore android-music-player


【解决方案1】:

如果您想在设备上启动默认音乐播放器应用,请尝试以下操作:

Intent intent = new Intent();  
intent.setAction(android.content.Intent.ACTION_VIEW);  
File file = new File(YOUR_SONG_URI);  
intent.setDataAndType(Uri.fromFile(file), "audio/*");  
startActivity(intent);

【讨论】:

  • 它会启动默认音乐播放器的精简版,请参阅更新问题中的图片
  • 啊,对不起,我想念你了!
  • 没关系,是最接近的解决方案。
  • 嘿,我有一个想法,但它是非常黑暗的魔法 Android。您应该为您的默认音乐播放器创建一个虚假的启动器图标。在这种情况下,操作系统认为它应该启动应用程序。此解决方案的缺点:仅适用于一名玩家。
  • 启动默认媒体播放器很简单,但设置歌曲却不是。
【解决方案2】:

它正在推出一个紧凑的游戏版本,因为该应用已经以这种方式实现了它, 您可以找到许多使用

打开完整应用程序的 3rd 方应用程序
Intent intent = new Intent();  
intent.setAction(android.content.Intent.ACTION_VIEW);  
File file = new File(YOUR_SONG_URI);  
intent.setDataAndType(Uri.fromFile(file), "audio/*");  
startActivity(intent);

你已经试过了

【讨论】:

    【解决方案3】:

    试试这样简单的东西:

    MediaPlayer mp = new MediaPlayer();     
    mp.setLooping(true);
    try {
        mp.setDataSource(mFile); //mFile is the path to your mp3 file
    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        mp.prepare();
    } catch (Exception e) {
        e.printStackTrace();
    }
    mp.start();
    

    还有一个使用 MadiaPlayer 和保存在 res/raw/ 目录中的文件的示例:

    MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
    mediaPlayer.start(); // no need to call prepare(); create() does that for you
    

    更多信息:http://developer.android.com/guide/topics/media/mediaplayer.html

    【讨论】:

    • 注意:我想启动外部播放器,而不是在我的应用中。
    • 嗯,您是否尝试过将这个选为最佳答案stackoverflow.com/questions/3114471/…
    • 是的,它推出了一个紧凑版本,仅供播放,而不是整个客户端。
    【解决方案4】:
     Intent musicIntent = new Intent();  
     //use Action VIEW to launch app
     musicIntent.setAction(Intent.ACTION_VIEW);    
    
    String mimeType  = getMimeTypeFromFile(); // in your case it is audio
    Uri uri = " yourfile uri";
    musicIntent.setDataAndType(uri,mimeType);
    startActivity(intent);
    

    如果 mime 类型改变,默认视图应用程序将打开,对于视频 mime 类型的视频播放器,对于音频音乐播放器和图片库将打开。

    如果有多个玩家,则Resolver活动将被打开。

    别忘了赶上ActivityNotFoundException

    在 ACTION_VIEW 的音乐播放器中,AudioPreview 活动被优先调用。还有其他活动处理此操作,只需使用操作“com.android.music.PLAYBACK_VIEWER”而不是 ACTION_VIEW 或使用它检查一次。

    【讨论】:

    • 这与我的问题的解决方案 4 有何不同?
    • 查看AndroidManifest.xl of Music app,可以从AndroidXRef获取代码
    • android.content.ActivityNotFoundException:未找到处理 Intent { act=com.android.music.PLAYBACK_VIEWER dat=content://media/external/audio/media/2797 typ=audio/* 的活动}
    • @RahulPatil。你能回答我吗?stackoverflow.com/q/59809009/4568864
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多