How to hide your task manager user from settings user interface

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() { // TODO Auto-generated method stub ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); int rawContactInsertIndex = ops.size(); ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) .withValue(RawContacts.SYNC1, null) .withValue(RawContacts.SYNC2, null) .withValue(RawContacts.SYNC3, null) .withValue(RawContacts.SYNC4, null) .withValue(RawContacts.ACCOUNT_TYPE, "com.example.contact") .withValue(RawContacts.ACCOUNT_NAME, "contact").build()); ops.add(ContentProviderOperation .newInsert(Data.CONTENT_URI) .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue(Data.SYNC1, null).withValue(Data.SYNC2, null) .withValue(Data.SYNC3, null).withValue(Data.SYNC4, null) .withValue(StructuredName.DISPLAY_NAME, strName) // Name of the // person .build()); ops.add(ContentProviderOperation .newInsert(Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue(Phone.NUMBER, strPhone) // Number of the person .withValue(Phone.TYPE, Phone.TYPE_MOBILE).build()); // Type of // mobile // number try { ContentProviderResult[] res = getContentResolver().applyBatch( ContactsContract.AUTHORITY, ops); } catch (RemoteException e) { Log.e("RemoteException", "" + e); } catch (OperationApplicationException e) { Log.e("OperationApplicationException", "" + e); } } } 

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) { // TODO Auto-generated method stub return new AccountAuthenticator(this).getIBinder(); } } 

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.

+6
source share
2 answers

It is not possible to directly modify the Settings application, as @shoe rat said, if you have access or any link to the OEM / ROM manufacturer, then this is possible.

+1
source

Unfortunately, you cannot do this.

Each authenticator must be on this list to inform the user about all the services to which he has connected, which allows him to disconnect at any time in the standard way (you do not need to find the disconnect button for a specific application / service).

+3
source

All Articles