没有得到Android中
问题描述:
我希望所有的邮件帐户来获取连接到Android设备没有得到Android中
Account[] accounts = AccountManager.get(this).getAccounts();
accounts.length;
这返回0 ..有什么不对的所有邮件?
答
此代码对我的作品,
在你AnroidManifest.xml
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
公用事业类:
public class Utilities {
//Flag
public static final int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 200;
/*Function to get all google accounts saved in the device.*/
public static Account[] getAccounts(Context context) {
//Custom exception to check if context is null
if (context == null)
new Throwable("Context is null!!");
AccountManager accountManager = AccountManager.get(context);
Account[] accounts = accountManager.getAccountsByType("com.google");
if (accounts == null) {
Log.d("getAccounts","Accounts is null");
return null;
} else {
return accounts;
}
}
}
请记住,在Android 6.0和上司,我们需要的是用户授予此操作的权限。为此,我们可以采取https://developer.android.com/training/permissions/requesting.html的Android文档中使用的示例:
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.GET_ACCOUNTS)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.GET_ACCOUNTS)) {
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
控制权限响应:
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
答
正如所讨论的,你需要添加运行权限的Android米及以上。要申请任何权限,您可以使用下面的代码并添加您需要的权限。这是你如何通过访问相关许可
public boolean isPermissionGranted() {
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(android.Manifest.permission.GET_ACCOUNTS)
== PackageManager.PERMISSION_GRANTED) {
Log.v(TAG,"Permission is granted");
return true;
} else {
Log.v(TAG,"Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_ACCOUNTS}, 1);
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
Log.v(TAG,"Permission is granted");
return true;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 0:
boolean isPerpermissionForAllGranted = false;
if (grantResults.length > 0 && permissions.length==grantResults.length) {
for (int i = 0; i < permissions.length; i++){
if (grantResults[i] == PackageManager.PERMISSION_GRANTED){
isPerpermissionForAllGranted=true;
}else{
isPerpermissionForAllGranted=false;
}
}
Log.e("value", "Permission Granted, Now you can use local drive .");
} else {
isPerpermissionForAllGranted=true;
Log.e("value", "Permission Denied, You cannot use local drive .");
}
if(isPerpermissionForAllGranted){
shoro();
}
break;
}
}
任何数据之前,要求他们处理运行时权限,一旦你这样做,对于API的设备> = 23你会在运行时得到弹出,然后一旦用户接受许可或拒绝它,你的onRequestPermissionsResult
方法被调用。所以在这里你将不得不处理你的检查是否用户授予应用程序的权限。如果是的话,你可以继续你的逻辑
所以调用isPermissionGranted
方法,然后在你的代码中获取帐户详细信息,如果它是真实的,运行你的代码。
if(isPermissionGranted())
{
Account[] accounts = AccountManager.get(this).getAccounts();
accounts.length;
}
+0
如果我的应用程序没有活动? –
您参加'android.permission.GET_ACCOUNTS'许可 –
是的,我有这个在AndroidManifest.xml –
如果你是测试在模拟器上,你确定你添加了账户? –