我需要你的帮助。我按照说明在Android Developer上的应用程序内使用相机,但我的应用程序崩溃了。我什至无法打开相机。
这是我的代码(方法“ goToCamera” 由我的activity.xml中的 android:name =“ onClick” 调用,因此它接受了一个View对象):
public class PostActivity extends AppCompatActivity {
static final int REQUEST_IMAGE_CAPTURE = 123;
public static final int REQUEST_TAKE_PHOTO = 1;
ImageView mImageView;
String mCurrentPhotoPath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_post);
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
}
protected void goToHome(View view) {
finish();
}
protected void goToCamera(View v) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
}
}
我已经将此添加到清单中了
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
我已经尝试使用它:
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
但是它不起作用。该应用程序继续崩溃。
非常感谢您。
答案 0 :(得分:0)
您需要这样的许可。
protected void goToCamera(View v) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION);
} else {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
}
}
在活动中,您需要重写onRequestPermissionsResult方法以进行权限回调。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[]
permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
goToCamera(null);
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
}
答案 1 :(得分:0)
您的意图是正确的,打开相机不需要任何许可。
根据您的日志,这是onClick函数的问题。
将goToCamera更改为公共方法。
使用您的android:onClick xml中的名称检查goToCamera函数的名称