2017-03-27 1 views
1

내가 오류가취소 권한은

아래이 오류 권한 android.permission.CAMERA을 취소 얻을 android.permission.CAMERA, 난 매니페스트

개인 무효 dispatchTakePictureIntent (INT의 actionCode)에서 사용하기 카메라 권한 {

이었다
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    switch (actionCode) { 
     case ACTION_TAKE_PHOTO_B: 
      File f = null; 

      try { 
       f = setUpPhotoFile(); 
       mCurrentPhotoPath = f.getAbsolutePath(); 
       takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       f = null; 
       mCurrentPhotoPath = null; 
      } 
      break; 

     default: 
      break; 
    } // switch 

    startActivityForResult(takePictureIntent, actionCode); 
} 

과 같이 errro,

E/AndroidRuntime: FATAL EXCEPTION: main 
 
        Process: com.mobile.lunatique.photo, PID: 3590 
 
        java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.android.camera2/com.android.camera.CaptureActivity clip={text/uri-list U:file:///KTP_42342.jpg} (has extras) } from ProcessRecord{2fbbd91 3590:com.mobile.lunatique.photo/u0a60} (pid=3590, uid=10060) with revoked permission android.permission.CAMERA 
 
         at android.os.Parcel.readException(Parcel.java:1599) 
 
         at android.os.Parcel.readException(Parcel.java:1552) 
 
         at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2658) 
 
         at android.app.Instrumentation.execStartActivity(Instrumentation.java:1507) 
 
         at android.app.Activity.startActivityForResult(Activity.java:3917) 
 
         at android.app.Activity.startActivityForResult(Activity.java:3877) 
 
         at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:842) 
 
         at com.mobile.lunatique.photo.MainActivity.dispatchTakePictureIntent(MainActivity.java:254) 
 
         at com.mobile.lunatique.photo.MainActivity.access$000(MainActivity.java:33) 
 
         at com.mobile.lunatique.photo.MainActivity$1.onClick(MainActivity.java:321) 
 
         at android.view.View.performClick(View.java:5198) 
 
         at android.view.View$PerformClick.run(View.java:21147) 
 
         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:5417) 
 
         at java.lang.reflect.Method.invoke(Native Method) 
 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
 
I/Process: Sending signal. PID: 3590 SIG: 9

누구든지 나를 도울 수 있습니까 ??

+0

게시 스택 추적. – azizbekian

+0

너무 많은 관련성이없는 코드, stacktrace 및 설명과 같은 관련 정보가 너무 적습니다. – Vucko

+0

Marshamallow에서 사용자는 런타임에 권한을 활성화해야합니다. 여기를 참조하십시오 : https://developer.android.com/training/permissions/requesting.html 또는 grads에서 targetSdkVersion을 22로 설정할 수 있습니다 (권장하지 않지만 작동합니다) –

답변

0

대신 MainActivity를 확장하려면 AppCompatActivity을 사용해야합니다. 또한 스택 트레이스를 포함 시키십시오.

public class MainActivity extends AppCompatActivity { 

//...... 
} 

아, 죄송합니다. stacktrace를 사용하면 명확하게 주요 문제를 볼 수 있습니다. android.permission.CAMERA. 요청을하려면 권한 확인을 만들어야합니다. 권한 확인을 만들려면 This Example을 확인하십시오.

예 :

1) 활동에 포함합니다.

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

2) 사용자로부터 권한을 요청 확인 :

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

      ActivityCompat.requestPermissions(this, new String[] { android.Manifest.permission.ACCESS_COARSE_LOCATION }, 
               LocationService.MY_PERMISSION_ACCESS_COURSE_LOCATION); 
} 

3) 런타임

if (Build.VERSION.SDK_INT >= 23 && 
      ContextCompat.checkSelfPermission(context, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
      return; 
} 
+0

나는 ur 제안을 사용했지만 여전히 오류가 있습니다 : –

+0

@lunatiquealdebaran Updated ... – GensaGames

2

안녕 lunatique의 알데바란에서 확인

First of all you need to add the following permission in manifest.xml file.

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

Check whether the android device is Marshmallow or not. If its android M or greater version then use the following code to get camera permission dynamically.

Before android M dont want to get dynamic permission.

check if the user grant the permission. If user not granted permission then request the camera permission access.

private static final int MY_CAMERA_REQUEST_CODE = 100; 
if (checkSelfPermission(Manifest.permission.CAMERA) 
        != PackageManager.PERMISSION_GRANTED) { 
      requestPermissions(new String[]{Manifest.permission.CAMERA}, 
         MY_CAMERA_REQUEST_CODE); 
      } 

After requesting the permission alert will display to ask permission contains allow and deny options. After clicking action we can get result of the request with the following method.

@Override 

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 

     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    if (requestCode == MY_CAMERA_REQUEST_CODE) { 

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

       Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show(); 

      } else { 

       Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show(); 

      } 

     } 
0

해지 권한 .... 단순히의이 ...... 당신이 그렇게 다시 권한 매니페스트 파일에 다시 카메라에 대한 쓰기 권한이 필요없이 호출 한 말을

그냥 .... .... 두 줄을 써야합니다 .... 프로그램을 실행하기에 충분합니다. 읽기 및 쓰기 외장 스토리지 프로그램을 실행하기에 충분합니다.