我们正在尝试将Android应用程序定位为SDK 27。 在我们的应用中,我们使用户能够对设备上的帐户执行一些与帐户相关的功能。但是,奥利奥(Oreo)上的新Account access and discoverability更改使我们深受打击。
以前,getAccounts()调用将返回所有帐户。
我们已尝试实施建议的解决方案,以提示用户进行访问。这是一个以Twitter帐户为例的代码段:
public class MainActivity extends AppCompatActivity {
public static final String TAG = "GetAccount";
private static final String TWITTER_TYPE = "com.twitter.android.auth.login";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getAccount();
}
});
}
private void getAccount() {
AccountManager manager = AccountManager.get(this);
manager.getAuthTokenByFeatures(TWITTER_TYPE, TWITTER_TYPE, null, this, null, null,
new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
AccountManager manager = AccountManager.get(getApplicationContext());
Account[] accounts = manager.getAccountsByType(TWITTER_TYPE);
for (Account account : accounts) {
Log.i(TAG, "Callback got account" + account.toString());
}
}
}, null);
}
}
使用此代码,我们在屏幕中央显示了一个丑陋的提示,其中显示了一个现有的Twitter帐户,选择了唯一的帐户后,系统将再次以通知和系统“访问请求”的方式提示我们提示用户访问帐户的活动。一旦允许,我们便可以访问该帐户。
我们如何禁用不必要的初始提示? UX体验目前还不太好。