28

मैं एक इरादे का उपयोग करके एक तस्वीर लेने की कोशिश कर रहा हूं। मेरी समस्या यह है कि कभी-कभी मेरी गतिविधि को चित्रित करने के बाद, जो प्रारंभ कहता है एक्टिविटीफॉर रिसेट, नष्ट हो जाता है ताकि क्रिएट को फिर से बुलाया जा सके।गतिविधि मारे गए/ऑनक्रेट को इरादे के माध्यम से चित्र लेने के बाद बुलाया गया

if (!getPackageManager().hasSystemFeature(
       PackageManager.FEATURE_CAMERA)) { 
      Util.makeLongToast(R.string.lang_no_camera); 
     } else { 
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(intent, TAKE_ITEM_PHOTO); 
     } 

...

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.v(TAG, "onactivityresult called"); 
    if (requestCode == TAKE_ITEM_PHOTO) { 
     if (data != null) { 

      imageUri = data.getData(); 


       try { 
        img_photo.setImageBitmap(Media.getBitmap(
          getContentResolver(), imageUri)); 
      } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

     } else 
      Log.w(TAG, "data is null"); 
    } 
} 

तो सब मैं कोशिश एक तस्वीर लेने और बदलने के लिए है:

यहाँ एक imageView क्लिक करने के बाद तस्वीरें लेने के लिए मेरे कोड, जो छवि प्रतिस्थापित किया जाना चाहिए है इसके साथ एक छविदृश्य की छवि। लेकिन कुछ मामलों में क्रिएट को एक्टिविटी रिसेट कहा जाता है और नई छवि खो जाती है।

सहायता की बहुत सराहना की जाती है।

+1

संभावित डुप्लिकेट [एंड्रॉइड: कैमरे के इरादे को कॉल करने के बाद गतिविधि नष्ट हो रही है) को संसाधित करने के लिए कॉलिंग फ्रेगनेट पर वापस जाना होगा (http: // stackoverflow.com/questions/16014930/android-activity-getting-destroyed-after-calling-camera-intent) –

उत्तर

102

वास्तव में कैमरा आपकी गतिविधि में अभिविन्यास परिवर्तन का कारण बनता है, यही कारण है कि आपकी गतिविधि को नष्ट किया जा रहा है और फिर से बनाया गया है।

इसे अपनी मेनिफेस्ट फ़ाइल में जोड़ें, यह अभिविन्यास परिवर्तन को रोक देगा और आपकी गतिविधि नष्ट नहीं होगी और फिर से बनाई जाएगी।

<activity 
    android:name=".YourActivity" 
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:screenOrientation="portrait" > 
</activity> 
+2

धन्यवाद! एंड्रॉइड: configChanges = "ओरिएंटेशन | कीबोर्डहिडन" गायब रेखा थी! ;) – Cattivo

+13

इस जवाब के लिए धन्यवाद! मैं अपने मॉनीटर –

+15

को गले लगा रहा हूं कृपया ध्यान दें कि स्तर 13 की तुलना में एपीआई में, आपको configChanges में "स्क्रीनसाइज" भी जोड़ना चाहिए। http://developer.android.com/guide/topics/manifest/activity-element.html –

1

अपनी गतिविधि/एप्लिकेशन के अभिविन्यास को ठीक करें क्योंकि जब आप वापस/खत्म() गतिविधि करते हैं और साथ ही आप अभिविन्यास बदलते हैं तो गतिविधि रीफ्रेश हो जाती है और स्वचालित रूप से फिर से शुरू हो जाती है।

1

ऐसा लगता है कि ऐसे फ़ोन हैं जो गैलेक्सी एस 3 जैसे छवि आयात करते समय गतिविधि को नष्ट कर देते हैं। यह उल्लेख किया गया है कि यदि मेरा ऐप पोर्ट्रेट मोड में है तो ऐसा होगा क्योंकि छवियां लैंडस्केप मोड में हैं। इस प्रकार, मैनिफेस्ट फ़ाइल में configChanges से संबंधित सभी सुझाव इस स्थिति पर लागू नहीं हैं।

मैं जो कर रहा हूं वह गतिविधि के डेस्ट्रॉय से लड़ने की बजाय है (जिसके कारण टुकड़े की एक्टिविटी रिसेट() को क्रिएट() के बाद बुलाया जाना नहीं है) एक्टिविटी रिसेट() पर भी गतिविधि को लागू करना था और वहां भी मैं छवि पथ प्राप्त कर सकता था। तब मैंने आगे बढ़ने के लिए उस मार्ग को टुकड़ा कर दिया, एक बार इसे बनाया जा रहा है। बेशक मुझे अपने ऐप को एक बार फिर से बनाया जाना था, कि उसे उस छवि को