2

Ich habe bereits viele Beiträge gelesen, aber keiner von ihnen hat eine ähnliche Situation.onActivityResult nicht für Fragmentierung für Android API 23

Context

Der folgende Code arbeitet für API 17 fine - 22, aber nicht für die API 23 Der folgende Code innerhalb des Fragments ist.

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> 

Das Problem

Das Problem ist:

  • Manchmal sind die onActivityResults zurückgerufen wird, aber das Fragment var iables sind verloren.

  • Manchmal wird OnActivityResults nicht zurückgerufen. Wenn das Bild aufgenommen wurde, erscheint der Android-Hauptbildschirm.

Also angenommen ich, dass es ein Fehler von Android API 23.

Jede Idee ist?

Vielen Dank im Voraus.

+0

Wenn das in Ordnung ist, würde ich den vollständigen Code sehen möchten diese Aktivität/dieses Fragment. Bitte benachrichtigen Sie mich auch. –

+0

Haben Sie dies auf mehreren Geräten/Emulatoren mit SDK 23 getestet? Vielleicht ist der Übeltäter Ihr Gerät, nicht API-Ebene – liminal

Antwort

0

Für API-Level 23 und höher Berechtigungen von Menifest-Datei ist nicht genug, müssen Sie um Erlaubnis fragen extern wenn Sie benötigen, so hoffe ich, Sie haben Berechtigungen wie READ_EXTERNAL_STORAGE und alle in der Datei menifest, aber für API 23 und höher geschrieben es wird von außen erforderlich,

So für diese Anwendung externe Erlaubnis und Sie sind sich nicht bewusst für diese dann meine eigene Antwort überprüfen:

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