Java Camera.open()为什么这行代码会使我的android应用程序崩溃?
我不是一个有经验的程序员。我刚刚学习了一些基本的java,我正在考虑创建一个android应用程序。实际上是一个火炬应用。所以我按照youtube教程写了这段代码,但它不会在我的手机上打开。我有一部小米安卓oreo 8版手机 有人能回答我吗?提前谢谢 这句话让我的应用程序崩溃了Java Camera.open()为什么这行代码会使我的android应用程序崩溃?,java,android,camera,Java,Android,Camera,我不是一个有经验的程序员。我刚刚学习了一些基本的java,我正在考虑创建一个android应用程序。实际上是一个火炬应用。所以我按照youtube教程写了这段代码,但它不会在我的手机上打开。我有一部小米安卓oreo 8版手机 有人能回答我吗?提前谢谢 这句话让我的应用程序崩溃了 camera=camera.open() 它甚至没有在我的手机上打开,只是显示一个白色屏幕,然后应用程序关闭,但它在Android studio模拟器中运行良好 我的密码 SDK版本: android { compile
camera=camera.open()代码>
它甚至没有在我的手机上打开,只是显示一个白色屏幕,然后应用程序关闭,但它在Android studio模拟器中运行良好
我的密码
SDK版本:
android {
compileSdkVersion 28
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
清单xml文件
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-feature android:name="android.hardware.camera"></uses-feature>
<uses-permission android:name="android.permission.FLASHLIGHT"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
从您的targetSDK
(28)和清单权限判断,我有一个强烈的预感,您没有使用运行时权限
请将此添加到您的代码中(基本上是调用摄影机的运行时权限),以代替摄影机打开逻辑:
if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity)
getContext(), Manifest.permission.CAMERA)) {
} else {
ActivityCompat.requestPermissions((Activity) getContext(),
new String[]{Manifest.permission.CAMERA},
42);
}
}
42
只是我选择的一个随机数,应该是权限请求代码
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 42:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_SHORT).show();
camera = Camera.open();
parameters = camera.getParameters();
isFlash = true;
} else {
// failure logic
}
}
break;
}
}
onRequestPermissionsResult
是一个调用的函数,您应该在其中处理权限授予/拒绝逻辑从您的targetSDK
(28)和清单权限判断,我强烈预感到您没有使用运行时权限
请将此添加到您的代码中(基本上是调用摄影机的运行时权限),以代替摄影机打开逻辑:
if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity)
getContext(), Manifest.permission.CAMERA)) {
} else {
ActivityCompat.requestPermissions((Activity) getContext(),
new String[]{Manifest.permission.CAMERA},
42);
}
}
42
只是我选择的一个随机数,应该是权限请求代码
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 42:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_SHORT).show();
camera = Camera.open();
parameters = camera.getParameters();
isFlash = true;
} else {
// failure logic
}
}
break;
}
}
onRequestPermissionsResult
是调用的函数,您应该在其中处理权限授予/拒绝逻辑检查LogCat以了解崩溃的原因:。最有可能的情况是,您没有摄影机
运行时权限。请检查LogCat以了解崩溃的原因:。很可能,您没有CAMERA
运行时权限。