【发布时间】:2019-05-01 08:37:14
【问题描述】:
我正在尝试做这样的事情
我在一些应用程序(例如 shopify 应用程序和 discord 应用程序)中发现了这个弹出对话框,一旦您打开注册或登录页面对话框,就会弹出所有可能的电子邮件。
现在我的问题是如何在不询问用户联系权限的情况下实现这样的目标。
我目前的代码是:
private void addAdapterToViews() {
Account[] accounts = AccountManager.get(getActivity()).getAccounts();
Set<String> emailSet = new HashSet<String>();
for (Account account : accounts) {
if (EMAIL_PATTERN.matcher(account.name).matches()) {
emailSet.add(account.name);
}
}
binding.autoemail.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_dropdown_item_1line, new ArrayList<String>(emailSet)));
}
private boolean mayRequestContacts() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
if (getActivity().checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
return true;
}
if (shouldShowRequestPermissionRationale(READ_CONTACTS)) {
requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
Snackbar.make(binding.autoemail, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE)
.setAction(android.R.string.ok, new View.OnClickListener() {
@Override
@TargetApi(Build.VERSION_CODES.M)
public void onClick(View v) {
requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
}
});
} else {
requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
}
return false;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == REQUEST_READ_CONTACTS) {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
addAdapterToViews();
}
}
}
一旦用户尝试在电子邮件edittext 中键入任何字母(如果获得许可),此代码对我来说工作正常。
【问题讨论】:
-
专注于完全授予权限而不显示权限对话框
-
是否有办法在没有权限的情况下显示用户电子邮件,例如 shopify 应用
标签: android firebase-authentication android-permissions user-permissions shopify-app