我试图请求在https://developer.android.com/training/permissions/requesting中编写的许可
有些地方不对劲。在Logcat中,没有来自registerForActivityResult
回调的Log.d
输出。
proggy()
不会从回调中运行。它可以设置权限。
但当我改变
implementation 'androidx.activity:activity-ktx:1.2.0-alpha06'
至
implementation 'androidx.activity:activity-ktx:1.2.0-alpha07'
我得到了:
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,"!!!!!!!++++++++++++++!!!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 )
}
}
}
}
发布于 2020-07-29 23:27:09
我加了
implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha07'
回拨跑。例外情况消失了。
https://stackoverflow.com/questions/63163824
复制相似问题