package com.bqlab.simplight;
import android.Manifest;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import static android.media.MediaRecorder.VideoSource.CAMERA;
public class MainActivity extends AppCompatActivity {
String string = null;
Button screen = null;
Camera camera = null;
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
string = "flash";
camera = Camera.open();
screen = (Button) findViewById(R.id.StrongScreen);
if (permissionCheck == PackageManager.PERMISSION_DENIED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA);
} else {
Toast.makeText(this, "Camera permission authorized", Toast.LENGTH_SHORT).show();
}
}
protected void onScreenTouched(View v) {
Camera.Parameters param = camera.getParameters();
if (string.equals("flash")) {
param.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.stopPreview();
camera.release();
screen.setBackgroundColor(getResources().getColor(R.color.screenColor));
screen.setText("화면의 빛으로 비추세요.");
string = "screen";
}
else if (string.equals("screen")) {
screen.setBackgroundColor(getResources().getColor(R.color.flashColor));
screen.setText("손전등이 켜져 있습니다.");
param.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(param);
camera.startPreview();
string = "flash";
}
}
}
안드로이드 연습겸 손전등 앱을 만들고 있는데, 손전등 어플에 필요한 플래쉬가 카메라 권한이 필요하다는 것을 알았습니다.
문제는 카메라 권한이 위험권한에 속하기 때문에 특별히 권한 요청을 묻는 코드를 작성해야한다고 하더군요.
카메라를 사용하려고 하니 '앱이 중지되었습니다'라는 문구가 나오길래 위와 같이 권한요청 코드를 넣었더니 또 중지되었습니다.
메니페스트로 허용(uses-permission)은 해놓았고, 로그캣을 아래에 첨부할테니 도와주시면 정말 감사하겠습니다.
--------- beginning of crash
08-16 00:49:18.240 2986-2986/com.bqlab.simplight E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.bqlab.simplight, PID: 2986
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.bqlab.simplight/com.bqlab.simplight.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
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)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference
at android.content.ContextWrapper.checkPermission(ContextWrapper.java:637)
at android.support.v4.content.ContextCompat.checkSelfPermission(ContextCompat.java:432)
at com.bqlab.simplight.MainActivity.<init>(MainActivity.java:22)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
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)
08-16 00:49:24.302 2986-2986/com.bqlab.simplight I/Process: Sending signal. PID: 2986 SIG: 9