ActivityResultLauncher は、startActivityForResult を置き換えるために Android によって公式に推奨されている新しい方法です。それを通じて、システムインテントを呼び出して写真を撮ったり、ローカルファイルを選択したりするのが非常に便利です。
この記事は 5 つの章に分かれています。
1.ActivityResultLauncherを定義する
2. ランチャーの登録
3. システムのインテントを呼び出します。
4 番目に、FileProvider を使用してファイルをコピーします
5. システムアプリケーションを使用して、さまざまな種類の指定されたファイルを開きます
お気軽にメッセージを残すか、メールを書いてください:
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