我可以使用清单中的以下权限在Pre Marshmallow设备上成功添加和删除帐户:
<uses-permission androID:name="androID.permission.GET_ACCOUNTS"/><uses-permission androID:name="androID.permission.MANAGE_ACCOUNTS"/><uses-permission androID:name="androID.permission.USE_CREDENTIALS"/>
使用sdk 22进行编译并使用sdk 22进行编译时,应自动授予这些权限.以下代码:
accountManager.removeAccount(getAccount(),activity,new AccountManagerCallback<Bundle>() { @OverrIDe public voID run(AccountManagerFuture<Bundle> accountManagerFuture) { try { Bundle bundle = accountManagerFuture.getResult(); boolean success = bundle.getBoolean(AccountManager.KEY_BOolEAN_RESulT); if (success) { Toast.makeText(activity,activity.getString(R.string.successfully_loggedout),Toast.LENGTH_LONG).show(); afterlogoutSuccess(activity); } else { Toast.makeText(activity.getApplicationContext(),activity.getString(R.string.Failed_to_logout),Toast.LENGTH_LONG).show(); } onlogoutListener.onlogoutFinished(success); return; } catch (OperationCanceledException e) { Log.e(TAG,"Operation cancelled exception:",e); } catch (IOException e) { Log.e(TAG,"IOException:",e); } catch (AuthenticatorException e) { Log.e(TAG,"AuthenticatorException:",e); } onlogoutListener.onlogoutFinished(false); } },null);
失败,出现以下异常:
java.lang.SecurityException: uID 10057 cannot remove accounts of type: com.mycompany.accounts at androID.os.Parcel.readException(Parcel.java:1599) at androID.os.Parcel.readException(Parcel.java:1552) at androID.accounts.IAccountManager$Stub$Proxy.removeAccount(IAccountManager.java:897) at androID.accounts.AccountManager.doWork(AccountManager.java:900) at androID.accounts.AccountManager$AmsTask.start(AccountManager.java:1888) at androID.accounts.AccountManager.removeAccount(AccountManager.java:897) at com.mycomp.actualapp.utils.LoginHelper.doInBackground(LoginHelper.java:282) at com.mycomp.actualapputils.LoginHelper.doInBackground(LoginHelper.java:242) at androID.os.AsyncTask.call(AsyncTask.java:295) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818)
奇怪的是,这个代码在Pre Marshmallow设备上运行正常,没有任何问题.
在旁注中,我注意到使用sdk 22进行编译并且定位22:转到“设置>应用>我的应用(com.mycomp.actualapp)>权限”我只看到两个权限,“电话”“存储” .
我注意到用sdk 23编译并且目标23:我看到三个权限,“电话”,“存储”和“联系人”.
我尝试过以下方法:
>切换到使用sdk 23编译 – 在应用程序设置中授予所有权限,再次尝试删除帐户.仍然失败,同样的例外.
>使用22进行编译并将以下权限添加到清单中.确保授予所有权限.仍然失败,同样的例外:
<uses-permission androID:name="androID.permission.AUTHENTICATE_ACCOUNTS"/> <uses-permission androID:name="androID.permission.READ_CONTACTS"/> <uses-permission androID:name="androID.permission.WRITE_CONTACTS"/>
我可以在没有其他权限授予的情况下获取用户帐户用户名和令牌,但删除帐户不起作用.
我真的很感激任何帮助!
就我而言,我在节点中定义了错误的包名称.
只需修复它就能完美运行.
<帐户认证符>
的xmlns:机器人= “http://schemas.androID.com/apk/res/androID”
androID:accountType =“你的正确数据包名称”“.accounts”
机器人:图标= “@绘制/ ic_launcher”
机器人:标签= “XXX”
机器人:smallicon = “@绘制/ ic_launcher”
>
< /帐户认证符>
如果您的包裹名称是:com.example.androID然后帐户类型应该是:com.example.androID.accounts
总结以上是内存溢出为你收集整理的Android M 6.0 – SecurityException试图删除帐户全部内容,希望文章能够帮你解决Android M 6.0 – SecurityException试图删除帐户所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)