onActivityResult 未在 Android API 23 的片段上调用



我已经读过很多帖子,但没有一个有类似的情况。

上下文

以下代码适用于 API 17 - 22,但不适用于 API 23。下面的代码位于片段内。

private void takePicture() {
    // identify if the device has camera to decide the next flow of action
    PackageManager pm = mContext.getPackageManager();
    if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
        Toast.makeText(mContext, R.string.msgPleaseTakePicture2, Toast.LENGTH_LONG).show();
        dispatchTakePictureIntent();
    }else {
        showErrorDialog(getString(R.string.msgErrorPicture));
    }
}
private void dispatchTakePictureIntent() {
    ContentValues values;
    values = new ContentValues();
    values.put(MediaStore.Images.Media.TITLE, "Doarnf");
    values.put(MediaStore.Images.Media.DESCRIPTION, "Doarnf");
    imageUri = getActivity().getContentResolver().insert(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}
//on ActivityResult method
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    switch (requestCode)
    {
        case REQUEST_IMAGE_CAPTURE:
            getPictureResults(resultCode, intent);
            break;
    }
}
private void getPictureResults(int resultCode, Intent intent) {
    if (resultCode == Activity.RESULT_OK)
    {
        try {
            mImageBitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), imageUri);
            mImageBitmap = ImageHelper.scaleBitmapBasedOnHeight(mImageBitmap, 1296);
            executeDonation();
        } catch (Exception e) {
            showErrorDialog(getString(R.string.msgErrorPicture));
        }
    }else {
        showErrorDialog(getString(R.string.msgErrorPicture));
    }
}

安卓清单.xml

<activity
    android:name="br.com.cfb.doarnf.NavigationDrawerActivity"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:launchMode="singleTop"
    android:theme="@style/AppDrawer"
    android:windowSoftInputMode="adjustPan"
    android:screenOrientation="portrait">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="br.com.cfb.doarnf.MainActivity" />
</activity>

问题所在

问题是:

  • 有时 onActivityResults 会被回调,但片段变量会丢失。

  • 有时不会回调 OnActivityResults。拍摄照片后,将显示Android主屏幕。

所以我假设这是来自Android API 23的错误。

知道吗?

提前谢谢你。

对于 API 级别 23 及以上权限,

来自 Menifest 文件的权限是不够的,您需要在需要时向外部请求权限,所以我希望您已经编写了像 READ_EXTERNAL_STORAGE 和 all in menifest 文件这样的权限,但对于 API 23 及更高

版本,外部需要它,

因此,为此应用外部许可,而您不知道这一点,请检查我的以下答案:

在安卓 API 23(棉花糖)中将文件写入SD卡的问题

相关内容

  • 没有找到相关文章

最新更新