我已经构建了一个Authenticator,我已经构建了一个SyncAdapter(两者都可以通过模拟器上的设置手动执行)。
如果没有找到帐户,如何在应用启动时启动应用程序以启动登录屏幕(addAccount方法)?
这是我的Manifest.xml ...
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lateral.myapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="14"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<uses-permission android:name="android.permission.READ_SYNC_STATS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:name=".myappApplication">
<activity android:name=".ui.EventListActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<service android:name=".authenticator.AccountAuthenticatorService" android:exported="true" android:process=":auth">
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator"/>
</intent-filter>
<meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/authenticator"/>
</service>
<service android:name="sync.EventsSyncAdapterService" android:exported="true" android:process=":events">
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
<meta-data android:name="android.content.SyncAdapter" android:resource="@xml/sync_events" />
</service>
<activity android:excludeFromRecents="true" android:name=".authenticator.myappAuthenticatorActivity">
<!--
No intent-filter here! This activity is only ever launched by
someone who explicitly knows the class name
-->
</activity>
</application>
</manifest>
答案 0 :(得分:4)
没有通过AccountManager
工作吗?类似的东西:
AccountManager accountManager = AccountManager.get(this);
Account[] accounts = accountManager.getAccountsByType("myCustomAccount");
if (accounts.length == 0) {
accountManager.addAccount("myCustomAccount", null, null, null, this,
null, null);
}
答案 1 :(得分:1)
在'EventListActivity'onCreate中,检查是否有任何帐户。如果没有,请打开Authenticator活动。如果你想在EventListActivity的UI显示之前进行检查并显示Authenticator,那么你所要做的就是在onCreate方法中的'setContentView'之前添加代码。
答案 2 :(得分:0)
检查帐户是否存在,如果没有,请转到登录屏幕。
public static boolean accountExists(Context ctx, AccountManager accountManager) {
Account[] accounts = accountManager.getAccountsByType(
ctx.getString(R.string.account_type)
);
return accounts.length > 0;
}