选配带摄像头的意图和影像选择器意图 [英] Chooser with camera intent and image picker intent

查看:264
本文介绍了选配带摄像头的意图和影像选择器意图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个选择器来选择或者从文件或拍图片的图像。

I have created a chooser for either picking an image from file or for making a picture.

在code我用工作正常的是Nexus 5,但是当我尝试在三星S5,选择器不显示摄像机图标。

The code I use works fine on a Nexus 5, however when I try it on a Samsung S5, the chooser does not display the camera icons.

public Intent makePhotoIntent(String title, Context ctx, String uniqueImageId){

        //Build galleryIntent
        Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        galleryIntent.setType("image/*");

        //Create chooser
        Intent chooser = Intent.createChooser(galleryIntent,title);

        if (checkexCameraHardware()){
            Intent  cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            mTempImage = null;
            try {
                mTempImage = createImageFile(uniqueImageId);
            } catch (IOException e) {
                e.printStackTrace();
            }

            if (mTempImage != null){
                cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempImage)); //add file ure (photo is saved here)
                Intent[] extraIntents = {cameraIntent};
                chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
            }
        }
        return chooser;
    }

的Nexus

当我改变其意图被添加到选择器三星设备不显示摄像机的订单,但只显示Android的系统文件选项。

When I change the order in which the intents are added to the chooser the Samsung device does show the camera but only shows android-system as the file option.

public Intent makePhotoIntent(String title, Context ctx, String uniqueImageId){

        //Build galleryIntent
        Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        galleryIntent.setType("image/*");

        //Create chooser
        Intent chooser = Intent.createChooser(galleryIntent,title);

        if (checkexCameraHardware()){
            Intent  cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            mTempImage = null;
            try {
                mTempImage = createImageFile(uniqueImageId);
            } catch (IOException e) {
                e.printStackTrace();
            }

            if (mTempImage != null){
                cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempImage)); //add file ure (photo is saved here)

                //I have to re-create the chooser here or the Samsung will not show the 'camera' icons.
                //I have to add the cameraIntent first.
                chooser = Intent.createChooser(cameraIntent,title);
                Intent[] extraIntents = {galleryIntent};

                //Intent[] extraIntents = {cameraIntent};
                chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
            }
        }
        return chooser;
    }

的Nexus

我非常希望三星设备显示相同的Nexus one当我第一次加入了画廊意图。我可以然而,并非得到这个工作。

Ideally I would like the Samsung device to show the same as the Nexus one when I add the gallery intent first. I can however not get this to work.

推荐答案


  • 如果有多个意向的额外意图匹配( Intent.EXTRA_INITIAL_INTENTS ),它会显示所有的Android系统下的结合。当你点击Android系统,它会打开与所有那些意图匹配另一个选择器。

  • If there are multiple intent matches for the extra intent (Intent.EXTRA_INITIAL_INTENTS) , it will show all of them combined under "Android System". When you click on "Android System", it will open another chooser with all those intent matches.

    所以,在三星设备的第一个屏幕,摄像头确实显示出来 - 它只是在Android的Systeem(点击这将显示所有摄像头的意图相匹配)

    So, in your first screenshot for samsung device, the camera is indeed showing up - its just under "Android Systeem" (clicking this will show all camera intent matches).

    如果您 galleryIntent 多余的,而不是相机的意图,它会结合所有的画廊相关意图下的Android Systeem(如出现在你的第二个屏幕截图三星设备)

    If you make galleryIntent the extra instead of camera intent, it will combine all gallery related intents under "Android Systeem" (as seen in your 2nd screenshot for samsung device)

    我想用户可以混淆如果他不知道这是什么的Andr​​oid Systeem是!

    I guess the user can be confused if he does not know what this "Android Systeem" is !


    • 通过下面的解决方案,你可以每一个直接添加到您的选择器

    在你的第二code段,替换

    In your 2nd code snippet, replace

    Intent[] extraIntents = {galleryIntent};
    chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
    

    List<Intent> galleryIntents = new ArrayList<Intent>();
    PackageManager pm = getApplicationContext().getPackageManager();
    for (ResolveInfo ri: pm.queryIntentActivities(galleryIntent, PackageManager.MATCH_DEFAULT_ONLY)) {
        Intent intent = pm.getLaunchIntentForPackage(ri.activityInfo.packageName);
        intent.setAction(Intent.ACTION_PICK);
        galleryIntents.add(intent); 
    }
    chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, galleryIntents.toArray(new Parcelable[] {}));
    


  • 这将直接手动添加每个匹配的意图,你的选择器

    This will manually add each matching intent directly to your chooser

    这篇关于选配带摄像头的意图和影像选择器意图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆