我试图在外部图像应用程序中显示存储在assets文件夹中的图像。
我已关注this tutorial并将其调整为在意图操作中使用ACTION_VIEW而非ACTION_SEND。
我的清单:
<application
..
<provider
android:name="com.voy.sima.utilities.AssetsProvider"
android:authorities="com.voy.sima"
android:grantUriPermissions="true"
android:exported="true" />
...
</application>
我的资产提供者:
public class AssetsProvider extends ContentProvider {
@Override
public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException {
AssetManager am = getContext().getAssets();
String file_name = "";
if (uri.getPath().startsWith("/"))
file_name = uri.getPath().substring(1);
else
file_name = uri.getPath();
if (file_name == null)
throw new FileNotFoundException();
AssetFileDescriptor afd = null;
try {
afd = am.openFd(file_name);
} catch (IOException e) {
e.printStackTrace();
}
return afd;
}
@Override
public String getType(Uri p1) {
// TODO: Implement this method
return null;
}
@Override
public int delete(Uri p1, String p2, String[] p3) {
// TODO: Implement this method
return 0;
}
@Override
public Cursor query(Uri p1, String[] p2, String p3, String[] p4, String p5) {
// TODO: Implement this method
return null;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal) {
// TODO: Implement this method
return super.query(uri, projection, selection, selectionArgs, sortOrder, cancellationSignal);
}
@Override
public Uri insert(Uri p1, ContentValues p2) {
// TODO: Implement this method
return null;
}
@Override
public boolean onCreate() {
// TODO: Implement this method
return false;
}
@Override
public int update(Uri p1, ContentValues p2, String p3, String[] p4) {
// TODO: Implement this method
return 0;
}
}
我如何生成URI:
public Uri getWaypointImageUri() {
return Uri.parse("content://com.voy.sima/Fotos/" + this.getImagePath() + ".jpg");
}
我的意图:
private void openPictureIntent(waypoint way) {
Intent theIntent = new Intent(Intent.ACTION_VIEW);
Uri uri = way.getWaypointImageUri();
theIntent.setDataAndType(uri, "image/jpeg");
context.startActivity(theIntent);
}
奇怪的是我在应用程序中使用同样的URI生成器方法进行改造并且工作得很好。这让我相信AssetProvider配置没问题。此外,谷歌+照片查看器应用程序正确显示图像,但是唯一的。任何其他图像应用程序无法显示图像(黑屏,没有错误)