当前位置: 代码迷 >> Android >> Android传媒扫描没效果
  详细解决方案

Android传媒扫描没效果

热度:93   发布时间:2016-04-27 22:37:00.0
Android媒体扫描没效果
写了一个媒体扫描,发现没效果,是保存图片到本地的一个程序.

图片保存在/storage/emulated/0/xxxx/123.jpg

我扫描的是/storage/emulated/0/xxxx/,但是执行保存之后,发现在图库(系统图库)里面没有那个文件夹.不知道是因为什么,求解.

另外我想实现,第一次扫描文件夹,后面如果在新增文件(下载新的图片)就不用扫描文件夹了,请问怎么判断文件夹已经被扫描过了呢?

看了很多网上的很多都没法扫描,求可用扫描方法。



------解决思路----------------------
在读取之前不是有保存的么?能确定保存成功了且是保存在Environment.getExternalStorageDirectory().toString()+ "/xxxxxxx"这个目录下么?直接在设备上打开对应路径看看。
------解决思路----------------------
引用:
Quote: 引用:

在读取之前不是有保存的么?能确定保存成功了且是保存在Environment.getExternalStorageDirectory().toString()+ "/xxxxxxx"这个目录下么?直接在设备上打开对应路径看看。


路径里面有图片,但是就是没扫描上,不知道是不是因为保存图片可能有延时的作用。

嗯,有些路径图库没扫描出来算正常吧。文件夹已经被扫描过估计只能自己保存了。
------解决思路----------------------
                        MediaScannerConnection.scanFile(mContext, new String[] {filePath}, null, null);


filepath 要更新的路径
------解决思路----------------------
在4.4之前和之后,google规定了不允许第三方应用向系统发送广播,所以,4.4+都无法进行扫描。
解决办法:
1:先做版本判断
public static boolean hasKitkat(){
//Build.VERSION.KITKAT--Android4.4
return Build.VERSION.SDK_INT >= 19;
}
2:浏览图片
public static void scanPhotos(String filePath, Context context) {
        Intent intent = new      Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        Uri uri = Uri.fromFile(new File(filePath));
        intent.setData(uri);
        context.sendBroadcast(intent);
    }

private void refreshPicture(){
if(hasKitkat()){
MediaScannerConnection.scanFile(this,
                    new String[] {currFilePath}, new String[]{ "image/*" },
                    new MediaScannerConnection.OnScanCompletedListener() {
                public void onScanCompleted(String path, Uri uri) {
                 sendBroadcast(new Intent(android.hardware.Camera.ACTION_NEW_PICTURE, uri));
                 sendBroadcast(new Intent("com.android.camera.NEW_PICTURE", uri));
                }
            });
            scanPhotos(currFilePath, this);
}else{
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse("file://" + currFilePath)));
}
}
直接在调用refreshPicture()就可以了。
  相关解决方案