O Android se adapta a 8.0.6.0 para ligar o celular para tirar fotos e obter o caminho da foto

 Ao usá-lo, basta copiá-lo e você pode escrever as observações necessárias. Bem-vindo à orientação dos deuses. Alguns códigos são reunidos e, em seguida, meu próprio resumo.

Primeiro configure:

Configure-o no arquivo de manifesto

< provider
 android : name = "android.support.v4.content.FileProvider"
 android : authority = "(你 的 包 名) .fileprovider" android : export
 = "false"
 android : grantUriPermissions = "true" > 
    < meta-dados
 android : name = "android.support.FILE_PROVIDER_PATHS"
 android : resource = "@ xml / file_paths" > </ meta-data > 
</ provider >                                

Crie uma pasta xml sob o arquivo rec e crie um arquivo xml dentro

< Caminhos xmlns: android = "http://schemas.android.com/apk/res/android" > 
    < -caminho externo name = "external_files" path = "" /> 
</ caminhos >
O código java é o seguinte:
/ **
      * using the camera
      * /
 Private void useCamera () {
        the Intent Intent = new the Intent (MediaStore. ACTION_IMAGE_CAPTURE );
         File = new new File (Environment. GetExternalStorageDirectory () .getAbsolutePath ()
                + "/ Test /" + the System. Com currentTimeMillis ( ) + ".jpg" );
         file .getParentFile (). mkdirs (); // Alterar Uri com.xykj.customview.fileprovider para ser consistente com xml
 Uri uri = FileProvider. getUriForFile ( isto ,    

                "com.example.administrator.myapplication.fileprovider" , arquivo );
        // 添加 权限
        intent.addFlags (Intent. FLAG_GRANT_READ_URI_PERMISSION ); 

        intent.putExtra (MediaStore. EXTRA_OUTPUT , uri); 
        startActivityForResult (intenção, REQUEST_CAMERA ); 
    } public void applyWritePermission () {
        String [] permissions = {Manifest.permission. WRITE_EXTERNAL_STORAGE }; if (Build.VERSION. SDK_INT > = 23 ) {
             int check = ContextCompat. checkSelfPermission (
    


        this , permissions [ 0 ]);
             // Se a permissão foi concedida GRANTED --- autorizada DINIED --- rejeitada
 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 [] permissões,
                                            @NonNull int [] grantResults) {
         super- .onRequestPermissionsResult (requestCode, permissões, grantResults);
         se (requestCode == 1 && grantResults [ 0 ] == PackageManager. PERMISSION_GRANTED ) { 
            useCamera (); 
        } else {
             // Não obteve permissão, solicitou novamente ou fechou o aplicativo
             Toast. MakeText ( this , "storage permission required" , Toast. LENGTH_SHORT ) .show (); 
        } 
    } @Override

        protegido void onActivityResult ( int requestCode, int resultCode, Intent data) {
         super .onActivityResult (requestCode, resultCode, data);
        if (requestCode == 1 && resultCode == RESULT_OK ) {
 // Log.e ("TAG", "---------" + FileProvider.getUriForFile (this, "com.xykj.customview.fileprovider" , Arquivo));
            // 在 手机 相册 中 显示 刚 拍摄 的 图片
if (Build.VERSION. SDK_INT > = Build.VERSION_CODES. N ) {
                Intent mediaScanIntent = new Intent (Intent. ACTION_MEDIA_SCANNER_SCAN_FILE             );
                Uri contentUri = Uri. FromFile ( arquivo ); 
                String path = contentUri.getPath (); 
                Log. E ( "TAGSSSSSSSSS" , contentUri.toString ());
                 // Caminho do arquivo
                 String absolutePath = file .getAbsolutePath ();
                 // O nome do
 arquivo                 String pai = arquivo .getName (); 
                Log. E ( "TAGQQQQQQQQQ" , pai + "===" + absolutePath); 
                mediaScanIntent.setData (contentUri); 
                sendBroadcast (mediaScanIntent); // Definir imagem

                                imagem .setImageBitmap (BitmapFactory. decodeFile ( arquivo .getAbsolutePath ()));
            } else {
                Arquivo photoFile = new File ( photoPath );
                 if (photoFile.exists ()) {
                     // Carregar a imagem no bitmap através do endereço da imagem
                     Bitmap bm = BitmapFactory. DecodeFile (photoFile.getAbsolutePath ());
                     // Exibir a foto capturada na interface
                     // Este é o caminho retornado
 // results.confirm (pathsa);
                     Toast. MakeText (MainActivity. This , "Pass" , Torrada.LENGTH_LONG ) .show ();
                } else {
                    Toast.MakeText(MainActivity. This , "O arquivo de imagem não existe" , Toast. LENGTH_LONG ) .show ();
                }
            }
        }
    } / **
      * O caminho da foto
      * /
 public void jsPath () {
         // Obter estado montado no cartão SD
 String = Environment state.getExternalStorageState();
         IF (. state.equals (Environment MEDIA_MOUNTED )) { // salvar o caminho da imagem é fornecido
 pelo PhotoPath = SAVED_IMAGE_PATH

                

                        + "/" + System. CurrentTimeMillis () + ".png" ; 

            Arquivo imageDir = new File ( photoPath );
             if (! ImageDir.exists ()) {
                 try {
                     // Gerar um novo arquivo com base em um endereço de arquivo Salve a foto
                     imageDir.createNewFile (); 
                } catch (IOException e) { 
                    e.printStackTrace (); 
                } 
            } 
            takePhotoByMethod1 (); 
        } else { 
            Toast. MakeText (MainActivity. This, "O cartão SD não está inserido" , Toast. LENGTH_SHORT ) .show (); 
        } 
    } private void takePhotoByMethod1 () {
         // Instancie o intent, aponte para a câmera
 Intent intent = new Intent (MediaStore. ACTION_IMAGE_CAPTURE );
         // Instancie de acordo com o caminho Arquivo de imagem
 Arquivo photoFile = new File ( photoPath );
         // Definir a imagem a ser salva no arquivo depois de tirar uma foto
 intent.putExtra (MediaStore. EXTRA_OUTPUT , Uri. FromFile (photoFile));
         // Iniciar a atividade da foto e obter os dados de retorno
 startActivityForResult (intent, REQUEST_CAMERA ); 
    }
                                    
O código acima é o código de execução necessário.

abaixo:

switch (v.getId()) {
    case R.id.take_photo:
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
            applyWritePermission();
        }else{
            jsPath();
        }
        break;
}

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

Acho que você gosta

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