Android에서 이미지 리소스의 URI를 얻는 방법 인 텐트를 열어야합니다. Intent intent =

다음과 같이 이미지를 보려면 인 텐트를 열어야합니다.

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]"

[패키지]는 패키지 이름입니다.

[res id]는 리소스 ID의 값입니다 ( 예 : R.drawable.sample_1).

함께 꿰매려면

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


답변

다음은 하드 코딩 된 문자열이나 URI 구문에 대한 임시 아이디어에 의존하지 않고 URI 문자열의 반복적 인 구성 및 분해를 피하면서 패턴을 android.net.Uri통해 클래스를 완전히 활용하는 깨끗한 솔루션입니다 Builder.

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()