To facilitate the discussion around this topic, I've started up a project
over here:
http://code.google.com/p/androidaccounts/

<http://code.google.com/p/androidaccounts/>If anyone is interested in
pitching in and writing some examples, let me know so I can add you.
The current state of the project is as far as I've gotten to understanding
what is available so far... and I'm stumped as to why new accounts don't
seem to persist after their creation ( as far as the AccountsTester app is
concerned ).

On Fri, Nov 13, 2009 at 7:40 PM, Dan Dumont <ddum...@gmail.com> wrote:

> I've gotten a bit further than you.
>
> The account manager seems to want to store AccountName+Type pairs, and have
> an AccountAuthenticator handle the storage and dirty bits of the actual
> authentication and credential storage.
>
> You will need to create an AccountAuthenticator from the
> AbstractAccountAuthenticator class.
> You will also need to define a Service in your app.   See
> http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html
> This service must be set up in the Manifest like so:  (ripped from link
> above)
>
>  <intent-filter>
>      <action android:name="android.accounts.AccountAuthenticator" />
>    </intent-filter>
>    <meta-data android:name="android.accounts.AccountAuthenticator"
>              android:resource="@xml/authenticator" />
>
> You can take a look at the link for what the resource must be...
>
> After you end up hooking all that crap up, you can do this in your service:
>  public IBinder onBind(Intent intent) {
>  IBinder ret = null;
>  if
> (intent.getAction().equals(android.accounts.AccountManager.ACTION_AUTHENTICATOR_INTENT))
>  ret = getAuthenticator().getIBinder();
>  return ret;
>  }
>
> private AccountAuthenticator getSametimeAuthenticator() {
>  if (_aa == null)
> _aa = new AccountAuthenticator(this);
> return _aa;
>  }
>
> So when you finally have all this set up.    You should see your account
> type listed in the AccountTester application next to the "Corporate" type.
> To get anything meaningful to happen when you click Add, you need to do
> this in your AccountAuthenticator:
>
> public Bundle addAccount(AccountAuthenticatorResponse response, String
> accountType, String authTokenType, String[] requiredFeatures, Bundle
> options) throws NetworkErrorException {
>  Bundle ret = new Bundle();
>  Intent intent = new Intent(_context, AccountAuthenticatorActivity.class);
>  intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE,
> response);
>  ret.putParcelable(AccountManager.KEY_INTENT, intent);
> return ret;
> }
>
> This basically says that...   I'm going to prompt the user to enter
> credentials using the MyAccountAuthenticatorActivity class.
> The MyAccountAuthenticatorActivity activity should probably extend the
> class AccountAuthenticatorActivity.   Here's mine:
>
> public class MyAccountAuthenticatorActivity extends
> AccountAuthenticatorActivity {
> protected void onCreate(Bundle icicle) {
>  super.onCreate(icicle);
> setContentView(R.layout.new_account);
>  final Button done = (Button)findViewById(R.id.new_account_done);
> final EditText server = (EditText)findViewById(R.id.new_account_server);
>  final EditText username =
> (EditText)findViewById(R.id.new_account_username);
> final EditText password =
> (EditText)findViewById(R.id.new_account_password);
>  done.setOnClickListener(new OnClickListener() {
> public void onClick(View v) {
>  Bundle result = new Bundle();
> result.putString(AccountManager.KEY_ACCOUNT_NAME,
> username.getText().toString());
>  result.putString(AccountManager.KEY_ACCOUNT_TYPE,
> getString(R.string.ACCOUNT_TYPE));
> setAccountAuthenticatorResult(result);
>  finish();
> }
> });
>  }
> }
>
> The bundle you would normally pass back if you had no Activity to enter
> credentials is passed back with setAccountAuthenticatorResult(result);
> and finish();
>
>
> That's about as far as i've gotten.    When i click Add in the
> AccountsTester app, the activity to enter creds is launched, and whent he
> done button is pressed I get this message in the LogCat:
> 11-13 19:21:58.488: DEBUG/AccountsTester(291): account added:
> Bundle[{accountType=com.my.package.app.auth.account_type,
> authAccount=testaccout}]
>
> But the AccountsTester app refuses to display my accounts that it said it
> created.
> without being able to look at the source for at least the AccountsTester
> app, I'm pretty stuck right now...
> Does anyone out there have ANY useful information on how to use this stuff?
>   Or is it all locked up in a buttbuddy secret vault between google and
> motorola?
>
>
> On Thu, Nov 12, 2009 at 8:27 PM, Jerry Brady <jerry.br...@gmail.com>wrote:
>
>> I'm trying to hook up a new account for an application to use that
>> will ultimately sync PIM data.  The application is already working for
>> API levels 3 & 4, but at API 5, I'm having some trouble with the
>> introduction of accounts and the AccountManager.
>>
>> I've searched the groups and the docs and gotten part way there, but
>> for some reason there isn't any I can get an actual account created.
>> I've tried both on the Moto Droid and in the emulator.
>>
>> I have a service that implements everything as required by the
>> documentation for AbstractAccountAuthenticator. I've confirmed that my
>> account is not present my iterating the results from
>> AccountManager.getAccounts().
>>
>> My service's authenticator shows up in when I iterate the result from
>> AccountManager.getAuthenticatorTypes().  The name and package are both
>> listed.
>>
>> But when I have an activity call to add an account with AddAccount,
>> the call returns, but the future bundle never finishes.  There is
>> nothing in logs indicates anything is happening and it's almost as if
>> there is an Intent fired by the call to addAccount() that I'm not
>> setup to catch.
>>
>> Since the eclair source isn't available yet, I can't look into it on
>> my own and I'm asking for some help from people who know this part of
>> 2.0 or have access to the source to help me find what I am missing.
>>
>> In my activity, after using an initialized AccountManager to check my
>> account, I call to set one up:
>>
>> private final static String MY_ACCOUNT_TYPE = "com.mydomain";
>> AccountManager am = AccountManager.get(context);
>> AccountManagerFuture<Bundle> future;
>> Bundle result;
>>
>> future = am.addAccount(MS_ACCOUNT_TYPE, null, null, null, null, null,
>> null);
>>
>> Log.d(TAG, "returned from am.AddAccount");
>> try {
>>    result = future.getResult();
>> } catch ....
>>
>> When run, getResult() never finishes, ultimately blocking my activity
>> until it's stopped.  I don't know where the system goes after my call
>> to getResult().
>>
>> The service I have created is configured just the like example from
>> the docs:
>>    <service android:enabled="true"
>>        android:exported="true" android:name="AccountService"
>> android:label="Sync Account">
>>        <intent-filter>
>>                <action
>> android:name="android.accounts.AccountAuthenticator" />
>>         </intent-filter>
>>                <meta-data
>> android:name="android.accounts.AccountAuthenticator"
>>             android:resource="@xml/authenticator" />
>>    </service>
>>
>> I'm wondering if there is a different intent I need to catch for
>> account creation.  All of the service's lifecycle methods have
>> overrides and logging.  It doesn't look as if my authenticator service
>> is ever instantiated.
>>
>> The only other question I had was in AbstractAccountAuthenticator
>> because the docs read that you must extend this class and return the
>> correct value for getIBinder().  Since you can't extend from more than
>> one class, I assumed this meant I needed to have my
>> AccountAuthenticator class treat the abstract class as an interface
>> and the class extends Binder to support the getIBinder() method.
>>
>> I'd appreciate any insight or help anyone can offer.
>>
>> Cheers,
>> Jerry
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Android Developers" group.
>> To post to this group, send email to android-developers@googlegroups.com
>> To unsubscribe from this group, send email to
>> android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en
>
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to