gpt4 book ai didi

android - 使用 Google Play 服务访问用户电子邮件的 G+ 登录抛出缺少 android.permission.GET_ACCOUNTS

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:55:12 29 4
gpt4 key购买 nike

我正在开发一款具有社交登录功能的应用。所以我创建了一个 android-library 项目,其作用是通过 g+、FB 等提供社交登录。我的应用程序正在使用这个 android-library 项目进行社交登录。但现在我面临下面描述的问题。

我使用 g+ 成功登录。

但是当我尝试登录用户邮箱时

String email = Plus.AccountApi.getAccountName(mGoogleApiClient);

我正在处理异常堆栈跟踪

W/System.err﹕ java.lang.SecurityException: Missing android.permission.GET_ACCOUNTS
W/System.err﹕ at android.os.Parcel.readException(Parcel.java:1474)
W/System.err﹕ at android.os.Parcel.readException(Parcel.java:1427)
W/System.err﹕ at com.google.android.gms.plus.internal.zzd$zza$zza.getAccountName(Unknown Source)

我在我的 android-library 项目中添加了 uses-permission 标签。下面是 android-libray list 文件。

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

<application >
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
</application>

</manifest>

谁能指导我哪里出了问题?

最佳答案

如果这是 Android 版本 6(或更高版本)的问题,并且您使用 Android SDK 23 编译并且您已经仔细检查 list 中是否有 GET_ACCOUNTS 权限,那么问题可能是 Android 运行时权限的新规则。

从 Android 版本 6 开始,当应用程序首次使用这些权限时,必须要求用户提供某些权限(即使它已经在 list 中)。

你可以这样解决这个问题:

放这部分代码

if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

int hasWriteContactsPermission = checkSelfPermission(Manifest.permission.GET_ACCOUNTS);
if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[] {Manifest.permission.GET_ACCOUNTS},
REQUEST_CODE_ASK_PERMISSIONS);
return;
}
}

代替

String email = Plus.AccountApi.getAccountName(mGoogleApiClient);

当用户允许或禁止权限时,将调用 onRequestPermissionsResult 方法,然后您可以请求电子邮件。

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_PERMISSIONS:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
String email = Plus.AccountApi.getAccountName(mGoogleApiClient);
Utils.showToast("Hello " + email, mContext);
} else {
// Permission Denied
Utils.showToast("GET_ACCOUNTS Denied", mContext);
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}

如果您想了解更多关于权限的新规则,我建议您阅读这篇文章http://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en

关于android - 使用 Google Play 服务访问用户电子邮件的 G+ 登录抛出缺少 android.permission.GET_ACCOUNTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29407852/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com