我将图像添加到SDCARD上的文件夹中.由于图像和我的文件夹在图库中没有立即可见,我试图让MediaScannerConnection更新并在图库中显示文件夹/图像.这对我来说不是很好,因为Gallery中没有任何内容.我只在Eclipse AVD中测试.
我没有看到很多关于这个的讨论,因为scanFile是自api8以来的新功能.有人能说明这是怎么做的吗?
我在服务和Activity中尝试它但在onScanCompleted时继续获得uri = null.
Pet*_*rus 95
我意识到也许你正在寻找一个解决方案,它可以在api 8级之前工作,而我无法理解Mitch的答案.我通过构建一个扫描单个文件的类来解决它:
import java.io.File;
import android.content.Context;
import android.media.MediaScannerConnection;
import android.media.MediaScannerConnection.MediaScannerConnectionClient;
import android.net.Uri;
public class SingleMediaScanner implements MediaScannerConnectionClient {
private MediaScannerConnection mMs;
private File mFile;
public SingleMediaScanner(Context context, File f) {
mFile = f;
mMs = new MediaScannerConnection(context, this);
mMs.connect();
}
@Override
public void onMediaScannerConnected() {
mMs.scanFile(mFile.getAbsolutePath(), null);
}
@Override
public void onScanCompleted(String path, Uri uri) {
mMs.disconnect();
}
}
Run Code Online (Sandbox Code Playgroud)
你会像这样使用它来MediaScannerConnection扫描一个文件:
new SingleMediaScanner(this, file);
Run Code Online (Sandbox Code Playgroud)
Pet*_*rus 75
我正在寻找相同的东西,我在ApiDemos,ExternalStorage中找到了这个.扫描单个文件时解决了我的所有问题.
MediaScannerConnection.scanFile(this,
new String[] { file.toString() }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
Run Code Online (Sandbox Code Playgroud)
mei*_*ilp 25
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"
+ Environment.getExternalStorageDirectory())));
Run Code Online (Sandbox Code Playgroud)
Kap*_*uri 19
或者您可以使用以下方法:
private void scanFile(String path) {
MediaScannerConnection.scanFile(MainActivity.this,
new String[] { path }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("TAG", "Finished scanning " + path);
}
});
}
Run Code Online (Sandbox Code Playgroud)
调用文件扫描为:
scanFile(yourFile.getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)
小智 10
如果您只想在库中显示一个图像,请不要执行sendBroadcast.这将是对资源的巨大浪费.您需要创建一个MediaScannerConnectionClient,然后在您从中制作的MediaScannerConnection上调用connect()来扫描该文件.这是一个例子:
private MediaScannerConnectionClient mediaScannerConnectionClient =
new MediaScannerConnectionClient() {
@Override
public void onMediaScannerConnected() {
mediaScannerConnection.scanFile("pathToImage/someImage.jpg", null);
}
@Override
public void onScanCompleted(String path, Uri uri) {
if(path.equals("pathToImage/someImage.jpg"))
mediaScannerConnection.disconnect();
}
};
new MediaScannerConnection(context, mediaScannerConnectionClient).connect();
Run Code Online (Sandbox Code Playgroud)
让您的活动实现“MediaScannerConnectionClient”并将其添加到您的活动中:
private void startScan()
{
if(conn!=null) conn.disconnect();
conn = new MediaScannerConnection(YourActivity.this,YourActivity.this);
conn.connect();
}
@Override
public void onMediaScannerConnected() {
try{
conn.scanFile(yourImagePath, "image/*");
} catch (java.lang.IllegalStateException e){
}
}
@Override
public void onScanCompleted(String path, Uri uri) {
conn.disconnect();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78612 次 |
| 最近记录: |