Android Android 開発: ActivityResultLauncher を使用してページをジャンプし、パラメータを渡し、写真を撮るかファイルを選択し、システム アプリケーションを呼び出してさまざまな種類の指定されたファイルを開きます。

ActivityResultLauncher は、startActivityForResult を置き換えるために Android によって公式に推奨されている新しい方法です。それを通じて、システムインテントを呼び出して写真を撮ったり、ローカルファイルを選択したりするのが非常に便利です。

この記事は 5 つの章に分かれています。

1.ActivityResultLauncherを定義する

2. ランチャーの登録

3. システムのインテントを呼び出します。

4 番目に、FileProvider を使用してファイルをコピーします

5. システムアプリケーションを使用して、さまざまな種類の指定されたファイルを開きます

お気軽にメッセージを残すか、メールを書いてください:

[email protected]

[email protected]

1.ActivityResultLauncherを定義する

システム インテントを呼び出す前に、必要なランチャーを定義する必要があります。

protected ActivityResultLauncher activityResultLauncher;
protected ActivityResultLauncher takePhotoLauncher;
protected ActivityResultLauncher selectImageLauncher;
protected ActivityResultLauncher selectFileLauncher;

ここでは、通常のインテント ジャンプの処理、写真の撮影、アルバム内の既存の写真の選択、電話内のファイルの選択に使用される 4 つの異なるランチャーを定義します。

activityResultLauncher: 一般的なインテント ジャンプを処理し、パラメータを前後に運びます。

takePhotoLauncher: カメラを開いて写真を撮り、写真を取得します。

selectImageLauncher: 電話機で画像を選択するシステム インテントを開きます。

selectFileLauncher: システム インテントを開き、電話機内のファイルを選択します。

2. ランチャーの登録

正式に使用する前に、さまざまなニーズに応じてさまざまなランチャーを登録する必要があります。

2.1 共通インテントジャンプとコールバックの登録

this.activityResultLauncher = this.registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    new ActivityResultCallback<ActivityResult>(){

        @Override
        public void onActivityResult(ActivityResult result) {
            //使用result.getResultCode()来获取返回的result code数据
            //使用result.getData.getStringExtra()或其它方法,可以获取返回参数
        }
    }
);

上記のコード スニペットでは、次の点に注意してください。

ActivityResultContracts.StartActivityForResult()

対応する Callback メソッドは次のとおりです。

ActivityResultCallback<ActivityResult>(){ 

   @Override 
   public void onActivityResult(ActivityResult result) { 
      //result.getResultCode() を使用して、返された結果コード データを取得します。
      //result.getData.getStringExtra() または他のメソッドを使用して、戻りパラメータを取得します
   } 
}

2.2 カメラインテントとコールバックを登録する

this.takePhotoLauncher = this.registerForActivityResult(
    new ActivityResultContracts.TakePicture(), 
    new ActivityResultCallback<Boolean>() {
        @Override
        public void onActivityResult(Boolean result) {
            if(result){
                //result 是布尔值,为true时表示拍照成功
            }
        }
    }
);

上記のコード スニペットでは、次の点に注意してください。

ActivityResultContracts.TakePicture()

対応する Callback メソッドは次のとおりです。

ActivityResultCallback<Boolean>() { 
    @Override 
    public void o

おすすめ

転載: blog.csdn.net/freezingxu/article/details/124953918