Android Q写真とアルバム画像の読み込みに適した実現方法


GoogleがAndroid Qバージョンをリリースするのも長い間になりました。ファーウェイのアプリケーション市場ではAndroid Qバージョンに適合するように要求されています。ですから、私たちもAndroid Qに適応したいです。
まず私たちのこの季節に使える新しい特性について説明します。
  • Android Qファイル格納メカニズムは、iOS
  • と同様に、サンドボックスモードに変更された。
  • アプリケーションは、自分のサンドボックスの下のファイルと公共メディアファイルだけにアクセスできます。
    Android Q新版の特効を詳しく知りたいなら、公式文書に行ってもいいです。
    ここでAndroid Qバージョンを記録して写真を撮ってアルバムに保存する機能です。
    権限問題
    Android Qはファイルの読み書き権限を申請する必要がなくなりました。デフォルトでは自分のサンドボックスファイルと公共メディアファイルを読むことができます。アルバムは公共メディアファイルですので、Android Qはダイナミックに権限を申請しなくてもいいです。しかし、Android Q以下のバージョンはアクセス権限を申請しなければなりません。
    写真を撮る
    画像は正常に保存されています
    写真:Android Q以前のバージョンで使用されていたものは、指定されたフォルダに保存されています。撮影が完了したら、アルバムの更新を通知する必要があります。
    写真コード
    
    //       
        File fileDir = new File(Environment.getExternalStorageDirectory(), "Pictures");
        if (!fileDir.exists()) {
          fileDir.mkdir();
        }
    
     //    
        String fileName = "/IMG_" + System.currentTimeMillis() + ".jpg";
        //     
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        Uri uri;
        //  Android N    
        if (Build.VERSION.SDK_INT >= 24) {
          uri = FileProvider.getUriForFile(this, ImagePickerProvider.getFileProviderName(this), new File(mFilePath));
        } else {
        //  Android N    
          uri = Uri.fromFile(new File(mFilePath));
        }
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        //  ,   onActivityResult    
        startActivityForResult(intent, 1111);
    アルバムのコードを更新
    
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + mFilePath)));
    
    
    以上はAndroid Qの前のバージョンで共通の写真コードです。必要なものがあればそのままコピーしてもいいです。
    画像をサンドボックスに保存します。
  • サンドボックスの中の操作ファイルはもう申請権限を必要としません。
  • サンドボックスに新しいフォルダを作成するには、システムで指定されたサブフォルダの中に
  • を新規作成するしかありません。
    Android Qバージョンを使用して、画像を砂箱ファイルに保存します。ライブラリは更新できません。表示できません。
    
    //          
        File PICTURES = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        //    
        mFileName = "IMG_" + System.currentTimeMillis() + ".jpg";
        //    
        mFilePath = PICTURES.getAbsolutePath()+"/"+mFileName;
        //     
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        Uri uri;
        if (Build.VERSION.SDK_INT >= 24) {
          uri = FileProvider.getUriForFile(this, ImagePickerProvider.getFileProviderName(this), new File(mFilePath));
        } else {
          uri = Uri.fromFile(new File(mFilePath));
        }
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        startActivityForResult(intent, 1111);
    
     これはコードを使わずにアルバムライブラリを更新します。更新しても表示できません。😁
    よく比べてみると、この2つは基本的に違いがないです。ファイルの保存経路だけが違っています。Android Qの新バージョンでは記憶に変化があります。
    画像をパブリックフォルダに保存します。
    
      //-------------------------
        //      
        //    Android Q    
        File fileDir = new File(Environment.getExternalStorageDirectory(), "Pictures");
        if (!fileDir.exists()) {
          fileDir.mkdir();
        }
    
        String fileName = "/IMG_" + System.currentTimeMillis() + ".jpg";
        //--------------------------
        //--------------------------
        //    
        Uri uri = null;
    //        ContentValues 
        ContentValues contentValues = new ContentValues();
        //     
        contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);
        //  Android Q     
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
          //android Q     DATA  ,  RELATIVE_PATH  
          //RELATIVE_PATH           
          //DCIM      ,                       ,          
          contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, "DCIM/Pictures");
        } else {
        //Android Q    
          contentValues.put(MediaStore.Images.Media.DATA, mFilePath);
        }
        //      
        contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/JPEG");
        //  insert  ,           
        //EXTERNAL_CONTENT_URI       ,    
        uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
    //        uri,          
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        startActivityForResult(intent, 1111);
    このコードを使ってもアルバムライブラリを更新しなくても自動的に更新されます。
    公共文書に保存する操作は、比較的面倒ですが、大丈夫です。
    ここでは、Android Qの写真とアルバムの写真を読み込むための方法についての記事を紹介します。これに関連して、Android Qの写真撮影とアルバムの画像の読み込みについては、以前の記事を検索してください。または、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。