Cuando lo uses, solo cópialo y podrás escribir los comentarios necesarios. Bienvenido a la guía de los dioses. Algunos códigos se juntan, y luego mi propio resumen.
Primero configure:
Configurarlo en el archivo de manifiesto
< proveedor android : name = "android.support.v4.content.FileProvider" android : autoridades = "(你 的 包 名) .fileprovider" android : exported = "false" android : grantUriPermissions = "true" > < metadatos android : name = "android.support.FILE_PROVIDER_PATHS" android : resource = "@ xml / file_paths" > </ meta-data > </ provider >
Cree una carpeta xml debajo del archivo rec y cree un archivo xml dentro
< rutas xmlns: android = "http://schemas.android.com/apk/res/android" > < nombre -ruta-externa = "archivos_externos" ruta = "." /> </ rutas >El código java es el siguiente:
/ ** * usando la cámara * / Private void useCamera () { Intent Intent = nuevo nuevo Intent (MediaStore. ACTION_IMAGE_CAPTURE ); Archivo = nuevo archivo nuevo (Environment. GetExternalStorageDirectory () .getAbsolutePath () + "/ Test /" + el Sistema. Con currentTimeMillis ( ) + ".jpg" ); file .getParentFile (). mkdirs (); // Cambie Uri com.xykj.customview.fileprovider para que sea coherente con xml Uri uri = FileProvider. getUriForFile ( esto , "com.example.administrator.myapplication.fileprovider" , archivo ); // 添加 权限 intent.addFlags (Intent. FLAG_GRANT_READ_URI_PERMISSION ); intent.putExtra (MediaStore. EXTRA_OUTPUT , uri); startActivityForResult (intención, REQUEST_CAMERA ); } public void applyWritePermission () { String [] permisos = {Manifest.permission. WRITE_EXTERNAL_STORAGE }; if (Build.VERSION. SDK_INT > = 23 ) { int check = ContextCompat. checkSelfPermission ( this , permissions [ 0 ]); // Si el permiso ha sido otorgado GRANTED --- autorizado DINIED --- rechazado if (check == PackageManager. PERMISSION_GRANTED ) { // call camera useCamera (); } else { requestPermissions ( new String [ ] {Manifest.permission. WRITE_EXTERNAL_STORAGE }, 1 ); } } else { useCamera (); } } @Override public void onRequestPermissionsResult ( int requestCode, @NonNull String [] permisos, @NonNull int [] grantResults) { súper .onRequestPermissionsResult (requestCode, permisos, grantResults); si (requestCode == 1 && grantResults [ 0 ] == PackageManager. PERMISSION_GRANTED ) { useCamera (); } demás { // No obtuve el permiso, no volví a solicitar ni cerré la aplicación Toast. MakeText ( esto , "permiso de almacenamiento requerido" , Toast. LENGTH_SHORT ) .show (); } } @Override protegido vacío onActivityResult ( int requestCode, int resultCode, Intent data) { super .onActivityResult (requestCode, resultCode, datos); if (requestCode == 1 && resultCode == RESULT_OK ) { // Log.e ("TAG", "---------" + FileProvider.getUriForFile (this, "com.xykj.customview.fileprovider" , archivo)); // 在 手机 相册 中 显示 刚 拍摄 的 图片 if (Build.VERSION. SDK_INT > = Build.VERSION_CODES. N ) { Intent mediaScanIntent = new Intent (Intent. ACTION_MEDIA_SCANNER_SCAN_FILE ); Uri contentUri = Uri. FromFile ( file ); String path = contentUri.getPath (); Log. E ( "TAGSSSSSSSSS" , contentUri.toString ()); // Ruta del archivo String absolutePath = file .getAbsolutePath (); // El nombre del archivo String parent = file .getName (); Log. E ( "TAGQQQQQQQQQ" , parent + "===" + absolutePath); mediaScanIntent.setData (contentUri); sendBroadcast (mediaScanIntent); // Establecer imagen picture .setImageBitmap (BitmapFactory. decodeFile ( file .getAbsolutePath ())); } else { Archivo photoFile = new File ( photoPath ); if (photoFile.exists ()) { // Cargue la imagen en el mapa de bits a través de la dirección de imagen Bitmap bm . = BitmapFactory decodeFile (photoFile.getAbsolutePath ()); // Mostrar la foto capturada en la interfaz // esta es la ruta devuelta // results.confirm (pathsa); . Tostada Maketext (MainActivity. este , "Pass" , Tostada.LENGTH_LONG ) .show (); } demás { tostadas.Maketext(MainActivity. Esto , "El archivo de imagen no existe" , pan tostado. LENGTH_LONG ) .show (); } } } } / ** * El camino de fotos * / público void jsPath () { // Obtener el estado montado en la tarjeta SD String = Estado del entorno.getExternalStorageState(); IF (. state.equals (Environment MEDIA_MOUNTED )) { // guardar la ruta de la imagen se proporciona PhotoPath = SAVED_IMAGE_PATH + "/" + System. CurrentTimeMillis () + ".png" ; File imageDir = new File ( photoPath ); if (! ImageDir.exists ()) { try { // Generar un nuevo archivo basado en una dirección de archivo Guardar la foto imageDir.createNewFile (); } catch (IOException e) { e.printStackTrace (); } } takePhotoByMethod1 (); } demás { . tostadas Maketext . (MainActivity este, "La tarjeta SD no está insertada" , Brindis. LENGTH_SHORT ) .show (); } } private void takePhotoByMethod1 () { // Crea una instancia de la intent, apunta a la cámara Intent intent = new Intent (MediaStore. ACTION_IMAGE_CAPTURE ); // Crea una instancia de acuerdo con la ruta Archivo de imagen Archivo photoFile = new File ( photoPath ); // Establezca la imagen que se guardará en el archivo después de tomar una foto intent.putExtra (MediaStore. EXTRA_OUTPUT , Uri. FromFile (photoFile)); // Inicie la actividad fotográfica y obtenga los datos devueltos startActivityForResult (intent, REQUEST_CAMERA ); }
El anterior es el código de ejecución necesario.
abajo:
switch (v.getId()) { case R.id.take_photo: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ applyWritePermission(); }else{ jsPath(); } break;
}
点击这个按钮就可以实现, 新手第一 次写 请多多指教。