Search code examples
androidandroidxdeprecatedonactivityresultstartactivityforresult

deprecated OnActivityResult() in androidx


OnActivityResult() is deprecated in androidx. I took reference from below links

I implemented for signup thing in my project ..like .I created resultcontract by registering the activity in place of startActivityForResult i replaced by resultcontract.launch(intent) and getting result in resultcontract (followed above links). Now i have doubt in one function that is turn on gps. for this we have used

val rae = e as ResolvableApiException
rae.startResolutionForResult(context, GPS_REQUEST)

earlier it was startActivityForResult , now it is startResolutionForResult having confusion how to get result of gps request ( in code , we are getting result in onActivityResult).how can i implement this using new way?


Solution

  • I found a solution for this problem, using the recent API's to start something for result.

    So, you can pretty much get the resolution from ResolvableApiException, which is a PendingIntent, and start it with StartIntentSenderForResult contract, like this

    contract:

    private val resolutionForResult = registerForActivityResult(
        ActivityResultContracts.StartIntentSenderForResult()
    ) { activityResult ->
    
        // do whatever you want with activity result...
    
    }
    

    how to start:

    .addOnFailureListener { exception ->
        if (exception is ResolvableApiException) {
            try {
                val intentSenderRequest = IntentSenderRequest
                        .Builder(exception.resolution).build()
                resolutionForResult.launch(intentSenderRequest)
            } catch (throwable: Throwable) {
                // Ignore the error.
            }
        }
    }