Ash*_*ali 5 android google-plus google-play-services
我正在开发具有社交登录功能的应用程序.所以我创建了一个android-library项目,其角色是用g +,FB等提供社交登录.我的应用程序正在使用这个android-library项目进行社交登录.但现在我面临的问题如下所述.
我使用g +成功登录.
但是当我试图登录用户电子邮件时
String email = Plus.AccountApi.getAccountName(mGoogleApiClient);
Run Code Online (Sandbox Code Playgroud)
我得到了异常堆栈跟踪
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)
Run Code Online (Sandbox Code Playgroud)
我在我的android-library项目中添加了uses-permission标签.下面是android-libray清单文件.
<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>
Run Code Online (Sandbox Code Playgroud)
任何人都可以指导我出错了什么?
小智 11
如果这是Android版本6(或更高版本)的问题,并且您使用Android SDK 23进行编译,并且您已经仔细检查了GET_ACCOUNTS权限是否在Manifest中,则问题可能是Android的运行时权限的新规则.
从Android版本6开始,当应用程序首次使用这些权限时,必须要求用户获得某些权限(即使它已经在Manifest中).
你可以像这样解决这个问题:
把这部分代码
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;
}
}
Run Code Online (Sandbox Code Playgroud)
代替
String email = Plus.AccountApi.getAccountName(mGoogleApiClient);
Run Code Online (Sandbox Code Playgroud)
当用户允许或禁止权限时,将调用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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想了解有关权限的新规则的更多信息,我建议您阅读本文http://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/恩
我认为你的清单格式不正确,试试这个:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="login.social">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<application >
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看 有关清单的android文档.
| 归档时间: |
|
| 查看次数: |
4013 次 |
| 最近记录: |