应用不适用于所有设备

时间:2017-04-12 19:06:27

标签: android android-permissions

我制作了一个音乐播放器应用。它在某些设备上运行正常但在其他设备中崩溃。我无法理解错误。我如何解决它?我所理解的只是第一个错误,那就是我必须单独获得读取电话状态权限的许可。

错误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

这是用户提交的错误。

错误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)

我已经在清单和Java中获得Android m的许可,并且我没有使用任何写外部存储功能,但是它也显示了这个错误。

3 个答案:

答案 0 :(得分:2)

在Android> = 6.0上,我们必须请求权限运行时。

Step1:添加AndroidManifest.xml文件

第2步:请求权限。

步骤3:请求权限时处理回调。

选中此项:Permission at Run Time

编辑:我认为你有similar Issue:

答案 1 :(得分:1)

可能是因为某些设备运行的是Android 6.0或更高版本而其他设备未运行。

请参阅https://developer.android.com/training/permissions/requesting.html

  

如果设备运行的是Android 5.1或更低版本,或者您应用的目标SDK为22或更低:如果您在清单中列出了危险权限,则用户必须在安装应用时授予权限;如果他们没有授予权限,系统根本不会安装应用程序。

     

如果设备运行的是Android 6.0或更高版本,并且您应用的目标SDK为23或更高:应用必须列出清单中的权限,并且必须在应用时请求其所需的每个危险权限在跑。用户可以授予或拒绝每个权限,即使用户拒绝权限请求,应用也可以继续以有限的功能运行。

答案 2 :(得分:0)

您必须添加此权限

<uses-permission android:name="android.permission.READ_PHONE_STATE" />


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

到AndroidManifest.xml文件

相关问题