0

Ich habe eine Flashlight-App erstellt. Es funktioniert für alle Geräte außer Marshmallow. Auch nachdem ich das um Erlaubnis gefragt habe. Ich habe das Gefühl, dass etwas falsch ist, wenn ich um Erlaubnis für meinen Code ersuche. Siehst du irgendwelche Probleme?Erlaubnis für Marshmallow beim Erstellen einer Taschenlampe App anfordern

package com.funny.flashlight; 

import android.Manifest; 
import android.content.DialogInterface; 
import android.content.pm.PackageManager; 
import android.hardware.Camera; 
import android.support.annotation.NonNull; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageButton; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity 
{ 
    private static final int REQUEST_CAMERA = 0; 
    ImageButton imageButton; 
    Camera camera; 
    Camera.Parameters parameters; 
    boolean isflash=false; 
    boolean isOn=false; 

    public void showCamera(View view) 
    { 
       if(checkSelfPermission(Manifest.permission.CAMERA)==PackageManager.PERMISSION_GRANTED) 
     { 
      showCameraPreview(); 
     } 
     else 
     { 
      if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) 
      { 
       Toast.makeText(this, "Camera Permission is needed to show Camera Preview",Toast.LENGTH_SHORT).show(); 
      } 
      requestPermissions(new String[]{Manifest.permission.CAMERA},REQUEST_CAMERA); 
     } 

    } 


    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     if (requestCode==REQUEST_CAMERA) 
     { 
      if (grantResults[0]==PackageManager.PERMISSION_GRANTED) 
      { 
       showCameraPreview(); 
      } 
      else { 
       Toast.makeText(this, "Permission was not Granted", Toast.LENGTH_SHORT).show(); 
      } 
     } 
     else { 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     imageButton = (ImageButton) findViewById(R.id.imageButton); 
     if (getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) 
     { 
      camera = Camera.open(); 
      parameters = camera.getParameters(); 
      isflash = true; 

     } 


    imageButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) 
      { 
       if (isflash) 
       { 
        if (isOn) 
        { 
         imageButton.setImageResource(R.drawable.off); 
         parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
         camera.setParameters(parameters); 
         camera.stopPreview(); 
         isOn = false; 
        } 
        else 
        { 

         imageButton.setImageResource(R.drawable.on); 
         parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
         camera.setParameters(parameters); 
         camera.startPreview(); 
         isOn = true; 
        } 

       } 
       else 
       { 
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
        builder.setTitle("Error"); 
        builder.setMessage("FlashLight is not Available on this device"); 
        builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.dismiss(); 
          finish(); 
         } 
        }); 
        AlertDialog alertDialog = builder.create(); 
        alertDialog.show(); 

       } 
      } 
     }); 
    } 

    @Override 
    protected void onStop() 
    { 
     super.onStop(); 
     if(camera!=null) 
     { 
      camera.release(); 
      camera=null; 
     } 
    } 

} 
+0

Was tut "nicht arbeiten" mit sich bringen? Absturz? Wenn ja, poste bitte die Ausnahme stacktrace. –

Antwort

0

Je nachdem, was Sie versuchen, nach diesem Format für die Überprüfung/Anfordern von Berechtigungen Ich würde zu tun, empfehlen:

private int CAMERA_PERM = 0; 


    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERM); 
    } 

dann die Antwort für die Beschaffung von:

@Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case CAMERA_PERM: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        //Permission Granted 
       } else { 
        //Permission Denied 
       } 
       return; 
      } 
     } 
    } 
Verwandte Themen