我尝试从手机上访问相机,它工作了3次,在屏幕变黑后(下面打印)在API 24中,我在带有API 22的手机上测试它并且它工作了,API 24没有,有谁知道如何解决它?
public class fotos extends AppCompatActivity {
static final int REQUEST_IMAGE_CAPTURE = 1;
private ImageView ivPhoto;
private Button btTakeaaPhoto;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fotos);
ivPhoto = findViewById(R.id.ivPhoto);
btTakeaaPhoto = findViewById(R.id.btTakeaPhoto);;
btTakeaaPhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//config.showProgress(true, progressBar, context);
dispatchTakePictureIntent();
}
});
}
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
ivPhoto.setImageBitmap(imageBitmap);
}
}
}
屏幕保持这样几秒钟,然后相机关闭并返回活动。
编辑:应用程序不会停止工作,它只是打开相机屏幕,变黑,几秒后关闭,正如我已经说过的那样
清单:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus" />
问题不在于权限,已经给出了,我已经查看了配置以确认。那不是问题。
答案 0 :(得分:1)
您可能想要检查项目中的多个部分。
1。你的AndroidManifest.xml
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus" />
检查您是否已添加此类权限请求。
2。在您的源代码中,来自Android 6的权限请求。您应该拥有以下代码。
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
requestCameraPermission();
return;
}
表示requestCameraPermission()函数
if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
new ConfirmationDialog().show(getChildFragmentManager(), FRAGMENT_DIALOG);
} else {
requestPermissions(new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
}
您应该要求该用户授予权限并实现回调函数
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == REQUEST_CAMERA_PERMISSION) {
if (grantResults.length != 1 || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
ErrorDialog.newInstance(getString(R.string.request_permission))
.show(getChildFragmentManager(), FRAGMENT_DIALOG);
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
授予权限后,请打开相机并配置正确的参数。你可以在这里检查回购https://github.com/wangchauyan/camera_sample.git,我用它来创建我自己的相机应用程序。 希望这会有所帮助。
答案 1 :(得分:0)
我做到了,你知道怎么做吗?我重启了手机,你知道我是怎么发现的吗?我尝试使用相机的WhastApp功能,并向我展示了那时无法访问相机的消息,这对我来说是重启,所以在那之后,它神奇地起作用了。 WWWTTFFFF