Android Java请求相机权限:缺失导入,求完整代码及依赖说明
完整Android Java相机权限请求实现
1. 权限声明(AndroidManifest.xml)
在AndroidManifest.xml的<manifest>标签内、<application>标签外添加相机权限声明:
<uses-permission android:name="android.permission.CAMERA" /> <!-- 若需拍摄并保存图片,可额外添加以下权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" /> <uses-feature android:name="android.hardware.camera" android:required="false" />
2. 完整Activity代码(含所有导入)
以下是包含相机权限请求逻辑的MainActivity.java完整代码,所有导入均基于AndroidX库:
import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private static final int CAMERA_PERMISSION_REQUEST_CODE = 100; private static final int CAMERA_REQUEST_CODE = 101; private Button openCameraBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); openCameraBtn = findViewById(R.id.open_camera_btn); openCameraBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { checkCameraPermission(); } }); } // 检查相机权限状态 private void checkCameraPermission() { if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { // 未授权,发起权限请求 ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.CAMERA}, CAMERA_PERMISSION_REQUEST_CODE); } else { // 已授权,直接打开相机 openCamera(); } } // 打开系统相机 private void openCamera() { Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (cameraIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE); } else { Toast.makeText(this, "未找到可用相机应用", Toast.LENGTH_SHORT).show(); } } // 权限请求结果回调 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 用户授权,打开相机 openCamera(); } else { // 用户拒绝权限,提示引导开启 Toast.makeText(this, "相机权限被拒绝,无法使用相机功能", Toast.LENGTH_SHORT).show(); } } } // 相机拍摄结果回调(可选,若需处理拍摄的图片) @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK) { // 此处可处理拍摄得到的图片,例如获取缩略图 // Bitmap photo = (Bitmap) data.getExtras().get("data"); Toast.makeText(this, "拍摄成功", Toast.LENGTH_SHORT).show(); } } }
3. 布局文件(activity_main.xml)
需要在res/layout/activity_main.xml中添加触发按钮:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <Button android:id="@+id/open_camera_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="打开相机" /> </LinearLayout>
4. 依赖说明
确保项目已引入AndroidX核心库,若未添加,在app/build.gradle的dependencies块中添加:
dependencies { // AndroidX核心依赖 implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.core:core-ktx:1.12.0' }
添加后点击Sync Now同步项目即可。
关键逻辑说明
- 权限检查:通过
ContextCompat.checkSelfPermission判断是否已获取相机权限 - 权限请求:未授权时调用
ActivityCompat.requestPermissions发起请求 - 结果处理:在
onRequestPermissionsResult中处理用户授权/拒绝的逻辑 - 相机调用:授权通过后,使用系统相机Intent打开相机应用
内容的提问来源于stack exchange,提问作者Mich
相关产品推荐
相关产品推荐

