在默认图像查看器上查看资产图像

时间:2015-04-16 20:12:57

标签: android image android-intent uri assets

我试图在外部图像应用程序中显示存储在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配置没问题。此外,谷歌+照片查看器应用程序正确显示图像,但是唯一的。任何其他图像应用程序无法显示图像(黑屏,没有错误)

0 个答案:

没有答案