5

我已经构建了一个 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>
4

3 回答 3

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);
  }
于 2012-06-12T06:44:46.197 回答
1

在您的“EventListActivity”onCreate 中,检查是否有任何帐户。如果没有,请打开 Authenticator 活动。如果你想让它检查并显示 Authenticator,在 EventListActivity 的 UI 显示之前,你所要做的就是在 onCreate 方法中的“setContentView”之前添加代码。

于 2012-06-12T06:46:19.947 回答
0

检查帐户是否存在,如果没有进入登录屏幕。

public static boolean accountExists(Context ctx, AccountManager accountManager) {
Account[] accounts = accountManager.getAccountsByType(
  ctx.getString(R.string.account_type)
);
return accounts.length > 0;
}
于 2015-02-05T07:28:07.743 回答