My requirement is to add a contact to my user account, and this works accordingly.
The Settings -> + Add account screen displays a list of all applications that provide account management; that is, my application name is also displayed there. However, my requirement is not to display my application on this list .
Here are the classes:
AccountManagerActivity.java
public class AccountManagerActivity extends AccountAuthenticatorActivity { EditText etName, etPhone; Button btnSave; String strName, strPhone; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); etName = (EditText) findViewById(R.id.etName); etPhone = (EditText) findViewById(R.id.etPhone); btnSave = (Button) findViewById(R.id.btnSave); btnSave.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (etName.getText().toString() == null|| etName.getText().toString().equalsIgnoreCase("")|| etPhone.getText().toString() == null|| etPhone.getText().toString().equalsIgnoreCase("")) { Toast.makeText(getApplicationContext(),"Enter Name And Phone", Toast.LENGTH_LONG).show(); } else { strName = etName.getText().toString(); strPhone = etPhone.getText().toString(); addContact(); etName.setText(""); etPhone.setText(""); Toast.makeText(getApplicationContext(), "Contact Added",Toast.LENGTH_LONG).show(); } } }); AccountManager manager = AccountManager.get(this); String accountName = "Contact"; String password = "NULL"; String accountType = "com.example.contact"; final Account account = new Account(accountName, accountType); manager.addAccountExplicitly(account, password, null); final Intent intent = new Intent(); intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, accountName); intent.putExtra(AccountManager.KEY_ACCOUNTS, accountName); intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, accountType); intent.putExtra(AccountManager.KEY_AUTHTOKEN, accountType); this.setAccountAuthenticatorResult(intent.getExtras()); this.setResult(RESULT_OK, intent); } private void addContact() {
AccountAuthenticator.java
public class AccountAuthenticator extends AbstractAccountAuthenticator { private Context mContext; public AccountAuthenticator(Context context) { super(context); mContext = context; // TODO Auto-generated constructor stub } @Override public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException { return null; } @Override public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options) throws NetworkErrorException { // TODO Auto-generated method stub return null; } @Override public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) { // TODO Auto-generated method stub return null; } @Override public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException { // TODO Auto-generated method stub return null; } @Override public String getAuthTokenLabel(String authTokenType) { // TODO Auto-generated method stub return null; } @Override public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features) throws NetworkErrorException { // TODO Auto-generated method stub return null; } @Override public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException { // TODO Auto-generated method stub return null; } }
AuthenticationService.java
public class AuthenticationService extends Service { @Override public IBinder onBind(Intent intent) {
Mainfest
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.examples.AccountManager" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <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" /> <uses-permission android:name="android.permission.READ_SOCIAL_STREAM" /> <uses-permission android:name="android.permission.WRITE_SOCIAL_STREAM" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name"> <activity android:name="com.examples.AccountManager.AccountManagerActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.examples.AccountManager.core.AuthenticationService" 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> </application> </manifest>
Thanks for the comment comment. I found that we cannot hide our own Account Manager. I created a user account manager to save contacts to this account. I need to save contacts on a device / phone. If I specify the account name and type zero, than it will save on the device, but after deleting Gmail accounts from accounts, then all contacts will also be deleted. So please help me how to save contacts in a device that will not affect gmail accounts.
Any help would be appreciated. Thanks.