1

I'm trying to request permistions as it is written in the https://developer.android.com/training/permissions/requesting

Something is wrong. In Logcat there is no Log.d output from callback of registerForActivityResult.

proggy() not run from callback. It set permissions okey.

But when I changed
implementation 'androidx.activity:activity-ktx:1.2.0-alpha06'

to

implementation 'androidx.activity:activity-ktx:1.2.0-alpha07'

I got:

2020-07-30 01:42:55.698 12259-12259/tk.kvakva.myapplication D/AndroidRuntime: Shutting down VM
2020-07-30 01:42:55.701 12259-12259/tk.kvakva.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: tk.kvakva.myapplication, PID: 12259
    java.lang.RuntimeException: Unable to start activity ComponentInfo{tk.kvakva.myapplication/tk.kvakva.myapplication.MainActivity}: java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
        at androidx.fragment.app.FragmentActivity.checkForValidRequestCode(FragmentActivity.java:715)
        at androidx.fragment.app.FragmentActivity.validateRequestPermissionsRequestCode(FragmentActivity.java:730)
        at androidx.core.app.ActivityCompat.requestPermissions(ActivityCompat.java:500)
        at androidx.activity.ComponentActivity$2.onLaunch(ComponentActivity.java:178)
        at androidx.activity.result.ActivityResultRegistry$3.launch(ActivityResultRegistry.java:147)
        at androidx.activity.result.ActivityResultLauncher.launch(ActivityResultLauncher.java:42)
        at tk.kvakva.myapplication.MainActivity.onCreate(MainActivity.kt:39)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 

import android.Manifest
import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import androidx.activity.result.contract.ActivityResultContracts

class MainActivity : AppCompatActivity() {

    val TAG = "MY_MainAct"

    fun proggy(){
        Log.d(TAG, "!!!!!!!!!!!!!!!!!! proggy() !!!!!!!!!!!!!!!!")
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val permReqLuncher = registerForActivityResult(ActivityResultContracts.RequestPermission()){
            Log.d(TAG,"!!!!!!!++++++++++++++!!!!!CALL BACK!!!!!!!!!!+++++++++++++++!!!!!!!!!!!!!!!!!!!!!")
            if(it) {
                Log.d(TAG,"registerForActivityResult(ActivityResultContracts.RequestPermission()){ it: $it")
                proggy();
            }
            else
                Log.d(TAG,"Perm Not Granted")
        }

        when(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            PackageManager.PERMISSION_GRANTED -> {
                Log.d(TAG,"in onCreate when  checkSelfPerm grated")
                proggy()
            }
            PackageManager.PERMISSION_DENIED -> {
                Log.d(TAG,"!!!!!!!!!!! in onCreate when checkSelfPermistion DENIED")
                permReqLuncher.launch( Manifest.permission.WRITE_EXTERNAL_STORAGE  )
            }
        }
    }
}
tariksune
  • 79
  • 1
  • 7
Vsevolod
  • 332
  • 4
  • 10

1 Answers1

2

I added

implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha07'

Callback runs. Exceptions gone.

Vsevolod
  • 332
  • 4
  • 10