1、申请权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" />
java
private static final String[] authBaseArr = {//申请类型
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
private static final int authBaseRequestCode = 1;
private boolean hasBasePhoneAuth() {
PackageManager pm = getPackageManager();
for (String auth : authBaseArr) {
if (pm.checkPermission(auth, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
private void initNavi() {
// 申请权限
if (android.os.Build.VERSION.SDK_INT >= 23) {
if (!hasBasePhoneAuth()) {
this.requestPermissions(authBaseArr, authBaseRequestCode);
return;
}
}
}
2、开始起调相机
private static final int REQUEST_PERMISSION_CODE = 101;
private String SAVE_PIC_PATH = Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)
? Environment.getExternalStorageDirectory().getAbsolutePath() : "/mnt/sdcard";//
private String SAVE_REAL_PATH = SAVE_PIC_PATH + "/good/savePic";//保存的确
private String ends = "";
Intent intent = new Intent();
// 指定开启系统相机的Action
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//图片
intent.addCategory(Intent.CATEGORY_DEFAULT);//图片
// intent.setAction("android.media.action.VIDEO_CAPTURE");//视频
// intent.addCategory("android.intent.category.DEFAULT");//视频
// 根据文件地址创建文件
String subForder = SAVE_REAL_PATH;
File foder = new File(subForder);
if (!foder.exists()) foder.mkdirs();
File file = new File(subForder, System.currentTimeMillis() + ".png");//图片
// File file = new File(subForder, System.currentTimeMillis() + ".mp4");//视频
ends = file.getPath();
if (file.exists()) {
file.delete();
}
// 把文件地址转换成Uri格式
Uri uri = Uri.fromFile(file);
// 设置系统相机拍摄照片完成后图片文件的存放地址
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_PERMISSION_CODE);
3、保存图片
调用EXTRA_OUTPUT时,已经保存了图片到文件夹——只是相册不可见
如需相册可见,自定义保存即可
public void saveBitmapFile(Bitmap bitmap) {
File file = new File(ends);//将要保存图片的路径
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
bos.flush();
bos.close();
// FileOutputStream fos = new FileOutputStream(file);
// bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
// fos.flush();
// fos.close();
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(file);
intent.setData(uri);
this.sendBroadcast(intent);
} catch (IOException e) {
e.printStackTrace();
}
}
录音报错:startRecording() called on an uninitialized AudioRecord.
解决方法如下
录音权限
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
把apk重新签名为系统应用。
(1)在AndroidManifest.xml文件的application标签中,增加配置:android:sharedUserId="android.uid.system"
packagingOptions{
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'AndroidManifest.xml'
// exclude 'META-INF/LICENSE.txt'
// exclude 'META-INF/NOTICE.txt'
}
本文详细介绍了在Android应用中如何申请必要的权限,包括写入外部存储和使用摄像头的权限,并提供了调用系统相机拍照并保存图片的具体实现代码。
2334

被折叠的 条评论
为什么被折叠?



