我一直在尝试确定是否在Android设备上设置了任何帐户。
我已经尝试了以下代码,但它返回空列表。有没有办法找出是否已经在Android中设置了账号?
AccountManager accountManager = AccountManager.get(applicationContext);
Account[] accounts = accountManager.getAccounts()
我已经在android清单文件中设置了所需的权限。
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
发布于 2018-09-11 03:11:25
如果您的API级别为23 (或更高),我认为您需要在运行时请求权限,请尝试以下操作:
if(ContextCompat.checkSelfPermission(this, Manifest.permission. GET_ACCOUNTS) == getPackageManager().PERMISSION_GRANTED)
{
// permission granted, get the accounts here
accountManager = AccountManager.get(applicationContext);
Account[] accounts = accountManager.getAccounts()
}
else
{
// permission not granted, ask for it:
// if user needs explanation , explain that you need this permission (I used an alert dialog here)
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.GET_ACCOUNTS)) {
new AlertDialog.Builder(this)
.setTitle("Permission Needed")
.setMessage("App needs permission to read your accounts ... etc")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.GET_ACCOUNTS}, GET_ACCOUNTS_PERMISSION);
}
})
.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create().show();
}
// no explanation needed, request the permission
else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.GET_ACCOUNTS}, GET_ACCOUNTS_PERMISSION);
}
}
然后重写此方法,以处理用户响应
// this function is triggered whenever the application is asked for permission and the user made a choice
// it check user's response and do what's needed.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == GET_ACCOUNTS_PERMISSION) {
// check if user granted or denied the permission:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
// permission was granted , do the work related to account here:
accountManager = AccountManager.get(applicationContext);
Account[] accounts = accountManager.getAccounts()
}
else
{
//permission denied, what do you want to do?
}
}
}
你需要在类中定义GET_ACCOUNTS_PERMISSION
(而不是在方法中),它是一个常量,这样你就知道请求了哪个权限,你可以用你想要的任何名称或值来替换它。还要定义accountManager,这样两种方法都可以访问它。
int GET_ACCOUNTS_PERMISSION = 0;
AccountManager accountManager;
https://stackoverflow.com/questions/52263387
复制相似问题