如何在Android 4.4 KitKat SD卡上添加包含元数据的媒体到MediaStore

6
背景:在Android 4.4中,Google决定应用程序不得访问SD卡的写入权限
然而,应用程序可以将文件写入/SDCard/Android/data/App Package Name。
所以这就是我所做的。我已经将一个MP3文件写入/Android/data/。然后我想让这个MP3文件出现在Android音乐播放器中。
我尝试了以下方法...
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"
            + filePath))); 
和...
MediaScannerConnection.scanFile(this,
          new String[] { file.toString() }, new String[] {"audio/*"},
          new MediaScannerConnection.OnScanCompletedListener() {
      public void onScanCompleted(String path, Uri uri) {
          Log.i("ExternalStorage", "Scanned " + path + ":");
          Log.i("ExternalStorage", "-> uri=" + uri);
      }
 });
还有...
ContentResolver.requestSync(CreateSyncAccount(context), MediaStore.AUTHORITY, null);

这两个操作都会将文件添加到MediaStore,生成的URI格式为content://media/external/file/xxxxx。

然而,该文件并未被添加为音频文件。我可以更新MediaStore以将文件声明为音频文件,但是文件元数据不会被导入。

除了编写自己的标签阅读器,我如何让媒体扫描程序扫描文件并像在内部存储器和预安装KitKat SD卡上那样插入元数据?


你尝试过像这样的东西吗?我认为ACTION_MEDIA_SCANNER_SCAN_FILE可能会有所帮助,如果不行,你可以获取MediaStore.Audio的ContentProvider并在其上调用新的requestSync方法。这只是我的想法,我还没有尝试过其中任何一个。 - Tom
感谢您的评论。这些解决方案都不起作用。问题在于让Android像在SD卡上那样填充元数据。稍微更新了一下问题,以使其更清晰明了。 - Justin
由于“/SDCard/Android/data/App Package Name”是您的应用程序私有文件夹,其他非超级用户应用程序不允许从中读取。即使它们在媒体数据库中,其他Android音乐播放器也无法播放您的mp3文件。在Android 4.4之前,可以允许其他应用程序从某些私有文件夹中读取。但在Android 4.4及以后的版本中,这种方法已经不再起作用了。 - k3b
@Justin,你找到解决方案了吗?如果没有,有其他的解决方案可以解决这个问题吗? - Ahmed
1个回答

6

我已经放弃寻找解决办法了。我认为没有解决办法,所以我已经提交了一个问题报告


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接