Android se adapta a 8.0.6.0 para encender el teléfono móvil para tomar fotos y obtener la ruta de la foto

 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;
}

点击这个按钮就可以实现, 新手第一 次写 请多多指教。

Supongo que te gusta

Origin blog.csdn.net/q992767879/article/details/79654733
Recomendado
Clasificación