Android Authenticator Launch Login Screen When No Account Present

android, android-authenticator, android-syncadapter

Solution

Doesn't going through the `AccountManager` work? Something like:

 AccountManager accountManager = AccountManager.get(this);
 Account[] accounts = accountManager.getAccountsByType("myCustomAccount");
 if (accounts.length == 0) {
    accountManager.addAccount("myCustomAccount", null, null, null, this,
                               null, null);
  }

Problem

I've built an Authenticator, I've built a SyncAdapter (both can be manually executed through the settings on the emulator). How do I get my application to launch the login screen (addAccount method) when the app launches, if no account is found? Here is my 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> ```

Original source