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();// 指定开启系统相机的Actionintent.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'}