我正在尝试创建一个音乐应用程序。此应用程序需要写入外部存储权限。我有 android 13 Api 33。我在清单文件和 main.xml 文件中添加了使用权限,如下所示,
在清单 XML 中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MusicPlayer"
tools:targetApi="31">
<activity
android:name=".PlayList"
android:exported="false" />
<activity
android:name=".Player"
android:exported="false" />
<activity
android:name=".FavouriteActivity"
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
in may Main.XMl file
`类 MainActivity : AppCompatActivity() { 私有 Lateinit var 绑定:ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestRunTimePermission()
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
openMainActivity()
}
fun openMainActivity(){
binding.shuffleBtn.setOnClickListener {
startActivity(Intent(this@MainActivity,Player::class.java))
}
binding.favouriteBtn.setOnClickListener {
startActivity(Intent(this@MainActivity,FavouriteActivity::class.java))
}
binding.playListBtn.setOnClickListener {
startActivity(Intent(this@MainActivity,PlayList::class.java))
}
}
private fun requestRunTimePermission():Boolean{
if (ActivityCompat.checkSelfPermission(this,android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE),13)
return false
}
return true
}
override fun onRequestPermissionsResult(requestCode: Int,permissions: Array<out String>,grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 13){
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "Permisiion granted", Toast.LENGTH_SHORT).show()
}else{
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE),13)
}
}
}
}`
上面的代码没有向我的应用程序添加权限。
我在我的应用程序上尝试了上面的代码。打开应用程序时不会显示权限弹出窗口。
如果您的应用程序的目标是 API 级别 33,那么您将无法使用不会被授予的外部存储权限。相反,请使用以下权限。
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />