显示android缓存文件,android – 使用ACTION_VIEW在缓存目录中打开文件
我一直在尋找這個,但我無法讓它正常工作.讓我解釋.
我有一個Android應用程序,可以將文件(圖像,文檔,…)保存在緩存目錄中.起初我曾經使用getExternalCacheDir()方法并將它們保存在那里,但因為它應該緩存在沒有SD卡的設備上,所以我必須使用getCacheDir().
當我以前使用getExternalCacheDir()方法時,在這樣的另一個應用程序中打開這些文件是沒有問題的:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), mimetype);
但是在使用getCacheDir()時,這些文件將保存在應用程序沙箱中,并且無法從應用程序外部訪問.所以我用谷歌搜索了它,然后來了** ContentProvider. ContentProvider可以使用外部應用程序打開私有文件.但是當我嘗試實現它時,它不起作用.
package com.myapplication.providers;
import java.io.File;
import java.io.FileNotFoundException;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
public class FileProvider extends ContentProvider {
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
File privateFile = new File(getContext().getCacheDir(), uri.getPath());
return ParcelFileDescriptor.open(privateFile, ParcelFileDescriptor.MODE_READ_ONLY);
}
@Override
public int delete(Uri arg0, String arg1, String[] arg2) {
return 0;
}
@Override
public String getType(Uri arg0) {
return null;
}
@Override
public Uri insert(Uri arg0, ContentValues arg1) {
return null;
}
@Override
public boolean onCreate() {
return false;
}
@Override
public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,
String arg4) {
return null;
}
@Override
public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
return 0;
}
}
將此提供程序添加到應用程序清單
android:name="com.myapplication.providers.FileProvider"
android:authorities="com.myapplication"
android:exported="true" />
并使用此代碼打開文件:
Uri uri = Uri.parse("content://com.myapplication/" + filename);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(uri, mimetype);
提前致謝!
總結
以上是生活随笔為你收集整理的显示android缓存文件,android – 使用ACTION_VIEW在缓存目录中打开文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android ip探测,Android
- 下一篇: 表格 树形结构 HTML 语言 CSS,