2017-10-09 1 views
-1

API 26을 사용하고 있습니다. 사용자가 버튼을 클릭 한 후 카메라를 열고 싶습니다. 버튼이 있는데 이드는 카메라 야. 버튼을 두드릴 때 openCamera 방법으로 전화를 걸었습니다.버튼을 클릭하여 카메라를 열면 앱이 깨집니다.

public void openCamera(View v){ 

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

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

이 방법은 MainActivity 클래스이지만, 버튼 자체라는 자신의 클래스에있다 "만들기"

// Create class 
public class Create extends Activity { 

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

    } 
} 

나는이 방법은 작업을해야하기 때문에 내가 뭘 잘못 표시되지 오전 버튼에 링크되어 있습니다.

예외 스택 추적 :

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"); 
    } 

} 

내 XML 코드가 사용자의 예외 로그에서 https://pastebin.com/M5BC8K9V

+0

나는 가상 전화 –

+0

에서 실행할 때 또한 나는 점점 오전 오류가 "APP가 중지되었습니다"입니다 예외 스택 추적을 추가하십시오. 어떤 API를 사용하고 있습니까? 카메라 권한이 있습니까? – rupinderjeet

+0

좋아, 카메라 권한 –

답변

0

에서, 그것은 '당신이 분명하다 권한 문제가 발생했습니다. 당신은 카메라 권한을 사용자에게 요구하지 않습니다

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

:

나는 당신이 (응용 프로그램 태그 이외의)이 같은 안드로이드 매니페스트 파일에 선언 카메라 권한을 가지고있다 바랍니다. 카메라 권한은 위험한 권한이므로 사용자가 허용하도록 요청해야합니다. 난 당신의 코드를 이해하지 않은,하지만 난 다음은 믿는 방법과 같을 것이다 "클래스 만들기"

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

THANK U VERY MUCH –

관련 문제