App not working in all devices - android

I made a music player app. It runs properly in some devices but it crashes in some others. I am not able to understand the error. How do I fix it? All I understand is the first error and that is I have to take separate permission for read phone state permission.
Error 1:
java.lang.RuntimeException: Unable to create service beatbox.neelay.beatbox.MediaService: java.lang.SecurityException: Neither user 10103 nor current process has android.permission.READ_PHONE_STATE.
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2804)
at android.app.ActivityThread.access$1900(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1404)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5292)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
Caused by: java.lang.SecurityException: Neither user 10103 nor current process has android.permission.READ_PHONE_STATE.
at android.os.Parcel.readException(Parcel.java:1546)
at android.os.Parcel.readException(Parcel.java:1499)
at com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy.listenForSubscriber(ITelephonyRegistry.java:544)
at android.telephony.TelephonyManager.listen(TelephonyManager.java:2514)
at beatbox.neelay.beatbox.MediaService.callStateListener(MediaService.java:612)
at beatbox.neelay.beatbox.MediaService.onCreate(MediaService.java:126)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2794)
... 9 more
This is the error that is submitted by the user.
Error 2:
Writing exception to parcel
java.lang.SecurityException:
External path: /storage/emulated/0/Android/data/com.android.providers.media/albumthumbs/1481126994678: Neither user 10199 nor current process has android.permission.WRITE_EXTERNAL_STORAGE.
at android.app.ContextImpl.enforce(ContextImpl.java:1443)
at android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:1475)
at android.content.ContextWrapper.enforceCallingOrSelfPermission(ContextWrapper.java:675)
at com.android.providers.media.MediaProvider.enforceCallingOrSelfPermissionAndAppOps(MediaProvider.java:6793)
at com.android.providers.media.MediaProvider.checkAccess(MediaProvider.java:5570)
at com.android.providers.media.MediaProvider.ensureFileExists(MediaProvider.java:4381)
at com.android.providers.media.MediaProvider.getAlbumArtOutputUri(MediaProvider.java:5834)
at com.android.providers.media.MediaProvider.makeThumbInternal(MediaProvider.java:5976)
at com.android.providers.media.MediaProvider.getThumb(MediaProvider.java:5897)
at com.android.providers.media.MediaProvider.openFile(MediaProvider.java:5466)
at android.content.ContentProvider.openAssetFile(ContentProvider.java:1427)
at android.content.ContentProvider.openTypedAssetFile(ContentProvider.java:1607)
at android.content.ContentProvider.openTypedAssetFile(ContentProvider.java:1673)
at android.content.ContentProvider$Transport.openTypedAssetFile(ContentProvider.java:430)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:313)
at android.os.Binder.execTransact(Binder.java:458)
I have take permission for Android m both in manifest and in Java, and I'm not using any function of write external storage but then also it is showing this error.

On Android >=6.0, We have to request permission runtime.
Step1: add in AndroidManifest.xml file
Step2: Request permission.
Step3: Handle callback when you request permission.
Check this one: Permission at Run Time
Edit: I think you have similar Issue:

you must add this permissions
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
to AndroidManifest.xml file

It might be because some of the devices are running Android 6.0 or higher and others are not.
See https://developer.android.com/training/permissions/requesting.html
If the device is running Android 5.1 or lower, or your app's target SDK is 22 or lower: If you list a dangerous permission in your manifest, the user has to grant the permission when they install the app; if they do not grant the permission, the system does not install the app at all.
If the device is running Android 6.0 or higher, and your app's target SDK is 23 or higher: The app has to list the permissions in the manifest, and it must request each dangerous permission it needs while the app is running. The user can grant or deny each permission, and the app can continue to run with limited capabilities even if the user denies a permission request.

Related

i run my application on android 6.0.1 and give thats type of error

FATAL EXCEPTION: IntentService[]
Process: com.frenzin.alert, PID: 5892
java.lang.SecurityException: getDeviceId: Neither user 10240 nor current process has android.permission.READ_PHONE_STATE.
at android.os.Parcel.readException(Parcel.java:1620)
at android.os.Parcel.readException(Parcel.java:1573)
at com.android.internal.telephony.ITelephony$Stub$Proxy.getDeviceId(ITelephony.java:4207)
at android.telephony.TelephonyManager.getDeviceId(TelephonyManager.java:706)
at com.frenzin.alert.RegistrationIntentService.onHandleIntent(RegistrationIntentService.java:44)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:66)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)
Beginning in Android 6.0 (API level 23), users grant permissions to apps while the app is running, not when they install the app. If the device is running Android 6.0 or higher, and your app's target SDK is 23 or higher: The app has to list the permissions in the manifest, and it must request each dangerous permission it needs while the app is running. The user can grant or deny each permission, and the app can continue to run with limited capabilities even if the user denies a permission request.
To request permission in runtime, go to https://developer.android.com/training/permissions/requesting.html
Add runtime permission for access
Add library:
compile 'pub.devrel:easypermissions:0.2.1'
private String[] phonePermissions = {Manifest.permission.READ_PHONE_STATE};
if (EasyPermissions.hasPermissions(this, phonePermissions)) {
//success
} else {
EasyPermissions.requestPermissions(this, "Access for Read Phone",
101, phonePermissions);
}

ACCESS_WIFI_STATE error on emulator

I've declared the following permission on the manifest:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
And per the docs it's a normal permission so no need to request it at runtime on devices running Android M or higher.
The app has crashed but I've tested on multiple devices (with android N) and the app works has expected. Any idea why it has crashed on an emulator with Android SDK built for x86 running android 7.0?
Here is the stacktrace:
Fatal Exception: java.lang.SecurityException: WifiService: Neither user 10076 nor current process has android.permission.ACCESS_WIFI_STATE.
at android.os.Parcel.readException(Parcel.java:1683)
at android.os.Parcel.readException(Parcel.java:1636)
at android.net.wifi.IWifiManager$Stub$Proxy.getWifiEnabledState(IWifiManager.java:1198)
at android.net.wifi.WifiManager.getWifiState(WifiManager.java:1455)
at android.net.wifi.WifiManager.isWifiEnabled(WifiManager.java:1467)
...
To work with WifiManager when scanning the Connections from Android 6.0 it needs to access your location, so that is either the fine location or the coarse location, Add the following to Manifes.xml:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Since Android M (6+) you have to ask the user for permissions during runtime, like iOS-applications for instance.
You can read the docs here, a quick solution is to use a library, e.g EasyPermission or EasyPermission
https://github.com/jineshfrancs/EasyPermission
https://github.com/lalosoft/EasyPermissions
Usage:
easyPermission.requestPermission(this, Manifest.permission.ACCESS_WIFI_STATE);

FaceDetectionListener does not work on Xperia, maybe caused by "Not granting permission com.sonymobile.permission.SYSTEM_UI_VISIBILITY_EXTENSIONS"

Im working on Android application development.
PROBLEM:
All I want is just enable face detection on my application, but it does not work.
I've already tried multiple sample codes given on books, webs, but no one succeeded.
Probably these 2 alerts show the cause:
W/WindowManager﹕ Access to extended visibility flags denied: Requires com.sonymobile.permission.SYSTEM_UI_VISIBILITY_EXTENSIONS permission.
and
W/ServiceManager﹕ Permission failure: com.sonyericsson.permission.CAMERA_EXTENDED
Even if I added
<uses-permission android:name="com.sonymobile.permission.SYSTEM_UI_VISIBILITY_EXTENSIONS" android:protectionLevel="normal" />
<uses-permission android:name="com.sonyericsson.permission.CAMERA_EXTENDED"/>
it says
W/PackageManager﹕ Not granting permission com.sonymobile.permission.SYSTEM_UI_VISIBILITY_EXTENSIONS to package com.example.facedetect (protectionLevel=18 flags=0x8be46)
W/PackageManager﹕ Not granting permission com.sonyericsson.permission.CAMERA_EXTENDED to package com.example.facedetectbybook (protectionLevel=2 flags=0x8be46)
Can anyone help me?
I use Android Studio, Xperia M C1905 with android-ver. 4.3.
I already did followings:
.change protection level to signature
.make sure params.getMaxNumDetectedFaces() is more than 1 (its 5)
.min sdk version: 14

Does Crashlytics need ACCESS_NETWORK_STATE?

I received this log via Crashlytics:
java.lang.SecurityException: ConnectivityService: Neither user 10099 nor current process has android.permission.ACCESS_NETWORK_STATE.
at android.os.Parcel.readException(Parcel.java:1428)
at android.os.Parcel.readException(Parcel.java:1382)
at android.net.IConnectivityManager$Stub$Proxy.getActiveNetworkInfo(IConnectivityManager.java:737)
at android.net.ConnectivityManager.getActiveNetworkInfo(ConnectivityManager.java:566)
at android.webkit.TextSelectWindow.isNetworkAvailable(TextSelectWindow.java:903)
at android.webkit.TextSelectWindow.dictSelection(TextSelectWindow.java:475)
at android.webkit.TextSelectWindow.onClick(TextSelectWindow.java:365)
at android.view.View.performClick(View.java:4220)
at android.view.View$PerformClick.run(View.java:17510)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5455)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:966)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:733)
at dalvik.system.NativeStart.main(NativeStart.java)
Apparently, something requires the ACCESS_NETWORK_STATE permission. The only permission the app currently has is INTERNET, which I only need to receive crash logs via Crashlytics. The app itself never needs any Internet connection and works perfectly without having any permissions whatsoever. Now does that mean Crashlytics requires ACCESS_NETWORK_STATE to work correctly? The strange thing is that this is the first and single crash after a whole crash-free month and Crashlytics always worked without the permission.
The app targets SDK 21 and uses crashlytics:1.1.13 and crashlytics-gradle:1.14.7.
Crashlytics only needs INTERNET permissions. The ConnectivityManager needs the ACCESS_NETWORK_STATE permission

Android - Workaround the ACCESS_CONTENT_PROVIDERS_EXTERNALLY permission?

I'm building an application which gives this exception because i call some internal methods
Permission Denial: Do not have permission in call getContentProviderExternal() from pid=2520, uid=10047 requires android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY
java.lang.SecurityException: Permission Denial: Do not have permission in call getContentProviderExternal() from pid=2520, uid=10047 requires android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY
I did some search and i knew that android OS gives this permission only for the shell users,
I wonder if there exists any workaround this ..
Is there anything that would allow me to trick android and makes my application looks like a shell user?
Note: I tried to add the permission in the manifest file but obviously it didn't work.

Categories

Resources