You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android点击ImageView显示Drawable图片触发ActivityNotFoundException问题

解决ActivityNotFoundException:自定义全屏图片显示Activity方案

看起来你遇到的问题主要有两个核心点:Uri格式错误,以及依赖系统ACTION_VIEW可能没有合适的应用能处理你的资源Uri。我来帮你一步步解决:

问题1:Uri格式不正确

你当前写的Uri路径包含了drawable_hdpi,这是错误的——Android资源系统会自动根据设备密度选择对应的资源,不需要手动指定密度文件夹。正确的Android资源Uri格式应该是:

android.resource://[你的包名]/drawable/[图片资源名]

所以你的Uri应该修改为:

Uri uri = Uri.parse("android.resource://com.example.deepanshu.tourguideapp/drawable/voukatio");

不过更安全的写法是通过资源ID生成Uri,避免硬编码包名和资源名:

Uri uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getPackageName() + "/" + R.drawable.voukatio);

问题2:系统可能没有应用能处理该Uri

即使修正了Uri,很多设备上可能没有默认应用支持打开Android资源Uri,这时候resolveActivity可能返回null,或者直接抛出ActivityNotFoundException。更可靠的方案是自己创建一个全屏显示图片的Activity,步骤如下:

步骤1:创建FullScreenImageActivity

首先在你的项目里新建一个Activity,比如FullScreenImageActivity,对应的布局文件activity_full_screen_image.xml只需要一个全屏的ImageView:

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/full_image_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitCenter" />

步骤2:修改点击事件代码

把原来的ACTION_VIEW Intent改成跳转到你自己的Activity,并传递图片的资源ID:

ImageView img = (ImageView) findViewById(R.id.image);
img.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent(CurrentActivity.this, FullScreenImageActivity.class);
        // 传递图片资源ID
        intent.putExtra("IMAGE_RES_ID", R.drawable.voukatio);
        startActivity(intent);
    }
});

注意把CurrentActivity替换成你当前这个Activity的类名。

步骤3:在FullScreenImageActivity中加载图片

在FullScreenImageActivity的onCreate方法里,接收传递的资源ID并设置给ImageView:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_full_screen_image);

    // 隐藏状态栏和ActionBar(可选,实现真正的全屏)
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    if (getSupportActionBar() != null) {
        getSupportActionBar().hide();
    }

    ImageView fullImageView = findViewById(R.id.full_image_view);
    int imageResId = getIntent().getIntExtra("IMAGE_RES_ID", 0);
    if (imageResId != 0) {
        fullImageView.setImageResource(imageResId);
    }
}

步骤4:在AndroidManifest.xml中注册Activity

别忘了在Manifest里添加这个新Activity的声明:

<activity android:name=".FullScreenImageActivity"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

这样修改后,点击ImageView就会跳转到你自己的全屏Activity显示图片,完全避免了依赖系统应用的问题,也就不会再出现ActivityNotFoundException了。

内容的提问来源于stack exchange,提问作者Houxe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:44:14