Never
Never

Reputation: 5

App crashes on button press 2.9 version of Genymotion but works on 2.8

I have two activities in my app Alarm, which works fine on both Genymotion 2.8 and Genymotion 2.9.
I also have a Media Player which works fine on 2.8 but crashes on 2.9 when I press the MediaPlayer button.
This is the screen of my Alarm activity:
Alarm activity

This is the screen I get after I press the button on 2.9:
Error screen.

This is the logcat after i press the button on the phone:

09-01 16:12:06.451 31541-31541/com.never.mediaalarmplayer E/AndroidRuntime: FATAL EXCEPTION: main Process: com.never.mediaalarmplayer, PID: 31541 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.never.mediaalarmplayer/com.never.mediaalarmplayer.MediaPlayer}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=31541, uid=10174 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2724) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop(Looper.java:203) at android.app.ActivityThread.main(ActivityThread.java:6251) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924) Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=31541, uid=10174 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() at android.os.Parcel.readException(Parcel.java:1683) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140) at android.content.ContentProviderProxy.query(ContentProviderNative.java:421) at android.content.ContentResolver.query(ContentResolver.java:537) at android.content.ContentResolver.query(ContentResolver.java:479) at com.never.mediaalarmplayer.MediaPlayer.getSongList(MediaPlayer.java:138) at com.never.mediaalarmplayer.MediaPlayer.onCreate(MediaPlayer.java:41) at android.app.Activity.performCreate(Activity.java:6666) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)  at android.app.ActivityThread.-wrap12(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)  at android.os.Handler.dispatchMessage(Handler.java:110)  at android.os.Looper.loop(Looper.java:203)  at android.app.ActivityThread.main(ActivityThread.java:6251)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)

I had the command for requesting permission inserted in the manifest already but maybe it needs something more:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.never.mediaalarmplayer">
android:versionCode = "1"
    android:versionName="1.0">
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application

        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:fullBackupContent="@xml/backup_descriptor">
        <activity android:name=".Alarm"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
       <activity android:name=".MediaPlayer"
           android:launchMode="singleTop"
           android:screenOrientation="portrait"
           android:label="@string/app_name"
           />

        <service android:name="com.never.mediaalarmplayer.MusicService" />
        <receiver android:name=".AlarmReceiver"/>
    </application>

</manifest>

Logcat 2.9:

09-02 06:34:47.269 666-677/system_process I/ActivityManager: START u0 {cmp=com.never.mediaalarmplayer/.MediaPlayer} from uid 10060 on display 0
09-02 06:34:47.269 666-723/system_process W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client; transfer 4, track 48000 Hz, output 44100 Hz
09-02 06:34:47.313 1148-1167/android.process.media E/DatabaseUtils: Writing exception to parcel
                                                                    java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=2012, uid=10060 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
                                                                        at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:605)
                                                                        at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:480)
                                                                        at android.content.ContentProvider$Transport.query(ContentProvider.java:211)
                                                                        at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)
                                                                        at android.os.Binder.execTransact(Binder.java:507)
09-02 06:34:47.313 2012-2012/com.never.mediaalarmplayer D/AndroidRuntime: Shutting down VM
09-02 06:34:47.318 2012-2012/com.never.mediaalarmplayer E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: com.never.mediaalarmplayer, PID: 2012
                                                                          java.lang.RuntimeException: Unable to start activity ComponentInfo{com.never.mediaalarmplayer/com.never.mediaalarmplayer.MediaPlayer}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=2012, uid=10060 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                              at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                              at android.os.Looper.loop(Looper.java:148)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                           Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=2012, uid=10060 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
                                                                              at android.os.Parcel.readException(Parcel.java:1599)
                                                                              at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
                                                                              at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
                                                                              at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
                                                                              at android.content.ContentResolver.query(ContentResolver.java:491)
                                                                              at android.content.ContentResolver.query(ContentResolver.java:434)
                                                                              at com.never.mediaalarmplayer.MediaPlayer.getSongList(MediaPlayer.java:138)
                                                                              at com.never.mediaalarmplayer.MediaPlayer.onCreate(MediaPlayer.java:41)
                                                                              at android.app.Activity.performCreate(Activity.java:6237)
                                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                              at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                              at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                              at android.os.Looper.loop(Looper.java:148) 
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                              at java.lang.reflect.Method.invoke(Native Method) 
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

 

It doesn't work on my phone either - I have Nokia 3 with Android 7.0.
Thank you for the answers!

Upvotes: 0

Views: 252

Answers (2)

You Kim
You Kim

Reputation: 2795

READ_EXTERNAL_STORAGE is Runtime Permission since Android 6.0. Adding the permission request in manifest is not enough. App should request permission in run time. If you don't want to do that, change to 22 or less.

The reason of crash exist in Genymotion's implementation. IMHO(my guess), MediaProvider in Genymotion 2.8 does not access to external storage but 2.9 does.

Upvotes: 0

According to this part of the logcat:

EXCEPTION: main Process: com.never.mediaalarmplayer, PID: 31541 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.never.mediaalarmplayer/com.never.mediaalarmplayer.MediaPlayer}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=31541, uid=10174 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

Your application is trying to access external storage, so you must add the matching permission to your Android Manifest file. Look at https://developer.android.com/guide/topics/data/data-storage.html#filesExternal for more details.

Upvotes: 0

Related Questions