相关疑难解决方法(0)

如何在Android上刷新MediaStore?

这开始是Android论坛上的一般用户问题.然而,它必然是一个编程问题.这是我的问题.

Android有一项服务 - MediaScanner - 它可以随时在后台运行(我相信)SD卡已卸载并重新安装.此服务收集卡上所有媒体文件的数据,并提供可由音乐应用程序查询的SQLite DB.大多数音乐应用程序都使用此服务,因为它可以节省与扫描SD卡相关的电量消耗.

自从我开始使用android以来,我一直遇到一个问题,即即使从SD卡中删除后,与该设备同步的M3U播放列表仍保留在此SQLite DB中.虽然卡上只有大约10个m3u的文件,但我现在已经收集了大约40个播放列表,这些播放列表出现在我使用的任何音乐应用程序中.剩余的播放列表不播放,并且是空的.我可以通过从音乐应用程序中删除它们来手动删除它们,但我厌倦了这样做.必须有更好的方法来删除这些鬼播放列表.

Android Market上有两个应用程序 - SDRescan和Music Sc​​anner,据说可以做到这一点,但它们都不起作用.

我开始编写自己的应用程序来刷新或删除MediaStore数据库并从头开始,但我没有走得太远.我有一个运行以下代码的Android应用程序:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
        Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 
Run Code Online (Sandbox Code Playgroud)

我在网上找到了一些这样的代码扫描SD卡的方法,但我没有任何运气.有小费吗?

完整代码:

package com.roryok.MediaRescan;

import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;

public class MediaRescan extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
                Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 
        setContentView(R.layout.main);
    }

    //Rescan the sdcard after copy the file
    private void rescanSdcard() throws Exception{     
      Intent scanIntent = …
Run Code Online (Sandbox Code Playgroud)

android mediastore

50
推荐指数
3
解决办法
5万
查看次数

MediaStore.Audio.Playlists.Members.getContentUri指的是什么是String'volumeName'参数?

我想查询给定播放列表的成员.我有正确的播放列表ID,并希望使用managedQuery()来查看相关的播放列表成员.

我有的是这个:

private String [] columns = { 
     MediaStore.Audio.Playlists.Members.PLAYLIST_ID,
     MediaStore.Audio.Playlists.Members.TITLE,
     };
Uri membersUri = MediaStore.Audio.Playlists.Members.getContentUri(volume, playlistId);
Cursor tCursor = managedQuery(membersUri, columns, null, null, null);
Run Code Online (Sandbox Code Playgroud)

我不知道卷参数需要什么.我试过这个: MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI.toString()对于"音量"这个论点.

这给了我一个有效的内容URI,看起来像:

content://media/external/audio/playlists/2/members
Run Code Online (Sandbox Code Playgroud)

但是,我的光标返回null.我可能远离基地 - 我知道我想做的事情非常简单.

android

11
推荐指数
1
解决办法
5995
查看次数

如何在Nexus 7上触发MediaScan?

因为我想确保MediaStore拥有最新信息而无需重新启动我想使用我在SO上找到的流行方式触发MediaScanner

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                                 Uri.parse("file://" + Environment.getExternalStorageDirectory())));
Run Code Online (Sandbox Code Playgroud)

这适用于我的三星S2 w/ICS,但不适用于我的Nexus 7 w/JellyBean.Logcat在我的Nexus 7上显示:

WARN/ActivityManager(480): Permission denied: checkComponentPermission() owningUid=10014
WARN/BroadcastQueue(480): Permission Denial: broadcasting Intent { act=android.intent.action.MEDIA_MOUNTED dat=file:///storage/emulated/0 flg=0x10 } from com.example.foo.bar (pid=17488, uid=10046) is not exported from uid 10014 due to receiver com.android.providers.downloads/.DownloadReceiver
INFO/ActivityManager(480): Start proc com.google.android.music:main for broadcast com.google.android.music/.store.MediaStoreImportService$Receiver: pid=17858 uid=10038 gids={50038, 3003, 1015, 1028}
INFO/MusicStore(17858): Database version: 50
INFO/MediaStoreImporter(17858): Update: incremental Added music: 0 Updated music: 0 Deleted music: 0 Created playlists: 0 Updated playlists: 0 Deleted playlists: 0 Inserted playlist …
Run Code Online (Sandbox Code Playgroud)

android android-intent android-mediascanner android-broadcast

6
推荐指数
3
解决办法
1万
查看次数