2

すでに多くの投稿を読みましたが、似たような状況の投稿はありません。

環境

次のコードは、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 のバグだと思います。

何か案が?

前もって感謝します。

4

1 に答える 1

0

APIレベル23以上の場合はMenifestファイルからのパーミッションだけでは不十分で、必要に応じて外部にパーミッションを求める必要があるので、メニフェストファイルにREAD_EXTERNAL_STORAGEなどのパーミッションを全て書いてあるといいのですが、API 23以上では外部から必要です、

そのため、外部許可を適用しますが、これに気付いていない場合は、以下の回答を確認してください。

android api 23(marshmallow)でsdカードにファイルを書き込む際の問題

于 2016-06-22T05:36:13.590 に答える