2017-01-30 5 views
0

Ich bin Anfänger auf native Android-Entwicklung. Ich arbeite an android studio. Ich habe eine tabbed activity, in der ich 2 Registerkarten verwende. In einem Tab gibt es eine Karte mit Marker am GPS-Standort des Benutzers. Die zweite Registerkarte besteht darin, ein Bild aufzunehmen und es dann im Speicher des Betriebssystems zu speichern. Dazu folgte ich dieser tutorial, führen Sie die App auf meinem Gerät, aber es stürzt ab. Ich betreibe es unter Marshmallow. Im Folgenden wird der Fehler angezeigt iPermission Denial in Android während der Arbeit mit der Kamera

java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE cmp=android/com.android.internal.app.ResolverActivity } from ProcessRecord{e8f9820 15070:com.example.accurat.faisal/u0a228} (pid=15070, uid=10228) with revoked permission android.permission.CAMERA 
                       at android.os.Parcel.readException(Parcel.java:1620) 
                       at android.os.Parcel.readException(Parcel.java:1573) 
                       at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3181) 
                       at android.app.Instrumentation.execStartActivity(Instrumentation.java:1541) 
                       at android.app.Activity.startActivityForResult(Activity.java:4298) 
                       at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50) 
                       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79) 
                       at android.support.v4.app.ActivityCompatJB.startActivityForResult(ActivityCompatJB.java:30) 
                       at android.support.v4.app.ActivityCompat.startActivityForResult(ActivityCompat.java:146) 
                       at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:937) 
                       at android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:1047) 
                       at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:954) 
                       at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:943) 
                       at com.example.accurat.faisal.Camera$1.onClick(Camera.java:51) 
                       at android.view.View.performClick(View.java:5716) 
                       at android.widget.TextView.performClick(TextView.java:10926) 
                       at android.view.View$PerformClick.run(View.java:22596) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.app.ActivityThread.main(ActivityThread.java:7325) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

ich es gesucht und gefunden, dass ich die Erlaubnis für sie so gefolgt fragen sollte ich dieses link und versuchte Berechtigungsprüfung wie als Gebrüll

button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // Check permission for CAMERA 
      if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) 
        != PackageManager.PERMISSION_GRANTED) { 

       // Check Permissions Now 
       // Callback onRequestPermissionsResult interceptado na Activity MainActivity 
       ActivityCompat.requestPermissions(getActivity(), 
         new String[]{Manifest.permission.CAMERA}, 
         MainActivity.REQUEST_CAMERA); 


      } 

      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 
     } 
    }); 

hinzufügen, aber ich bin immer red text von CAMERA und REQUEST_CAMERA. Obwohl ich sich auch importiert haben, aber immer noch der rote Text zeigt

import static android.Manifest.permission.CAMERA; 
import static android.Manifest.permission.RECORD_AUDIO; 
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; 

Unten ist meine Manifest-Datei

<uses-permission android:name="com.example.accurat.faisal.permission.MAPS_RECEIVE"/> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.hardware.camera"/> 

Ich weiß nicht, was das Problem ist und nicht wissen, die Lösung und ich bleibe dran.

Jede Hilfe wäre sehr

+0

Wie die Zeichenfolge "red text" wörtlich? Versuche zu säubern und neu aufzubauen. Dann installieren Sie die App erneut auf dem Gerät. – Fildor

+0

@Fildor Ich habe hinzugefügt 'Import statische android.Manifest.permission.CAMERA;' und es zeigt mir keine roten Linien aber auf 'REQUEST_CAMERA' – faisal1208

+0

Ahhh, also ich denke, es gibt keine REQUEST_CAMERA in Ihrer MainActivity definiert ... Die IDE sollte dort einen Fehlertext zur Verfügung stellen. – Fildor

Antwort

0

Sie benötigen Berechtigungsprüfung im Code erkannt werden, und Beginning in Android 6.0 (API level 23), users grant permissions to apps while the app is running die Kameravorschau zeigen sollte auf Benutzeraktion von accecpt oder Ablehnung basiert hinzuzufügen. Außerdem müssen Sie die Benutzerberechtigung für android.Manifest.permission.WRITE_EXTERNAL_STORAGE erfragen, wenn Sie eine Datei erstellen, die als Eingabe für das Bild verwendet wird (erfasst über die Kamera).

+2

Dies sollte ein Kommentar sein! – Piyush

+0

Ich weiß, ich muss die Berechtigungsprüfung hinzufügen, und ich implementiere es, und es wird in meiner Frage gezeigt. Das Problem ist, dass ich "roten Text" für "CAMERA" und "REQUEST_CAMERA" bekomme. – faisal1208

+0

@ faisal1208 Sie haben den else-Code in onclick Listener vergessen. –

0

Sie verwenden müssen:

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

Wenn Sie API verwenden 23+, weil CAMERA Erlaubnis als gefährlich Erlaubnis definiert ist, siehe hier: https://developer.android.com/guide/topics/permissions/requesting.html#normal-dangerous

Der Benutzer muss die Berechtigung zur Laufzeit übernehmen . Sie sollten die Absicht Ergebnis überprüfen:

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case Manifest.permission.CAMERA: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // permission was granted, yay! Do the 
       // contacts-related task you need to do. 

      } else { 

       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
      return; 
     } 

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

https://developer.android.com/training/permissions/requesting.html

Verwandte Themen