5

मैंने विकसित और त्वरित ऐप जिसे मैं कैमरे के साथ एक तस्वीर लेना चाहता हूं। अगर मैं इंस्टॉल किया गया ऐप लॉन्च करता हूं तो सबकुछ काम करता है। लेकिन साथ त्वरित अनुप्रयोग, मैं निम्नलिखित त्रुटि मिलती है:त्वरित ऐप्स कैमरा इरादा

java.lang.SecurityException: Not allowed to start activity Intent { act=android.media.action.IMAGE_CAPTURE launchParam=MultiScreenLaunchParams { mDisplayId=0 mFlags=0 } 

यहाँ मेरी कोड:

AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA" />

गतिविधि:

private static int CAMERA_REQUEST = 1234; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_goodbye); 

findViewById(R.id.mainButton).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      startCamera(); 
     } 
    }); 
} 

private void startCamera() { 
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { 
     } else { 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST); 
     } 
    } else { 
     Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(cameraIntent, CAMERA_REQUEST); 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    startCamera(); 
} 


protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST) { 
     Bitmap bmp = (Bitmap)data.getExtras().get("data"); 
     ((ImageView)findViewById(R.id.mainImageView)).setImageBitmap(bmp); 
    } 
} 

मैं एंड्रॉइड 7.0 के साथ डिवाइस (सैमसंग) पर विकसित करता हूं। मैंने उपलब्ध अनुमति की जांच की और कैमरा यही कारण है कि इसे काम करना चाहिए। (https://developer.android.com/topic/instant-apps/faqs.html#available-permissions) अग्रिम धन्यवाद।

उत्तर

2

मुझे डर है कि समस्या अनुमति से नहीं आती है, लेकिन जिस तरह से आप अपनी गतिविधि लॉन्च कर रहे हैं।

वास्तव में तत्काल ऐप्स स्पष्ट उद्देश्यों के साथ गतिविधियों को लॉन्च नहीं कर सकते हैं जब तक कि तत्काल ऐप्स को उस विशिष्ट उद्देश्य को उपलब्ध नहीं कराया जाता है।

संपादित करें: क्षमा करें मैंने आपको पहले बताया था कि आप एक स्पष्ट इरादा लॉन्च करने की कोशिश कर रहे हैं। असल में नया इरादा (MediaStore.ACTION_IMAGE_CAPTURE) एक अंतर्निहित है। इसलिए मुझे समझ में नहीं आता कि आपके पास सुरक्षा अपवाद क्यों है। क्या आप नवीनतम कैनरी 4 संस्करण का उपयोग कर रहे हैं?

एक स्पष्ट मंशा और एक अंतर्निहित एक के बीच अंतर के लिए:

  • स्पष्ट आशय लक्ष्य विशेष रूप से किसी अन्य ऐप या घटक

  • अंतर्निहित आशय प्रणाली का चयन जो एप्लिकेशन आशय संभाल चाहिए। अर्थात Intent intent = new Intent(ACTION_VIEW,Uri.parse("http://www.google.com");

+0

मैं ** एंड्रॉइड स्टूडियो 3.0 कैनरी 4 ** का उपयोग कर रहा हूं - ग्रेड संस्करण: ** 4.0 ** - एंड्रॉइड प्लगइन संस्करण: ** 3.0.0-अल्फा 4 ** – Pouicky

2

मैं MediaStore.ACTION_IMAGE_CAPTURE प्रयोजन द्वारा तस्वीरें कब्जा दुर्भाग्य से इस समय काम करेंगे नहीं लगता। यहां तक ​​कि यदि गतिविधि शुरू हो सकती है, तो उसे बाहरी छवि को वास्तव में वापस भेजने के लिए बाह्य संग्रहण तक पहुंच की आवश्यकता होती है और बाहरी संग्रहण तत्काल ऐप्स के लिए उपलब्ध नहीं है (restrictions देखें)। कैप्चर इरादा आंतरिक संग्रहण में लिखने के मामले में FileProvider तत्काल ऐप्स पर भी समर्थन नहीं कर रहा है (मुझे इसके बारे में निश्चित नहीं है)।

अनुमति android.permission.CAMERA हालांकि समर्थित है, आपको केवल camera2 APIs का उपयोग करने की आवश्यकता होगी। एक कोड नमूना है जिसे आप here आज़मा सकते हैं।

+0

यह एक बाहरी दृश्यमान बग है: https://issuetracker.google.com/issues/66942980 – AdamK

0

Google issue tracker के संदर्भ में ठीक से एंड्रॉयड 8.1 Oreo हिस्सा होगा। दुर्भाग्य से जीएमएस के माध्यम से ठीक करना संभव नहीं है, हालांकि हम अपने भागीदारों को फिक्स के लिए एक पैच भेज रहे हैं, इसलिए वे 8.1 बेस से बाहर नहीं बना रहे हैं, भले ही वे फिक्स को अपनाने के लिए सक्षम हो जाएं।

यदि कोई समस्या बनी रहती है, तो कृपया Google issue tracker पर रिपोर्ट करें, वे जांच के लिए फिर से खुलेंगे।

संबंधित मुद्दे