[AOS] startActivityForResult

2024. 2. 5. 15:21dev/aos

728x90
반응형

Flutter를 계속해서 그런가 모든 것이 가물가물하구나.

startActivityForResult는 Deprecated되었다.

 

2024-05-10-금 : 기존 response받았던 함수 이름

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
  ...
}

 

BluetoothAdapter의 상태를 확인한 후 isEnabled가 false인 경우 Bluetooth 이용자에게 사용한다고 요청해야 한다.

'registerForActivityResult' 함수를 사용하여 ActivityResultLauncher를 반환한다.

 

중요한 것은 이전은 requestCode로 확인을 하였으나, 바뀐 ForResult결과는 1:1매칭이다.

 

맞춤 계약이라 한다. 단순하게 ResultCode를 받을 경우 'StartActivityForResult'를 계약하면 된다.

(계약한다는 것은 파라메터에 넣어주는 것)

/**
     * this method deprecated startActivityForResult method.
     * [startActivityForResultLauncher] is register, and apply callback code insnippet.
     * */
    private val startActivityForResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {result ->
        // callback
        if (result.resultCode == RESULT_OK) {

        }
    }

 

java

private ActivityResultLauncher<Intent> startActivityForResultLauncher = registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    new ActivityResultCallback<ActivityResult>() {
        @Override
        public void onActivityResult(ActivityResult result) {
            // 콜백
            if (result.getResultCode() == Activity.RESULT_OK) {
                // RESULT_OK 처리
            }
        }
    });

 

val enableBluetoothIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
            startActivityForResultLauncher.launch(enableBluetoothIntent)

 

https://developer.android.com/training/basics/intents/result?hl=ko#custom

 

활동에서 결과 가져오기  |  Android 개발자  |  Android Developers

활동에서 결과 가져오기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 앱 내에서든 다른 앱에서든 다른 활동을 시작하는 것은 단방향 작업이 아니어도 됩

developer.android.com

 


2024-05-10-금

궁금해졌다.

과연 새로운 activityResultLauncher를 사용해서 다른 앱을 실행한 뒤

기존 onActivityResult함수도 동일하게 실행되는지.. 궁금하다.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        activityResultLauncher.launch(new Intent(this, SecondActivity.class));
    }

    private ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult o) {
                    Log.d("donguran", "onActivityResult...");
                }
            }
    );

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.w("donguran", "onActivityResult.........");
    }
}

 

 

결과는? 

 

둘 다 전달받는다...

API버전 설정이 필요해보인다.

728x90
반응형

'dev > aos' 카테고리의 다른 글

[AOS] lazy init binding  (0) 2024.02.05
[AOS] Permission  (0) 2024.02.05
[AOS] hide Bottom Navigation(Full Screen)  (0) 2024.02.01
[FingerPush] Android SDK Menual:Cloud Messaging  (0) 2024.01.30
[AOS] KeyStore, SigningKey, jks  (0) 2024.01.29