728x90
반응형
한번에 요청하려는데 계속 하나만 요청되고 연달아 동작이 잘 안돼서 고민했다가 야매(?)로 해결한 거같다.. 코드만 필요하시면 가져가세염
전체코드공유>
package com.example.nailmanna;
import android.Manifest;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.TextureView;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import com.bumptech.glide.Glide;
public class CamActivity extends AppCompatActivity {
private TextureView mCameraTextureView;
private Preview mPreview;
private Button mNormalAngleButton;
private Button mWideAngleButton;
private Button mCameraCaptureButton;
private Button mCameraDirectionButton;
Dialog dialog01;
ImageView gaid,left;
Activity mainActivity = this;
private static final String TAG = "MAINACTIVITY";
static final int REQUEST_CAMERA = 1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_cam);
//버튼 갖고오기
mNormalAngleButton = (Button) findViewById(R.id.normal);
mWideAngleButton = (Button) findViewById(R.id.wide);
mCameraCaptureButton = (Button) findViewById(R.id.capture);
mCameraDirectionButton = (Button) findViewById(R.id.change);
mCameraTextureView = (TextureView) findViewById(R.id.cameraTextureView);
mPreview = new Preview(this, mCameraTextureView, mNormalAngleButton, mWideAngleButton, mCameraCaptureButton, mCameraDirectionButton);
//가이드 수정
gaid = findViewById(R.id.gaid);
left = findViewById(R.id.left);
if(commonData.getInstance().GetLeftHand()==1){
gaid.setVisibility(View.GONE);
left.setVisibility(View.VISIBLE);
}
mCameraCaptureButton.setClickable(true);
//뒤로가기 버튼 클릭 시 홈화면 전환
Button back = (Button) findViewById(R.id.back);
back.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent intent = new Intent( getApplicationContext(), DirectionActivity.class );
startActivity(intent);
}
});
// storage permission
//버전 체크
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// //파일 권한 체크
// if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
// || checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// Toast.makeText(this, "외부 저장소 사용을 위해 읽기/쓰기 필요", Toast.LENGTH_SHORT).show();
// }
// requestPermissions(new String[]
// {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}, 2);
// }
// }
dialog01 = new Dialog(CamActivity.this);
dialog01.setContentView(R.layout.activity_custom_dialog);
//다이얼로그 밖의 화면은 흐리게 만들어줌
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;
layoutParams.dimAmount = 0.8f;
getWindow().setAttributes(layoutParams);
showDialog01();
}
public void showDialog01(){
dialog01.show();
dialog01.findViewById(R.id.btn_shutdown).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog01.dismiss();
}
});
}
@Override
public void onRequestPermissionsResult ( int requestCode, String[] permissions,
int[] grantResults){
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//파일 권한 체크
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
|| checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(this, "외부 저장소 사용을 위해 읽기/쓰기 필요", Toast.LENGTH_SHORT).show();
}
requestPermissions(new String[]
{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}, 2);
}
}
switch (requestCode) {
case REQUEST_CAMERA:
for (int i = 0; i < permissions.length; i++) {
String permission = permissions[i];
int grantResult = grantResults[i];
if (permission.equals(Manifest.permission.CAMERA)) {
if (grantResult == PackageManager.PERMISSION_GRANTED) {
mCameraTextureView = (TextureView) findViewById(R.id.cameraTextureView);
mPreview = new Preview(this, mCameraTextureView, mNormalAngleButton, mWideAngleButton, mCameraCaptureButton, mCameraDirectionButton);
mPreview.openCamera();
Log.d(TAG, "mPreview set");
} else {
Toast.makeText(this, "Should have camera permission to run", Toast.LENGTH_LONG).show();
finish();
}
}
}
break;
}
}
//전면으로 전환
@Override
protected void onResume () {
super.onResume();
mPreview.onResume();
}
//후면으로 전환
@Override
protected void onPause () {
super.onPause();
mPreview.onPause();
}
}
퍼미션 허용 코드
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;
layoutParams.dimAmount = 0.8f;
getWindow().setAttributes(layoutParams);
showDialog01();
}
public void showDialog01(){
dialog01.show();
dialog01.findViewById(R.id.btn_shutdown).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog01.dismiss();
}
});
}
@Override
public void onRequestPermissionsResult ( int requestCode, String[] permissions,
int[] grantResults){
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//파일 권한 체크
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
|| checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(this, "외부 저장소 사용을 위해 읽기/쓰기 필요", Toast.LENGTH_SHORT).show();
}
requestPermissions(new String[]
{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}, 2);
}
}
switch (requestCode) {
case REQUEST_CAMERA:
for (int i = 0; i < permissions.length; i++) {
String permission = permissions[i];
int grantResult = grantResults[i];
if (permission.equals(Manifest.permission.CAMERA)) {
if (grantResult == PackageManager.PERMISSION_GRANTED) {
mCameraTextureView = (TextureView) findViewById(R.id.cameraTextureView);
mPreview = new Preview(this, mCameraTextureView, mNormalAngleButton, mWideAngleButton, mCameraCaptureButton, mCameraDirectionButton);
mPreview.openCamera();
Log.d(TAG, "mPreview set");
} else {
Toast.makeText(this, "Should have camera permission to run", Toast.LENGTH_LONG).show();
finish();
}
}
}
break;
}
}
말 안해도 다 아시겠지만 위에 WindowManager.LayoutParams layoutParams는 onCreate안의 함수이다.
728x90
반응형
'웹 & 앱 꿀 TIP' 카테고리의 다른 글
[android] 싱글톤에 대하여 총정리_ 이것만 보면 나는 싱글톤 마스터 (0) | 2022.06.20 |
---|---|
[android] 카메라 띄우고 찍어서 저장 및 보이기 까지 (0) | 2022.06.20 |
[android] editText에서 입력한 값 가지고 오기 (0) | 2022.06.16 |
[android] cardview 안될 때 (0) | 2022.06.16 |
[android] 애뮬레이터와 단말의 에러가 차이나는 이유 (야매) (0) | 2022.06.13 |