onActivityreslut上的Intent对象在Image capture android上为null

时间:2018-03-23 11:20:01

标签: android android-intent android-permissions android-image-capture

我正在尝试使用相机捕获后在图像视图上将图像设置为个人资料图片。图像捕获工作正常,图像存储在设备存储器中。但onActivityResult代码意图对象变为空。

以下是调用相机操作的代码

extension Calendar {
    func isDateInNextThirtyDays(_ date : Date) -> Bool {
        return self.dateComponents([.month], from: Date(), to:date).month! < 1
    }
}

从拨号和活动中调用

 Intent camera = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    Uri file = Uri.fromFile(Utilities.getOutputMediaFile());
                    camera.putExtra(MediaStore.EXTRA_OUTPUT, file);
                    activity.startActivityForResult(camera, Constants.IMAGE_CAPTURE_CAMERA);

片段

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Constants.LOGIN_REQUEST) {
            if (AppSettings.getInstance(HomeScreen.this).getBooleanValue(AppKeys.LOGIN_STATUS)) {changeFragment(new Fragment_Account());
            }
        } else {
            Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frameContainer);
            fragment.onActivityResult(requestCode, resultCode, data);
        }
    }
活动中的

和片段 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null) { if (requestCode == Constants.IMAGE_CAPTURE_CAMERA && resultCode == Activity.RESULT_OK) { ProfilePicUri = (Uri) data.getExtras().get(MediaStore.EXTRA_OUTPUT); Log.d("ImageUri", "onActivityResult: " + ProfilePicUri); performCrop(); } else if (requestCode == Constants.IMAGE_CAPTURE_GALLERY) { if (data.getData() != null) { ProfilePicUri = data.getData(); performCrop(); } } else if (requestCode == Constants.IMAGE_CROP) { Bundle extras = data.getExtras(); if (extras != null) { Bitmap newProfilePic = extras.getParcelable("data"); if (newProfilePic != null) { customer.setProfilePic(Utilities.encodeTobase64(newProfilePic)); profilePic.setImageBitmap(newProfilePic); Bitmap image = ((BitmapDrawable) profilePic.getDrawable()).getBitmap(); String imageUrls = Utilities.encodeTobase64(image); String imageString = image.toString(); Log.d("imageUrl : ", imageUrls); } } } } } 为空。

2 个答案:

答案 0 :(得分:3)

  

但onActivityResult代码意图对象变为空。

应该是null。您知道图像应该位于何处:它是您在EXTRA_OUTPUT中指定的位置。在那里寻找图像。

另请注意,一旦Uri.fromFile()攀升至24或更高,targetSdkVersion将无法在Android 7.0及更高版本上运行。请切换为使用FileProvider及其getUriForFile()方法。来自This sample appthis book说明了如何执行此操作。

答案 1 :(得分:1)

  

删除您设置保存文件路径的行,除非您   需要设置自定义路径以保存文件。

一旦URI由

设置
Intent.putExtra(MediaStore.EXTRA_OUTPUT, file);

结果意图将为null,它的设计就是这样。

onActivityResult,

intent.getData() 

将为您提供捕获图像的URI。