web-dev-qa-db-ja.com

androidで画像リソースのURIを取得する方法

次のように画像を表示するインテントを開く必要があります。

_Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("@drawable/sample_1.jpg");
intent.setData(uri);
startActivity(intent);
_

問題は、Uri uri = Uri.parse("@drawable/sample_1.jpg");が正しくないことです。

87
user602874

形式は次のとおりです。

_"Android.resource://[package]/[res id]"_

[package]はパッケージ名です

[res id]はの値リソースIDです。 R.drawable.sample_1

一緒にステッチするには

Uri path = Uri.parse("Android.resource://your.package.name/" + R.drawable.sample_1);

133
Axarydax
public static Uri resourceToUri(Context context, int resID) {
        return Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + "://" +
                context.getResources().getResourcePackageName(resID) + '/' +
                context.getResources().getResourceTypeName(resID) + '/' +
                context.getResources().getResourceEntryName(resID) );
    }
53
xnagyg

Android.net.UriBuilder パターンを介したクラス。ハードコーディングされた文字列やURI構文に関するアドホックなアイデアに依存することなく、URI文字列の繰り返しの構成と分解を回避します。

Resources resources = context.getResources();
Uri uri = new Uri.Builder()
    .scheme(ContentResolver.SCHEME_Android_RESOURCE)
    .authority(resources.getResourcePackageName(resourceId))
    .appendPath(resources.getResourceTypeName(resourceId))
    .appendPath(resources.getResourceEntryName(resourceId))
    .build();
52
Uli

エラーがある場合は、間違ったパッケージ名を入力している可能性があります。この方法を使用してください。

public static Uri resIdToUri(Context context, int resId) {
    return Uri.parse(Consts.Android_RESOURCE + context.getPackageName()
                     + Consts.FORESLASH + resId);
}

どこ

public static final String Android_RESOURCE = "Android.resource://";
public static final String FORESLASH = "/";
8
sandalone

画像リソースのURIとR.drawable.goombは画像リソースです。 Builder関数は、要求するURIを作成します。

String resourceScheme = "res";
Uri uri = new Uri.Builder()
  .scheme(resourceScheme)
  .path(String.valueOf(intResourceId))
  .build();
4
roide

上記の回答に基づいて、プロジェクト内の任意のリソースに対して有効なUriを取得する方法に関するkotlinの例を共有したいと思います。コードに文字列を入力する必要がなく、間違って入力するリスクがないため、これが最善のソリューションだと思います。

    val resourceId = R.raw.scannerbeep // r.mipmap.yourmipmap; R.drawable.yourdrawable
    val uriBeepSound = Uri.Builder()
        .scheme(ContentResolver.SCHEME_Android_RESOURCE)
        .authority(resources.getResourcePackageName(resourceId))
        .appendPath(resources.getResourceTypeName(resourceId))
        .appendPath(resources.getResourceEntryName(resourceId))
        .build()
2
Sergio