For anyone still interested.    I've made a bit of progress.   The google
project below now creates and lists accounts of the type for the project!

On Fri, Nov 13, 2009 at 9:39 PM, Dan Dumont <[email protected]> wrote:

> 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 <[email protected]> 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 <[email protected]>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 [email protected]
>>> To unsubscribe from this group, send email to
>>> [email protected]<android-developers%[email protected]>
>>> 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 [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

Reply via email to