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

Posted

技术标签:

【中文标题】onActivityResult 未在 Android API 23 的片段上调用【英文标题】:onActivityResult not being called on fragment for Android API 23 【发布时间】:2016-10-02 22:42:49 【问题描述】:

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

上下文

以下代码适用于 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));
    


AndroidManifest.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 的错误。

有什么想法吗?

在此先感谢您。

【问题讨论】:

如果没关系,我想看看这个活动/片段的完整代码。也请通知我。 您是否在运行 SDK 23 的多个设备/模拟器上对此进行了测试?也许,罪魁祸首是你的设备,而不是 API 级别 【参考方案1】:

对于 API level 23 及以上的权限从 Menifest 文件是不够的,你需要在需要的时候从外部请求权限,所以我希望你已经写了 READ_EXTERNAL_STORAGE 之类的权限,并且全部在 menifest 文件中,但是对于 API 23 及以上它外部需要,

因此,为此应用外部权限,而您对此一无所知,请查看我的以下答案:

issues in writing files to sd card in android api 23(marshmallow)

【讨论】:

以上是关于onActivityResult 未在 Android API 23 的片段上调用的主要内容,如果未能解决你的问题,请参考以下文章

OnActivityResult未在活动的片段中调用

Zxing QR扫描仪onActivityResult未在片段中调用[重复]

如果重新创建活动,是不是会调用 onNewIntent 或 onActivityResult?

片段 onActivityResult 方法执行调用活动 onActivityResult

onActivityResult() 在 Android 上不起作用

AppCompatActivity 不推荐使用 onActivityResult()