Android: java.lang.SecurityException - despite the <uses-permission> declaration

I am getting some sort of SecurityException in my application, presumably due to lack of permissions. This happens very rarely and does not seem to be consistent, a kind of "once in a blue moon". I don't have access to any devices that it crashed on. It looks like it happens in different versions of the manufacturer and Android.

What I've done so far is check mine AndroidManifest.xml

for <uses-permission>

and that it's in the correct scope as an immediate child <mainfest>

and everything seems fine. Below is my AndroidManifest.xml - slightly shortened for readability. And I tried to do this and I found a similare issue in google groups that also seems to be unresolved: https://groups.google.com/forum/#!topic/android-c2dm/QIjbqO38rHI

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.eTilbudsavis.eTilbudsavis" >

    <!-- SOME PERMISSIONS E.T.C. REMOVED FOR READABILITY -->
    <uses-permission android:name="android.permission.INTERNET" />

    <!-- THE PERMISSION THAT CAUSES CRASHES -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <permission
        android:name="${applicationId}.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />

    <application
        android:name="com.eTilbudsavis.eTilbudsavis.App"
        android:allowBackup="true"
        android:icon="@drawable/ic_app"
        android:label="@string/app_name" >

        <activity
            android:name="com.eTilbudsavis.eTilbudsavis.MainActivity"
            android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
            android:label="@string/app_name"
            android:launchMode="singleTop" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.eTilbudsavis.eTilbudsavis.test.TestActivity" >
        </activity>

        <!-- ACTIVITIES, SERVICES, RECIEVERS REMOVED FOR READABILITY -->

    </application>

</manifest>

      

I have included a couple of stack traces that I have from the crash reporting along with device information.

The first one is missing com.google.android.c2dm.permission.RECEIVE

, which is in the manifest. Devices: Sony Xperia Z1 Compact (D5503 running Android 5.0.2) and Samsung Galaxy S III (I9300 running Android 4.3).

java.lang.SecurityException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.REGISTER pkg=com.google.android.gms (has extras) } without permission com.google.android.c2dm.permission.RECEIVE
       at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1730)
       at android.app.ContextImpl.startService(ContextImpl.java:1707)
       at android.content.ContextWrapper.startService(ContextWrapper.java:515)
       at com.google.android.gms.gcm.GoogleCloudMessaging.zzs()
       at com.google.android.gms.gcm.GoogleCloudMessaging.register()
       at com.eTilbudsavis.eTilbudsavis.notification.GcmRegistration.run(GcmRegistration.java:42)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
       at java.lang.Thread.run(Thread.java:818)

      

The second one is missing android.permission.ACCESS_NETWORK_STATE

, which is also defined in mainfest. Devices: Huawei Ascend P7 (P7-L10, running Android 4.4.2)

java.lang.SecurityException: ConnectivityService: Neither user 10184 nor current process has android.permission.ACCESS_NETWORK_STATE.
       at android.os.Parcel.readException(Parcel.java:1475)
       at android.os.Parcel.readException(Parcel.java:1429)
       at android.net.IConnectivityManager$Stub$Proxy.getActiveNetworkInfo(IConnectivityManager.java:843)
       at android.net.ConnectivityManager.getActiveNetworkInfo(ConnectivityManager.java:635)
       at com.eTilbudsavis.eTilbudsavis.ConnectionChecker.isOnline(ConnectionChecker.java:67)
       at com.eTilbudsavis.eTilbudsavis.ConnectionChecker.run(ConnectionChecker.java:42)

      

The third second is missing android.permission.WRITE_EXTERNAL_STORAGE

, which is also defined in mainfest. Devices: Samsung Galaxy Tab S 8.4 (SM-T705, running Android 4.4.2)

java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
       at com.google.maps.api.android.lib6.d.t.a()
       at com.google.maps.api.android.lib6.d.ft.a()
       at com.google.maps.api.android.lib6.d.aj.a()
       at com.google.maps.api.android.lib6.d.ai.a()
       at com.google.android.gms.maps.internal.x.onTransact(SourceFile:107)
       at android.os.Binder.transact(Binder.java:361)
       at com.google.android.gms.maps.internal.IMapFragmentDelegate$zza$zza.onCreateView()
       at com.google.android.gms.maps.SupportMapFragment$zza.onCreateView()
       at com.google.android.gms.dynamic.zza$4.zzb()
       at com.google.android.gms.dynamic.zza.zza()
       at com.google.android.gms.dynamic.zza.onCreateView()
       at com.google.android.gms.maps.SupportMapFragment.onCreateView()
       at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
       at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
       at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:490)
       at com.eTilbudsavis.eTilbudsavis.fragment.LocationMapFragment.ensureSupportMapFragment(LocationMapFragment.java:338)
       at com.eTilbudsavis.eTilbudsavis.fragment.LocationMapFragment.onStart(LocationMapFragment.java:676)
       at android.support.v4.app.Fragment.performStart(Fragment.java:1813)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:989)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
       at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
       at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:458)
       at android.os.Handler.handleCallback(Handler.java:733)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:146)
       at android.app.ActivityThread.main(ActivityThread.java:5653)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
       at dalvik.system.NativeStart.main(NativeStart.java)

      

Any help is appreciated.

+3


source to share





All Articles