2013-06-06 5 views
6

मैं गैलरी या कैमरा के बीच एक फोटो चुनने के लिए उपयोगकर्ता को चुनने वाला एक पिकर दिखा रहा हूं। अगर मैं कैमरा चुनता हूं, तो एक बार कैमरा लोड हो जाने पर मैं लैंडस्केप फोटो लेने के लिए घुमाता हूं, फोटो लेता हूं और क्लिक करता हूं, यह मेरे ऐप पर लौटता है लेकिन लौटाई गई छवि शून्य है। अगर मैं कैमरे को घुमाता नहीं हूं, तो छवि ठीक हो जाती है। मुझे क्या याद आ रही है? मुझे पता है कि घूर्णन गतिविधि को पुनर्निर्मित करने का कारण बनता है, लेकिन AtctivityResult पर सही जानकारी क्यों नहीं होगी?कैमरा घुमाया गया है, तो कैमरे से छवि शून्य है

public void openImageIntent() { 

     // Determine Uri of camera image to save. 
     final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MyAppImages" 
       + File.separator); 
     root.mkdirs(); 
     SimpleDateFormat sdf = new SimpleDateFormat("ddMMyy-hhmmss"); 
     final String fname = String.format("%s.jpg", sdf.format(new Date())); 
     final File sdImageMainDirectory = new File(root, fname); 
     outputFileUri = Uri.fromFile(sdImageMainDirectory); 

     // Camera. 
     final List<Intent> cameraIntents = new ArrayList<Intent>(); 
     final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     final PackageManager packageManager = getPackageManager(); 
     final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0); 
     for (ResolveInfo res : listCam) { 
      final String packageName = res.activityInfo.packageName; 
      final Intent intent = new Intent(captureIntent); 
      intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 
      intent.setPackage(packageName); 
      intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
      cameraIntents.add(intent); 
     } 

     // Filesystem. 
     final Intent galleryIntent = new Intent(); 
     galleryIntent.setType("image/*"); 
     galleryIntent.setAction(Intent.ACTION_GET_CONTENT); 

     // Chooser of filesystem options. 
     final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source"); 

     // Add the camera options. 
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[] {})); 

     startActivityForResult(chooserIntent, SELECT_PICTURE_REQUEST); 
    } 

और onActivityResult विधि: यहाँ मेरी openImage आशय है

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK) { 
      if (requestCode == SELECT_PICTURE_REQUEST) { 
       final boolean isCamera; 
       if (data == null) { 
        isCamera = true; 
       } else { 
        final String action = data.getAction(); 
        if (action == null) { 
         isCamera = false; 
        } else { 
         isCamera = true; 
        } 
       } 

       Uri selectedImageUri; 
       if (isCamera) { 
        selectedImageUri = outputFileUri; 
       } else { 
        selectedImageUri = data == null ? null : data.getData(); 
       } 

       if (imageDelegate != null) { 
        Log.e(TAG, "imageDelegate not null: " + imageDelegate); 
        imageDelegate.gotNewImageUri(selectedImageUri); 
        imageDelegate = null; 

       } else if (getSupportFragmentManager().findFragmentByTag("addofferdialog") != null) { 
        imageDelegate = (AddOfferFragment) getSupportFragmentManager().findFragmentByTag("addofferdialog"); 
        Log.e(TAG, "imageDelegate is null but found fragment: " + imageDelegate); 
        Log.e(TAG, "Activity image: " + selectedImageUri); 
        imageDelegate.gotNewImageUri(selectedImageUri); 
        imageDelegate = null; 
       } else { 
        Log.e(TAG, "cannot find imageDelegate!!!!"); 
       } 

      Log.e(TAG, "selectedImageUri: " + selectedImageUri); 
      } 
     } 
    } 

उत्तर

2

आप अपने मेनिफेस्ट में अपने मैनिफ़ेस्ट फ़ाइल

बदलना होगा बस नीचे दिए गए कोड की जगह

<activity android:name=".CameraTestActivity" 
       android:label="@string/app_name"  android:configChanges="keyboardHidden|orientation"> 

अपने कोड के साथ

<activity android:name=".CameraTestActivity" 
      android:label="@string/app_name"> 
+0

वाह, यह आसान था। धन्यवाद – Darren

+0

इसे सही जवाब के रूप में चिह्नित करें यदि यह काम करता है :) – blganesh101

+0

मुझे 10 मिनट पहले इंतजार करना पड़ा। – Darren

3

बस onSaveInstanceState में outputFileUri बचाने के लिए और onRestoreInstanceState अन्य बुद्धिमान में बहाल यह उन्मुखीकरण परिवर्तन में अशक्त कर दिया जाएगा।

+0

धन्यवाद। यह काम करता है लेकिन मैंने पाया कि मैनिफेस्ट परिवर्तन बहुत आसान हो गया है क्योंकि यह गतिविधि को बरकरार रखता है। – Darren

+0

आपको वैसे भी उन्मुखीकरण परिवर्तनों के लिए डेटा को सहेजने का प्रयास करना चाहिए। –

+0

@ डैरेन या यह आसान है लेकिन आपको यह सुनिश्चित करने के लिए उपरोक्त करना है कि आपका ऐप अन्य परिस्थितियों में क्रैश नहीं होता है ... स्मृति –

1

यह मेरे लिए अच्छी तरह से काम किया ..

<activity 
    android:name=".CameraTestActivity" 
    android:configChanges="orientation|screenSize|keyboardHidden"> 
</activity> 
संबंधित मुद्दे