The droids run 2.0, but the published Eclair source is 2.1 and that was the fastest way to get an emulator that included the "Accounts & Sync" settings that isn't in the 2.0 emulator. AFAIK you'll need that in order to affect any testing that will work on shipping 2.0 devices.
I don't have time to look into this any further at the moment as I'm currently looking into the *next* issue which is the way in which the contacts application handles contacts from account sources other than the built-in Google and Exchange sources... Cheers, Jerry On Dec 1, 8:02 pm, Dan Dumont <[email protected]> wrote: > Drat... I don't want to build 2.1... I thought the droids ran 2.0? > > anyway... I updated the project. Please let me know if it works :) I > get an error still in the 2.0 emulator... > 12-01 19:54:36.454: ERROR/AndroidRuntime(93): > android.content.ActivityNotFoundException: No Activity found to handle > Intent { act=android.settings.SYNC_SETTINGS (has extras) } > > > > On Tue, Dec 1, 2009 at 4:18 PM, Dan Dumont <[email protected]> wrote: > > I'll update my project asap! Thanks for looking into this!! > > > when we create the binder, do we need to verify that the "account" variable > > is for us? IE... will the intent be triggered for all providers, and we > > must figure out if the info is our or not? > > > On Mon, Nov 30, 2009 at 2:35 PM, Jerry Brady <[email protected]>wrote: > > >> Guys following this issue, > > >> I found the ultimate cause of the error and found a workaround that > >> will allow you to work on a Droid. > > >> One thing that's helpful is building yourself an Eclair 2.1 SDK so you > >> can use an emulator (2.1) that includes the "Accounts & Sync" settings > >> option we need in working with accounts: > > >> ------------------------------------- > >> From the the root of the android source tree: > >> . build/envsetup.sh > >> lunch sdk-eng > >> make sdk (may want to use -j<something> based on your number of cores) > > >> find the SDK in out/host/linux/sdk/... > > >> From the SDK, copy platforms/android-#.# into your SDK/platform on > >> your destination pc. > > >> If that's running windows, copy platforms/android-2.0/tools/* into > >> your newly created platforms tools folder. > > >> Use the AVD Manager to create an AVD for this new platform. > >> ----------------------------------------------- > > >> The crash is caused by an undocumented assumption in the Android code > >> that handles accounts and sync. They are *very* closely related. It > >> turns out that the "Accounts and Sync" settings plugin after getting > >> the accounts on the system, uses the content service to scan for > >> services on the system that implement the intent > >> "android.content.SyncAdapter". > > >> Since our code doesn't implement this, the search came up empty handed > >> and since the code assumed this would never happen, BAM, null pointer > >> exception and crash. > > >> It turns out that the solution is to have your application (or > >> something on the system) implement a service that catches the intent > >> "android.content.SyncAdapter" that returns an IBinder to an object > >> that extends AbstractThreadedSyncAdapter (just like we did for our > >> AbstractAccountAuthenticator). > > >> I took examples from the source code for the Email application in > >> android, but here are the relevant bits to setup an empty sync adapter > >> for contacts that does nothing but gets you past the exception: > > >> AndroidManifest.xml: > > >> --------------------------------------------------------------------------- > >> - > >> <!--Required stanza to register the ContactsSyncAdapterService with > >> SyncManager --> > >> <service > >> android:name="com.YOURDOMAIN.YOURAPP.ContactsSyncAdapterService" > >> android:exported="true"> > >> <intent-filter> > >> <action android:name="android.content.SyncAdapter" /> > >> </intent-filter> > >> <meta-data android:name="android.content.SyncAdapter" > >> android:resource="@xml/syncadapter_contacts" /> > >> </service> > > >> xml/syncadapter_contacts - : > > >> --------------------------------------------------------------------------- > >> ----- > >> <sync-adapter xmlns:android="http://schemas.android.com/apk/res/ > >> android" > >> android:contentAuthority="com.android.contacts" > >> android:accountType="com.YOURDOMAIN.YOURAPP" > >> /> > > >> ContactSyncAdapter: > >> ===================================== > >> public class ContactsSyncAdapterService extends Service { > >> private static final String TAG = "ContactsSyncAdapterService"; > >> private static SyncAdapterImpl sSyncAdapter = null; > >> private static final Object sSyncAdapterLock = new Object(); > > >> public ContactsSyncAdapterService() { > >> super(); > >> } > > >> private static class SyncAdapterImpl extends > >> AbstractThreadedSyncAdapter { > >> private Context mContext; > > >> public SyncAdapterImpl(Context context) { > >> super(context, true /* autoInitialize */); > >> mContext = context; > >> } > > >> �...@override > >> public void onPerformSync(Account account, Bundle extras, > >> String authority, ContentProviderClient provider, > >> SyncResult syncResult) { > >> try { > >> ContactsSyncAdapterService.performSync(mContext, > >> account, > >> extras, > >> authority, provider, syncResult); > >> } catch (OperationCanceledException e) { > >> } > >> } > >> } > > >> �...@override > >> public void onCreate() { > >> super.onCreate(); > >> synchronized (sSyncAdapterLock) { > >> if (sSyncAdapter == null) { > >> sSyncAdapter = new SyncAdapterImpl > >> (getApplicationContext()); > >> } > >> } > >> } > > >> �...@override > >> public IBinder onBind(Intent intent) { > >> return sSyncAdapter.getSyncAdapterBinder(); > >> } > > >> private static void performSync(Context context, Account account, > >> Bundle extras, > >> String authority, ContentProviderClient provider, > >> SyncResult syncResult) > >> throws OperationCanceledException { > >> ContentResolver cr = context.getContentResolver(); > >> Log.i(TAG, "performSync: " + account.toString()); > >> } > >> } > > >> On Nov 23, 8:46 pm, Dan Dumont <[email protected]> wrote: > >> > Nice, thanks for doing that! I'll star it, I hope we get a response > >> soon. > > >> > On Mon, Nov 23, 2009 at 5:32 PM, Jerry Brady <[email protected]> > >> wrote: > >> > > Just filed a case for this: > > >> > >http://code.google.com/p/android/issues/detail?id=5009 > > >> > > On Nov 23, 1:47 pm, Jerry Brady <[email protected]> wrote: > >> > > > Dan, > > >> > > > My code and yours both work on the Droid, but there are some nasty > >> > > > side-effects. After adding an account with your application (or > >> mine) > >> > > > whenever you visit the "Accounts & Sync" settings screen, the system > >> > > > crashes hard and reboots. > > >> > > > 11-23 13:21:34.863: WARN/dalvikvm(1011): threadid=13: thread exiting > >> > > > with uncaught exception (group=0x4001b180) > >> > > > 11-23 13:21:34.863: ERROR/AndroidRuntime(1011): Uncaught handler: > >> > > > thread android.server.ServerThread exiting due to uncaught exception > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): *** EXCEPTION IN > >> > > > SYSTEM PROCESS. System will crash. > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): > >> > > > java.lang.NullPointerException > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > >> > > > com.android.settings.ManageAccountsSettings.onSyncStateUpdated > >> > > > (ManageAccountsSettings.java:187) > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > >> > > > com.android.settings.ManageAccountsSettings.onAccountsUpdated > >> > > > (ManageAccountsSettings.java:244) > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > >> > > > android.accounts.AccountManager$10.run(AccountManager.java:389) > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > >> > > > android.os.Handler.handleCallback(Handler.java:587) > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > >> > > > android.os.Handler.dispatchMessage(Handler.java:92) > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > >> > > > android.os.Looper.loop(Looper.java:123) > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > >> > > > com.android.server.ServerThread.run(SystemServer.java:428) > > >> > > > I'm looking at the source now to see if I can figure out what's > >> going > >> > > > on. If necessary, I'll file a case with the project if I find a bug > >> > > > in the Android source. > > >> > > > Cheers, > >> > > > Jerry > > >> > > > On Nov 23, 8:18 am, Jerry Brady <[email protected]> wrote: > > >> > > > > I'm going to be trying it on a Droid this morning. > > >> > > > > On Nov 21, 10:07 pm, Dan Dumont <[email protected]> wrote: > > >> > > > > > I get that exception in the emulator ( doesn't reboot though ) > > >> > > > > > I thought it was due to missing pieces of the emulator... > > >> > > > > > does logcat output anything? > > >> > > > > > On Sat, Nov 21, 2009 at 7:07 PM, NitroDesk <[email protected]> > >> > > wrote: > >> > > > > > > Any of you folks tried this on a Droid? > >> > > > > > > Simply installing the project that contains an Authenticator > >> in the > >> > > > > > > manfest and the other related items seems to cause the "Add > >> > > Account" > >> > > > > > > option in the account list on te droid to simply reoot the > >> phone > >> > > with > >> > > > > > > an exception. > >> > > > > > > Anyone else seen this or find a way to avoid this ? > >> > > > > > > -g > > >> > > > > > > On Nov 21, 9:04 am, Jerry Brady <[email protected]> > >> wrote: > >> > > > > > > > Dan, > > >> > > > > > > > Now I see what you are doing in your code and found the > >> reference > >> > > to > >> > > > > > > > AddAccountExplicitly(). I want to skip returning an intent > >> to > >> > > fire > >> > > > > > > > the an AccountAuthenticatorActivity and instead to return > >> > > > > > > > KEY_ACCOUNT_NAME and KEY_ACCOUNT_TYPE directly from my > >> > > > > > > > AbstractAccountAuthenticator's addAccount method whereas > >> your > >> > > code > >> > > > > > > > returns an intent that fires your authentication activity. > > >> > > > > > > > The main issue for me so far is that I... > > read more » -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

