2016-04-09 6 views
1

Ich bin ein Student, und ich wurde gebeten, eine App über Bilderkennung zu machen, aber wenn ich versuche, um die Kamera zu verwenden, erhalte ich immer:Wie kann ich diesen Fehler mit Kameraerlaubnis auf Android lösen?

E/CameraService: Permission Denial: kann die Kamera nicht verwenden

die Sache ist, dass ich die Erlaubnis, auf dem Manifest und ich auch die zur Laufzeit Erlaubnisanfrag hinzufügen:

public void onScanButtonClicked(View view) { 

    String[] permissos = {"android.permission.CAMERA"}; 

    if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.CAMERA) 
      != PackageManager.PERMISSION_GRANTED) { 

     ActivityCompat.requestPermissions(this, 
       permissos, 
       MY_PERMISSIONS_REQUEST_CAMERA 
     ); 
    } 
     startActivity(new Intent(this, ScanActivity.class)); 
} 

Hier ist mein Manifest:

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <uses-feature android:name="android.hardware.camera2" /> 
    <uses-feature android:name="android.hardware.camera.any" /> 

    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".ScanActivity" 
     android:label="@string/app_name" 

     android:configChanges="orientation|screenSize" 
     android:exported="true"> 
     <uses-permission android:name="android.permission.CAMERA" /> 
     <uses-feature 
      android:name="android.hardware.camera2" 
      android:required="false" /> 
     <uses-feature 
      android:name="android.hardware.camera.any" 
      android:required="false" /> 


    </activity> 
</application> 

+1

Berechtigungen und Features gehen außerhalb der '' Tags. –

+0

Mögliches Duplikat von [Berechtigung verweigert (fehlende INTERNET-Erlaubnis?): Aber Erlaubnis ist gegeben] (http://stackoverflow.com/questions/25135595/permission-denied-missing-internet-permission-but-permission-isiven) –

+0

Zusätzlich zu den '' - Tags an der falschen Stelle, wie andere darauf hingewiesen haben, können Sie 'startActivity()' nicht aufrufen, bis Sie die Berechtigung haben. Gerade jetzt scheinen Sie es zu nennen, ob Sie die Erlaubnis haben oder nicht. – CommonsWare

Antwort

3

Platz die uses-permission und verwendet-Funktion außerhalb der Aktivität und Anwendung Tag aus der Scan-Aktivität

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-feature android:name="android.hardware.camera2" /> 
<uses-feature android:name="android.hardware.camera.any" /> 
<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 


    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".ScanActivity" 
     android:label="@string/app_name" 
     android:configChanges="orientation|screenSize" 
     android:exported="true"> 
    </activity> 
</application> 

ändern sich auch die if-Schleife

public void onScanButtonClicked(View view) { 

String[] permissos = {"android.permission.CAMERA"}; 

if (ContextCompat.checkSelfPermission(this, 
     Manifest.permission.CAMERA) 
     != PackageManager.PERMISSION_GRANTED) { 

    ActivityCompat.requestPermissions(this, 
      permissos, 
      MY_PERMISSIONS_REQUEST_CAMERA 
    ); 

}else{ 
    startActivity(new Intent(this, ScanActivity.class)); 
} 

} 
0

Ich hatte ähnliches Problem. Mein Manifest-Datei war wie

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 

     package="com.example.ildar.textureview"> 

     <uses-permission android:name="android.permission.CAMERA" /> 
     <uses-feature android:name="android.hardware.camera" android:required="true"/> 
     <uses-feature android:name="android.hardware.camera.autofocus" /> 

    .... 

</manifest> 

Und der Code, der mein Problem gelöst:

if(ContextCompat.checkSelfPermission(this, 
       Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED){ 

      mCamera = Camera.open(); 
     }else{ 
      ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.CAMERA}, 0); 
     } 

Mit anderen Worten, wenn die Erlaubnis für mich nicht gewährt wurde, fordere ich es programmatisch

Verwandte Themen