Android App 申请权限
首先在 AndroidManifest.xml 中添加需要的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<!-- Always include this permission -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Include only if your app benefits from precise location access. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />然后使用 Kotlin 在 Activity 申请权限
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Check and request permissions
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!hasAllPermissions()) {
requestAllPermissions()
} else {
// Permissions already granted
proceedWithAppFunctionality()
}
} else {
// Permissions not needed for pre-Marshmallow devices
proceedWithAppFunctionality()
}
// Other
}
// Other
/* 申请权限开始 */
private val permissions = arrayOf(
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.RECORD_AUDIO,
android.Manifest.permission.INTERNET,
android.Manifest.permission.CHANGE_WIFI_STATE,
android.Manifest.permission.ACCESS_WIFI_STATE,
android.Manifest.permission.ACCESS_NETWORK_STATE,
android.Manifest.permission.CAMERA,
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.ACCESS_FINE_LOCATION
)
private fun hasAllPermissions() : Boolean {
return permissions.all {
ContextCompat.checkSelfPermission(this, it) == PackageManager.PERMISSION_GRANTED
}
}
private fun requestAllPermissions() {
ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST_CODE)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == PERMISSIONS_REQUEST_CODE) {
if(grantResults.all { it == PackageManager.PERMISSION_GRANTED }) {
// All permissions granted
proceedWithAppFunctionality()
} else {
// At least one permission denied
Toast.makeText(this, "All permissions are required for this app to function properly",
Toast.LENGTH_SHORT).show()
}
}
}
private fun proceedWithAppFunctionality() {
// Proceed with the functionality that requires permissions
Toast.makeText(this, "All permissions granted, proceeding...", Toast.LENGTH_SHORT).show()
}
companion object {
const val PERMISSIONS_REQUEST_CODE = 102
}
/* 申请权限结束 */
override fun onDestroy() {
super.onDestroy()
}
}最后,从 Android 10 开始,要想访问外部存储的所有文件,除了动态申请权限和权限申明外,必须在主工程 AndroidManifest.xml 中加上一句话:
<application
android:name=".MyApplication"
android:allowBackup="true"
...
android:requestLegacyExternalStorage="true"
...>代码是根据 GPT-4o 更改的
评论已关闭