2017-10-09 2 views
-1

J'utilise API 26. Je veux ouvrir la caméra après qu'un utilisateur clique sur un bouton. J'ai le bouton et son identifiant est CAMERA. J'appelle la méthode openCamera quand un bouton est tapé.Ouvrir la caméra en cliquant sur un bouton, l'application se bloque

public void openCamera(View v){ 

    if(v.getId() == R.id.CAMERA) { 

     Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     startActivityForResult(intent,0); 
    } 
} 

Cette méthode est dans la classe MainActivity, mais le bouton est lui-même dans sa propre classe appelée « Créer »

// Create class 
public class Create extends Activity { 

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

    } 
} 

Je ne vois pas ce que je fais mal puisque la méthode devrait fonctionner et est lié au bouton.

Exception Stack Trace:

5906-5906/com.gif.gif E/AndroidRuntime: FATAL EXCEPTION: main Process: com.gif.gif, PID: 5906 

java.lang.IllegalStateException: Could not execute method for android:onClick 
    at android.view.View$DeclaredOnClickListener.onClick(View.java:5336) 
    at android.view.View.performClick(View.java:6256) 
    . 
    . 
    . 
    .  
    Caused by: java.lang.SecurityException: Permission Denial: starting Intent { 
     act=android.media.action.IMAGE_CAPTURE cmp=com.android.camera2/com.android.camera.CaptureActivity 
    } from ProcessRecord{5ce0ad0 5906:com.gif.gif/u0a84} (pid=5906, uid=10084) 
    with revoked permission android.permission.CAMERA 
    at android.os.Parcel.readException(Parcel.java:1942) 
    at android.os.Parcel.readException(Parcel.java:1888) 
    at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:4365) 
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1610) 
    at android.app.Activity.startActivityForResult(Activity.java:4472) 

MainActivity.java

package com.gif.gif; 
import android.view.View; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.content.Intent; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.v("gif", "onCreate triggered"); 
    } 

    public void onButtonClick(View v) { 

     if(v.getId() == R.id.CREATE) { 

      Intent i = new Intent(MainActivity.this,create.class); 
      startActivity(i); 
     } 

    } 

    public void openCamera(View v) { 

     if(v.getId() == R.id.CAMERA) { 
      Intent intent = new 
      Intent("android.media.action.IMAGE_CAPTURE"); 
      startActivityForResult(intent,0); 
     } 

    } 

    protected void onStart() { 
     super.onStart(); 
     Log.v("gif", "onStart triggered"); 
    } 

    protected void onResume(){ 
     super.onResume(); 
     Log.v("gif", "onResume triggered"); 
    } 

    protected void onPause(){ 
     super.onPause(); 
     Log.v("gif", "onPause triggered"); 
    } 

    protected void onStop(){ 
     super.onStop(); 
     Log.v("gif", "onStop triggered"); 
    } 

    protected void onDestroy(){ 
     super.onDestroy(); 
     Log.v("gif", "onDestory triggered"); 
    } 

} 

Mon code XML est à https://pastebin.com/M5BC8K9V

+0

aussi l'erreur que je reçois est « APP est arrêté » quand je le lance dans le téléphone virtuel –

+0

Veuillez ajouter la trace de pile d'exception. Quelle API utilisez-vous? Avez-vous l'autorisation de l'appareil photo? – rupinderjeet

+0

Ok Voici le XML pour l'autorisation de la caméra –

Répondre

0

de votre journal d'exception, il est clair que vous » re ayant un problème d'autorisation.

J'espère que vous avez la permission de la caméra déclarée dans votre fichier Manifest Android, comme celui-ci (en dehors de la balise d'application):

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

Vous ne demandez pas la permission utilisateur de l'appareil photo. Camera Permission est une permission dangereuse, et par conséquent, il devrait être demandé à l'utilisateur de l'autoriser. Je ne l'ai pas compris votre code, mais je crois que voici comment votre « Créer une classe » ressemblerait à ceci:

public class Create extends AppCompatActivity { 

    public static final String TAG = Create.class.getSimpleName(); 
    public static final int RC_CAMERA_PERMISSION = 1000; 

    @Override public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     // this layout has your CameraButton, right? 
     setContentView(R.layout.layout_create); 
    } 

    public void openCamera (View v) { 

     if(v.getId() == R.id.CAMERA) { 

      openCamera(); 
     } 
    } 

    private void openCamera() { 

     // check for camera permission 
     int permissionCheck = ContextCompat.checkSelfPermission(Create.this, Manifest.permission.Camera); 

     // do we have camera permission? 
     if (permissionCheck == PackageManager.PERMISSION_GRANTED) { 

      // we have camera permission, open System camera 
      Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
      startActivityForResult(intent, 0); 
     } 
     else { 

      // we don't have it, request camera permission from system 
      ActivityCompat.requestPermissions(thisActivity, 
       new String[]{Manifest.permission.CAMERA}, 
       RC_CAMERA_PERMISSION); 
     } 

    } 

    // result will come in this method, check if the permission was accepted? 
    @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){ 

     // check request code for permissions 
     if(requestCode == RC_CAMERA_PERMISSION) { 

      if(grantResults.length > 0 && 
        grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // camera permission was granted 
       openCamera(); 

      } else { 

       Log.d(TAG, "permissions not accepted"); 
      } 

     } 
    } 
} 
+0

MERCI BEAUCOUP –