首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >registerForActivityResult的回调(RequestPermission())不运行

registerForActivityResult的回调(RequestPermission())不运行
EN

Stack Overflow用户
提问于 2020-07-29 23:12:53
回答 1查看 5.4K关注 0票数 1

我试图请求在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'

我得到了

代码语言:javascript
运行
复制
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) 
代码语言:javascript
运行
复制
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  )
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-07-29 23:27:09

我加了

代码语言:javascript
运行
复制
implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha07'

回拨跑。例外情况消失了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63163824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档