【问题标题】:Result code code is -1 and returned intent is null in onActivityResult()结果代码代码为 -1,onActivityResult() 中返回的意图为 null
【发布时间】:2015-12-26 19:08:02
【问题描述】:

我正在尝试通过以下代码初始化图像选择器对话框: 意图选择器Intent = null;

    List<Intent> intentList = new ArrayList<>();

    Intent pickIntent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    takePhotoIntent.putExtra("return-data", true);
    takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(context)));
    intentList = addIntentsToList(context, intentList, pickIntent);
    intentList = addIntentsToList(context, intentList, takePhotoIntent);

    if (intentList.size() > 0) {
        chooserIntent = Intent.createChooser(intentList.remove(intentList.size() - 1), "");
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray(new Parcelable[intentList.size()]));
    }
    startActivityForResult(chooserIntent, PICK_IMAGE_ID);

但是有

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch(requestCode) {
            case PICK_IMAGE_ID:
                Bitmap bitmap = ImagePicker.getImageFromResult(this, resultCode, data);
                currentImageButton.setImageDrawable(new BitmapDrawable(bitmap));
                break;
            default:
                break;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

我得到空意图和 -1 resultCode

我已经添加了清单的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />

代码在大多数设备上都可以正常工作,但在三星二重奏上却失败了。我哪里错了?

UPD

activity

image picker class

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    没关系,你得到-1 - 这意味着public static final int RESULT_OK(参见Activity 类)。

    Null 作为意图意味着您已经在此处定义了输出 uri:

    i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(context)));

    (即您可以使用Uri,一旦您得到确认,即捕获完成)

    关于图像挑选,我是这样做的(这几乎是一样的,正如谷歌在Taking Photos Simply 文章中建议的那样):

    .....
    private Uri capturedImageURI;
    .....
    
        capturedImageURI = Uri.fromFile(createImageFile());
        final Intent captureIntent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageURI);
        Intent chooserIntent = Intent.createChooser(new Intent(Intent.ACTION_PICK).setType("image/*"), "Select Picture");
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Parcelable[] { captureIntent });
        startActivityForResult(chooserIntent, 42);
    
    .....
    
    public File createImageFile() {
        File imageStorageDir = new File(
                Environment.getExternalStoragePublicDirectory(
                        Environment.DIRECTORY_PICTURES)
                , "MyAppPictures");
    
        if (!imageStorageDir.exists()) {
            imageStorageDir.mkdirs();
        }
    
        return new File(
                imageStorageDir + File.separator + "IMG_"
                        + String.valueOf(System.currentTimeMillis())
                        + ".jpg");
    }    
    
    .....
    
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            if (data != null) {
                 capturedImageURI = data.getData();  
            }
            ((ImageView)findViewById(R.id.capturedImageView)).setImageURI(capturedImageURI);
        }
    }
    

    注意!您需要以下权限才能使其工作:

    <uses-feature android:name="android.hardware.camera"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    

    Android 6.0 中,您必须先检查权限,然后才能从外部存储中获取数据。

    【讨论】:

    • 谢谢。问题在于权限。问题很难解决,因为有些设备不关心烫发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多