androidaccountmanagerandroid-accountandroid-authenticator

Android Account Authenticator edit Email Id Credentials


When i login with test1@gmail.com in my application.It generate account successfully with my email like this

enter image description here

Now i logout and login with different email like test2@gmail.com then it generate account like this

enter image description here

I want to know that which is the best way

1) Remove first account and add second account

2) Update first account with second if it is possible to update it.


What is Problem I am getting actually?

If I remove and again add account using addAccountExplicitly it takes some time for creating new account so my next code is executed and account returns null.

Is is possible to update account using the help of updateCredentials if yes then how ??

Edited:

What I do actually?

Is there any other solution to update that Email Id?


Solution

  • I got solution of this problem.

    Question: Removing/Adding Account remains null account object

    Solution 1:

    First I removed account using removeAccount() and then tried to addAccountExplicitly BUT removeAccount() taking time to execute in background thread while addAccountExplicitly called and doing further process.

    So I changed my flow, as I used removeAccount method of AccountManager class and doing whole process in that handler, So I write my code inside the callback area.

     if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
         mAccountManager.removeAccount(accounts[0], LoginActivity.this, new AccountManagerCallback<Bundle>() {
             @Override
             public void run(AccountManagerFuture<Bundle> future) {
    
                 // Creating the account on the device and setting the auth token we got
                 // (Not setting the auth token will cause another call to the server to authenticate the user)
                 mAccountManager.addAccountExplicitly(account, accountPassword, intent.getBundleExtra(AccountManager.KEY_USERDATA));
                 mAccountManager.setAuthToken(account, authTokenType, authToken);
    
                 /**
                  * Setting for Sync Adapter
                  * Syncing Configuration
                  */
                  SyncAdapter.configSyncAdapter(mContext);
            }
        }, null);
    
    } else {
    
        mAccountManager.removeAccount(accounts[0], new AccountManagerCallback<Boolean>() {
            @Override
            public void run(AccountManagerFuture<Boolean> future) {
    
                // Creating the account on the device and setting the auth token we got
                // (Not setting the auth token will cause another call to the server to authenticate the user)
                mAccountManager.addAccountExplicitly(account, accountPassword, intent.getBundleExtra(AccountManager.KEY_USERDATA));
                mAccountManager.setAuthToken(account, authTokenType, authToken);
    
                /**
                 * Setting for Sync Adapter
                 * Syncing Configuration
                 */
                 SyncAdapter.configSyncAdapter(mContext);
            }
        }, null);
    }
    

    Solution 2:

    I found method called renameAccount() but it require minimum sdk version 21. As per docs:

    Rename the specified Account. This is equivalent to removing the existing account and adding a new renamed account with the old account's user data.

    It is safe to call this method from the main thread.

    Thank you.