次のように画像を表示するには、インテントを開く必要があります。
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");
が正しくないことです。
次のように画像を表示するには、インテントを開く必要があります。
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);
これは、ハードコーディングされた文字列やURI構文に関するアドホックなアイデアに依存することなくandroid.net.Uri
、Builder
パターンを介してクラスを完全に活用し、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 resourceToUri(Context context, int resID) {
return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
context.getResources().getResourcePackageName(resID) + '/' +
context.getResources().getResourceTypeName(resID) + '/' +
context.getResources().getResourceEntryName(resID) );
}
エラーがある場合は、間違ったパッケージ名を入力している可能性があります。この方法を使用してください。
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()