【问题标题】:No Apps Can Perform This Action - Opening Image没有应用程序可以执行此操作 - 打开图像
【发布时间】:2014-04-18 05:28:54
【问题描述】:

我尝试使用通过 Intent 启动的图库选择图像后查看图像,但尝试这样做时出现错误。我认为这可能与:

intent.setDataAndType(selectedVideo, "video/*, image/*");

或打开图像和视频之间的 onActivityResult 存在某种冲突 - 但我不确定。

非常感谢任何输入:

附言

理想情况下,这将在选择后使用图库打开图像 - 不要使用我的应用程序打开它。

来源:

ImageButton pb = (ImageButton) findViewById(R.id.photos);
        pb.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
//              Toast.makeText(UI.this, "Before and After Photos",
//                      Toast.LENGTH_LONG).show();
                Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType("image/*");
                startActivityForResult(intent, SELECT_PHOTO);
            }
        });

        ImageButton vb = (ImageButton) findViewById(R.id.video);
        vb.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
//              Toast.makeText(UI.this, "Video Testimonial", Toast.LENGTH_LONG)
//                      .show();
                Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType("video/*");
                startActivityForResult(intent, SELECT_VIDEO);

            }
        });
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {
            if (resultCode == Activity.RESULT_OK) {
                Uri selectedVideo = data.getData();
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setDataAndType(selectedVideo, "video/*, image/*");
                startActivity(Intent.createChooser(intent,
                        "Complete action using"));  



            }

        }

        ;


    }
}

编辑:

我正在尝试完成一个非常简单的任务:

我需要能够点击视频的 imageButton,从图库中选择并播放,然后点击图片的 imageButton,选择一张图片并查看它 - 全部使用图库

这如何实现?

当前来源:

        ImageButton pb = (ImageButton) findViewById(R.id.photos);
        pb.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType("image/*");
                startActivityForResult(intent, SELECT_PHOTO);
            }
        });

        ImageButton vb = (ImageButton) findViewById(R.id.video);
        vb.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
    .show();
                Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType("video/*");
                startActivityForResult(intent, SELECT_VIDEO);

            }
        });
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {
            if (resultCode == Activity.RESULT_OK) {
                Uri selectedVideo = data.getData();
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setDataAndType(selectedVideo, "video/*, image/*");
                startActivity(Intent.createChooser(intent,
                        "Complete action using"));  



            }

        }

        ;


    }
}

【问题讨论】:

  • 要查看图像,您需要首先打开图库选择图像获取 uri 并将所选图像设置为 imageview。我看不到您将图像设置为 imageview 的位置
  • 我基本上复制了我用于视频的内容 - 我应该如何更改它才能使其正常工作?
  • @user3507894 你还不明白。您复制粘贴了我在您之前的帖子中发布的代码。那是你的问题

标签: java android android-intent android-mediaplayer


【解决方案1】:

你有什么

startActivityForResult(intent, SELECT_PHOTO);

那么你有

if (requestCode == 1) {

然后

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(selectedVideo, "video/*, image/*");
startActivity(Intent.createChooser(intent,
                    "Complete action using")); 

您正在尝试使用意图选择器,而 android 说没有应用程序可以执行该操作。

你需要改成

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == SELECT_PHOTO) {
        if (resultCode == Activity.RESULT_OK) {
            Uri selectedImage = data.getData();
             iv.setImageURI(selectedImage);

        }

    }

例子:

我使用 ImageView 来显示从图库中选择的图像

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="24dp"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageButton1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="168dp"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>

主活动

public class MainActivity extends Activity {


        private static final int SELECT_PHOTO = 100;

        ImageView iv;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                iv= (ImageView) findViewById(R.id.imageView1);
                ImageButton ab = (ImageButton) findViewById(R.id.imageButton1);
                ab.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                                Toast.makeText(MainActivity.this, "Image Testimonial", Toast.LENGTH_LONG)
                                                .show();
                                Intent intent = new Intent(
                                                Intent.ACTION_PICK
                                                );
                                intent.setType("image/*");
                                startActivityForResult(intent,  SELECT_PHOTO);
                        }
                });


        }

        public void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                if (requestCode ==  SELECT_PHOTO) {
                        if (resultCode == Activity.RESULT_OK) {
                                Uri selectedImage = data.getData();
                                iv.setImageURI(selectedImage);

                        }

                }
        }
}

到已编辑的问题

public class MainActivity extends Activity {

    // Splash screen timer
    private static int SPLASH_TIME_OUT = 5000;
    private static final int SELECT_PHOTO = 101;
    private static final int SELECT_VIDEO = 100;

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

            ImageButton ab = (ImageButton) findViewById(R.id.imageButton1);
            ab.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                            Toast.makeText(MainActivity.this, "Audio Testimonial", Toast.LENGTH_LONG)
                                            .show();
                            Intent i = new Intent(
                                            Intent.ACTION_PICK,
                                            android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
                            startActivityForResult(i, 1);
                    }
            });

            ImageButton vb = (ImageButton) findViewById(R.id.imageButton2);
            vb.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                            Toast.makeText(MainActivity.this, "Video Testimonial", Toast.LENGTH_LONG)
                                            .show();
                            Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
                            photoPickerIntent.setType("video/*");
                            startActivityForResult(photoPickerIntent, SELECT_VIDEO);

                    }

            });
    }


    public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == Activity.RESULT_OK)
            {
            if (requestCode == SELECT_VIDEO) {
                     {
                            Uri selectedVideo = data.getData();
                            Intent intent = new Intent(Intent.ACTION_VIEW);
                            intent.setDataAndType(selectedVideo, "video/*");
                            startActivity(intent);

                    }
            }
            else if (requestCode == SELECT_PHOTO) {

                          Uri selectedImage = data.getData();
                          Intent intent = new Intent();
                          intent.setAction(Intent.ACTION_VIEW);
                          intent.setDataAndType(selectedImage,"image/*");
                          startActivity(intent);
              }

            }



//            ImageButton wb = (ImageButton) findViewById(R.id.imageButton3);
//            wb.setOnClickListener(new View.OnClickListener() {
//                    public void onClick(View v) {
//                            Toast.makeText(MainActivity.this, "Written Testimonial",
//                                            Toast.LENGTH_LONG).show();
//                            Intent intent = new Intent(MainActivity.this, Written.class);
//                            startActivity(intent);
//                    }
//            });

            ImageButton pb = (ImageButton) findViewById(R.id.imageButton4);
            pb.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                            Toast.makeText(MainActivity.this, "Before and After Photos",
                                            Toast.LENGTH_LONG).show();
                            Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
                            photoPickerIntent.setType("image/*");
                            startActivityForResult(photoPickerIntent, SELECT_PHOTO);
                    }
            });
      }
    }

【讨论】:

  • 这会导致图像在我的应用程序中显示 - 我希望它使用图库应用程序显示 - 这可能吗?\
  • @user3507894 是的。如果不是,你想要什么??
  • @user3507894 用户可以自行打开图库并在其中查看图像。那为什么要从您的应用中打开图库呢??
  • 我想使用图库应用全屏打开图像 - 不在我的应用中(上面的代码正在执行此操作)
  • 这是设计使然 - 当用户单击我的应用程序中的图像时,我需要加载全屏 - 在我的应用程序中 - 或画廊(任何一个都可以工作 - 但将 imageview 添加为上面的代码似乎在我现有按钮上方的小图标 - 不是一个选项)
【解决方案2】:

在华为 P9 android marshmallow 中,一台设备没有任何应用程序可以管理该意图的请求(它没有图库或照片应用程序)。所以手动安装了这些应用程序并完美运行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    相关资源
    最近更新 更多