首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android中以编程方式检查是否至少设置了一个帐户

在Android中以编程方式检查是否至少设置了一个帐户
EN

Stack Overflow用户
提问于 2018-09-11 02:18:02
回答 1查看 693关注 0票数 0

我一直在尝试确定是否在Android设备上设置了任何帐户。

我已经尝试了以下代码,但它返回空列表。有没有办法找出是否已经在Android中设置了账号?

代码语言:javascript
复制
AccountManager accountManager = AccountManager.get(applicationContext);
Account[] accounts = accountManager.getAccounts()

我已经在android清单文件中设置了所需的权限。

代码语言:javascript
复制
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
EN

回答 1

Stack Overflow用户

发布于 2018-09-11 03:11:25

如果您的API级别为23 (或更高),我认为您需要在运行时请求权限,请尝试以下操作:

代码语言:javascript
复制
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);
  }

}

然后重写此方法,以处理用户响应

代码语言:javascript
复制
// 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,这样两种方法都可以访问它。

代码语言:javascript
复制
int GET_ACCOUNTS_PERMISSION = 0;
AccountManager accountManager;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52263387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档