2015-08-30 7 views
11

मैं इस तरह से कैमरे अनुमतियों को लागू करने की कोशिश की के लिए कैमरा अनुमतियाँ लागू करने के लिए कोशिश कर रहा है:एंड्रॉयड एम कोई आभासी विधि हो रही checkSelfPermission

private void checkCameraPermissions() { 
     if(checkCameraHardware(this)) { 
      if (checkSelfPermission(Manifest.permission_group.camera) 
        != PackageManager.PERMISSION_GRANTED) { 

       Crashlytics.log("Requesting camera permission"); 

       // Should we show an explanation? 
       if (shouldShowRequestPermissionRationale(
         Manifest.permission_group.camera)) { 
        // Explain to the user why we need to use the camera 
        showRationaleForCameraUse(); 
       } 

       requestPermissions(new String[]{Manifest.permission_group.camera}, 
         Constants.MY_PERMISSIONS_REQUEST_CAMERA_GROUP); 

       // MY_PERMISSIONS_REQUEST_CAMERA_GROUP is an 
       // app-defined int constant 
      } else { 
       startApp(); 
      } 
     }else{ 
      showNoCameraAvailableAlert(); 
     } 
    } 

@Override 
    public void onRequestPermissionsResult(int requestCode, 
              String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case Constants.MY_PERMISSIONS_REQUEST_CAMERA_GROUP: { 
       if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

        // permission was granted, yay! 
        // start the app 
        startApp(); 

       } else { 

        // permission denied, boo! 
        // leav the app! 
        showNoCameraAvailableAlert(); 
       } 
       return; 
      } 

      // other 'switch' lines to check for other 
      // permissions this app might request 
     } 
    } 

और इस निम्न त्रुटि मिला:

java.lang.NoSuchMethodError: No virtual method checkSelfPermission(Ljava/lang/String;)I in class Lim/emu/app/emu/app/view/splash/SplashActivity; or its super classes (declaration of 'im.emu.app.emu.app.view.splash.SplashActivity' appears in /data/app/im.emu.app.emu.test-1/base.apk) 
      at im.emu.app.emu.app.view.splash.SplashActivity.checkCameraPermissions(SplashActivity.java:74) 
      at im.emu.app.emu.app.view.splash.SplashActivity.onCreate(SplashActivity.java:52) 
      at android.app.Activity.performCreate(Activity.java:5977) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2367) 
      at android.app.ActivityThread.access$800(ActivityThread.java:148) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5274) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) 
08-30 16:34:10.801 17087-17357/im.emu.app.emu.test I/Fabric﹕ Crashlytics report upload complete: 55E30629033A-0001-42BF-296ED8AC703A.cls 

कोई भी विचार कैसे मैं कर सकते हैं इसे ठीक करो? पी। यदि कोई और जानकारी की आवश्यकता है तो कृपया

+1

में अनुमति देने के लिए भूल गया()' , और केन * अनुमति * का नाम लेते हैं (उदाहरण के लिए, 'Manifest.permission.CAMERA'), अनुमति समूह नहीं। एफडब्ल्यूआईडब्ल्यू, [यह निर्देशिका] (https://github.com/commonsguy/cw-omnibus/tree/master/Permissions/tutorial) में ऐप के पहले और बाद के संस्करण शामिल हैं जो कैमरे का उपयोग करते हैं, जहां "बाद" संस्करण एंड्रॉइड 6.0 रनटाइम अनुमतियों के लिए जांच करता है। मैं केवल 'ContextCompat' का उपयोग नहीं कर रहा हूं क्योंकि' ContextCompat' सामग्री मौजूद होने से पहले, मैंने एम डेवलपर पूर्वावलोकन के लिए ट्यूटोरियल लिखा था। – CommonsWare

उत्तर

26

से पूछें कि आपको पिछले संस्करणों को चलाने वाले डिवाइस पर कोड चलाना चाहिए। आपको इसके बजाय ContextCompat.checkSelfPermission() का उपयोग करना होगा।

+1

तो मुझे यह जांचना चाहिए कि मैं एंड्रॉइड एम पर हूं या नहीं, जब मैं एम पर नहीं हूं तो केवल "ContextCompat.checkSelfPermission()" का उपयोग करें? या ContextCompat.checkSelfPermission() हर समय उपयोग करें? – dangalg

+1

बस हमेशा 'ContextCompat.checkSelfPermission() 'का उपयोग करें, यह आपके लिए सभी मामलों को संभालेगा। दृश्य के पीछे, यह जांचता है कि यह एम पर है या नहीं और वास्तविक कार्य को कॉल करें, अगर यह एम से पहले है तो यह सच है, ऐसा कुछ। –

+0

धन्यवाद! यह वास्तव में यहां यह कहता है: https://developer.android.com/preview/features/runtime-permissions.html "अनुमतियों को संभालने के लिए समर्थन लाइब्रेरी विधियों" के अंतर्गत। मेरे माध्यम से सभी तरह से पढ़ने के लिए शर्मिंदा ... – dangalg

2

'shouldShowRequestPermissionRationale(
         Manifest.permission_group.camera)' 

साथ सावधानी से मैं अनुमतियाँ समूह जहां यह अलग-अलग अनुमति नहीं है और समूह चाहता था और यदि आप अन्य इस्तेमाल किया एक अपवाद फेंक के साथ एक समस्या हुई।

0

आपको प्री-लॉलीपॉप उपकरणों पर पिछड़े क्षमता के लिए ActivityCompat.checkSelfPermission() का उपयोग करना होगा। तो this.checkSelfPermission() क्षुधा, जिसमें यह घोषणा minSdkVersion 23

0

के लिए ही इस्तेमाल किया जा सकता है आप डेरेक फंग का जवाब, `checkSelfPermission()`, `requestPermission में उद्धृत समस्या से परे AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA"/> 
संबंधित मुद्दे