آیا فقط با مجوز READ_EXTERNAL STORAGE میتوان تمام آهنگ های موبایل را لود و پلی کرد ؟
سلام من دارم یک Music player می نویسم. طبق داکیومنت گوگل برای دسترسی به فایل های media در اندروید 10 به بالا فقط به READ_EXTERNAL_STORAGE نیاز هست.برنامه روی شبیه ساز با اندروید 7 تا 12 کار می کنه ولی روی موبایل خودم که اندروید 10 هست ارور Permission denied رو میده !
سوالم اینه که برای دسترسی به فایل های موسیقی و پلی کردنشون تو اندروید 10 به بالا چه مجوز هایی احتیاج داره ؟
آیا حتما باید از MANGE_EXTERNAL_STORAGE استفاده کرد ؟ راه دیگه ای وجود نداره ؟
و این که چرا فقط روی گوشی های واقعی ارور permission denied رو میده و توی امیولیتور درست کار می کنه ؟
<?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.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@drawable/amir_tataloo__man_bahat_ghahram"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="false"
android:theme="@style/Theme.MusicPlayer"
tools:targetApi="31">
<activity
android:name=".PlayListActivity"
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>
ارور log cat موبایل خودم :
FATAL EXCEPTION: main
Process: com.example.musicplayer, PID: 25265
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:503)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
Caused by: java.io.FileNotFoundException: /storage/emulated/0/Download/Sasy - Gentleman.mp3: open failed: EACCES (Permission denied)
at libcore.io.IoBridge.open(IoBridge.java:496)
at java.io.FileInputStream.<init>(FileInputStream.java:159)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1237)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1208)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1173)
at com.example.musicplayer.PlayListActivity$handleRecyclerView$1.onItemClick(PlayListActivity.kt:82)
at com.example.musicplayer.MySongAdapter.onBindViewHolder$lambda$0(MySongAdapter.kt:36)
at com.example.musicplayer.MySongAdapter.$r8$lambda$a8Hmn1z3bXNdzC3RJ1fPrlvimpM(Unknown Source:0)
at com.example.musicplayer.MySongAdapter$$ExternalSyntheticLambda0.onClick(Unknown Source:4)
at android.view.View.performClick(View.java:7870)
at android.view.View.performClickInternal(View.java:7839)
at android.view.View.access$3600(View.java:886)
at android.view.View$PerformClick.run(View.java:29363)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7948)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
at libcore.io.Linux.open(Native Method)
at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7825)
at libcore.io.IoBridge.open(IoBridge.java:482)
at java.io.FileInputStream.<init>(FileInputStream.java:159)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1237)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1208)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1173)
at com.example.musicplayer.PlayListActivity$handleRecyclerView$1.onItemClick(PlayListActivity.kt:82)
at com.example.musicplayer.MySongAdapter.onBindViewHolder$lambda$0(MySongAdapter.kt:36)
at com.example.musicplayer.MySongAdapter.$r8$lambda$a8Hmn1z3bXNdzC3RJ1fPrlvimpM(Unknown Source:0)
at com.example.musicplayer.MySongAdapter$$ExternalSyntheticLambda0.onClick(Unknown Source:4)
at android.view.View.performClick(View.java:7870)
at android.view.View.performClickInternal(View.java:7839)
at android.view.View.access$3600(View.java:886)
at android.view.View$PerformClick.run(View.java:29363)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7948)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .