次のように画像を表示するインテントを開く必要があります。
_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");
が正しくないことです。
形式は次のとおりです。
_"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);
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) );
}
Android.net.Uri
Builder
パターンを介したクラス。ハードコーディングされた文字列や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();
エラーがある場合は、間違ったパッケージ名を入力している可能性があります。この方法を使用してください。
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 = "/";
画像リソースのURIとR.drawable.goomb
は画像リソースです。 Builder関数は、要求するURIを作成します。
String resourceScheme = "res";
Uri uri = new Uri.Builder()
.scheme(resourceScheme)
.path(String.valueOf(intResourceId))
.build();
上記の回答に基づいて、プロジェクト内の任意のリソースに対して有効な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()