मेरे पास एक प्रोजेक्ट है जिसमें मैं स्टार्टअप पर 2 अनुमतियों के लिए पूछता हूं। डिबगिंग में, यह तब तक काम करता है जब तक यह दूसरी कॉल को requestPermissions
पर नहीं बनाता है। जैसे ही यह करता है, पहला onRequestPermissionsResult
खाली grantResults
सरणी के साथ आग लगाता है।कॉलिंग अनुरोध कस्टम कर्नेल पर दो बार अनुमतियाँRequestPermissions उपयोगकर्ता प्रतिक्रिया से पहले परिणाम
यह आज तक ठीक काम करता है। एकमात्र चीज जिसे मैं सोच सकता हूं वह अद्यतन है जो मैंने आज किया है। मैंने एंड्रॉइड एसडीके प्लेटफार्म टूल्स 23.1 में अपडेट किया, और मैक कैपिटन में अपना मैक अपडेट किया।
क्या कोई भी मुझे ठीक करने में मदद कर सकता है?
कोड इस प्रकार है:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blank_layout);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasCameraPermissions = checkSelfPermission(android.Manifest.permission.CAMERA);
if (hasCameraPermissions != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{android.Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION_CODE);
}
int hasStoragePermissions = checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (hasStoragePermissions != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION_CODE);
}
if (hasCameraPermissions == PackageManager.PERMISSION_GRANTED && hasStoragePermissions == PackageManager.PERMISSION_GRANTED) {
startCameraIntent();
}
} else {
startCameraIntent();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CAMERA_PERMISSION_CODE:
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, R.string.camera_denied, Toast.LENGTH_LONG).show();
quitAfter5();
}
break;
case REQUEST_STORAGE_PERMISSION_CODE:
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, R.string.storage_denied, Toast.LENGTH_LONG).show();
quitAfter5();
}
break;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasCameraPermissions = checkSelfPermission(android.Manifest.permission.CAMERA);
int hasStoragePermissions = checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (hasCameraPermissions == PackageManager.PERMISSION_GRANTED && hasStoragePermissions == PackageManager.PERMISSION_GRANTED) {
startCameraIntent();
}
}
}
संपादित :: परिवर्तन यह है कि दुर्घटना के लिए इस वजह से तथ्य यह है कि मैं कस्टम कर्नेल ElementalX 5 कुछ दिन पहले स्थापित किया था मेरी नेक्सस पर था। मैंने कल अपने भाई के नेक्सस 6 पर उसी कर्नेल का उपयोग करके इस मुद्दे की पुष्टि की। मैं कर्नेल डेवलपर को यह देखने के लिए एक ईमेल शूट करने जा रहा हूं कि वह इसके बारे में क्या कहता है।
हालांकि उत्तर में, ऊपर दिए गए कोड वास्तव में requestPermissions
विधि का उपयोग करने का गलत तरीका है। तो हर कोई बस इसे सही तरीके से करते हैं और यह सभी उपकरणों :)
उम, क्यों न केवल अनुरोध अनुरोध() 'पर एक कॉल करें? यह सब के बाद, अनुमति नामों की एक सरणी लेता है। – CommonsWare
@ कॉमन्सवेयर तो ऐसा करता है ... मुझे लगता है कि तब काम करेगा। यह अभी भी समझा नहीं गया है कि आज तक मेरा कोड ठीक क्यों काम करता है। – RayfenWindspear
@ कॉमन्सवेयर यदि आप इसे उत्तर के रूप में पोस्ट करते हैं तो मैं इसे स्वीकार करूंगा। मुझे आपकी अनुमति मार्गदर्शिका मिली और अब इसका पालन कर रहा है। इसके अलावा, मुझे पता चला कि मेरा कोड अब विफल हो गया है। यह मेरे डिवाइस पर हाल ही में स्थापित कस्टम कर्नेल से संबंधित होना चाहिए। मुझे उन्हें एक बग रिपोर्ट शूट करना होगा, हालांकि एक सूची में गुजरने से वास्तव में अनुमतियां जांचनी चाहिए। – RayfenWindspear