在没有应用程序模块中未调用方法 onRequestPermissionsResult

问题描述

我在没有“应用”模块的活动中应该使用 WRITE_EXTERNAL_STORAGE 权限。此模块中未调用 onRequestPermissionsResult 方法。我的代码启动这个运行时权限

 private fun requestPermissions() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        viewmodel?.initTree()
    } else {
        val storagePermission = Manifest.permission.WRITE_EXTERNAL_STORAGE
        val hasPermission = checkSelfPermission(storagePermission)
        val permissions = arrayOf(storagePermission)
        if (hasPermission != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(permissions,PERMISSION_WRITE_EXTERNAL_STORAGE_REQUEST_CODE)
        } else {
            viewmodel?.initTree()
        }
    }
}

和 onRequestPermissionsResult

override fun onRequestPermissionsResult(
    requestCode: Int,permissions: Array<String>,grantResults: IntArray
) {
    if (requestCode == PERMISSION_WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            viewmodel?.initTree()
        } else {
            Toast.makeText(this,R.string.permission_required,Toast.LENGTH_SHORT).show()
        }
    }
}

我尝试使用方法 ActivityCompat.requestPermissions() 并添加 call super.onRequestPermissionsResult() 但它没有帮助我。然后我尝试将我的代码添加到应用模块中的活动中,并且它可以正常工作。

我的麻烦是什么原因?

UPD:AndroidManifest.xml 没有“应用”模块

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ru.anthony_kharin.file_manager">

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application android:requestLegacyExternalStorage="true">
    <activity
        android:name=".view.FileExplorerActivity"
        android:theme="@style/Theme.FileManagerLibrary" />
</application>

解决方法

使用 dexter library

尝试以下源代码
Dexter.withContext(this)
.withPermission(Manifest.permission.CAMERA)
.withListener(new PermissionListener() {
    @Override public void onPermissionGranted(PermissionGrantedResponse response) {/* ... */}
    @Override public void onPermissionDenied(PermissionDeniedResponse response) {/* ... */}
    @Override public void onPermissionRationaleShouldBeShown(PermissionRequest permission,PermissionToken token) {/* ... */}
}).check();
,

问题是由于逻辑复杂,我在onResume之前关闭了Activity。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...