Скрыть значок приложения

Я делаю приложение для Android. Я хочу скрыть значок приложения в эмуляторе, и я хочу запустить приложение, нажав некоторые цифры, например 456 #. Есть ли способ сделать это?

    Чтобы скрыть значок приложения из программы запуска, вы можете сделать это

    PackageManager packageManager = context.getPackageManager(); ComponentName componentName = new ComponentName(context, LauncherActivity.class); packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 

    Чтобы запустить приложение, нажав номер, сначала добавьте разрешение в файле mainfest

      <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 

    Затем регистрируйте приемник

     <receiver android:name=".LaunchAppViaDialReceiver"> <intent-filter> <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> </intent-filter> </receiver> 

    Затем создайте класс приемника

      public class LaunchAppViaDialReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Bundle bundle = intent.getExtras(); if (null == bundle) return; String phoneNubmer = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); //here change the number to your desired number if (phoneNubmer.equals("12345")) { setResultData(null); Gaurdian.changeStealthMode(context, PackageManager.COMPONENT_ENABLED_STATE_ENABLED); Intent appIntent = new Intent(context, LauncherActivity.class); appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(appIntent); } } 

    Если вы хотите скрыть значок приложения, это хорошая идея, чтобы сначала показать значок и дать пользователю знать, как запустить приложение после исчезновения значка. Сначала создайте псевдоним активности в манифесте и переместите фильтр намерений. Таким образом вы можете отключить значок без отключения активности.

     <activity android:name=".MainActivity" android:label="@string/app_name" > </activity> <activity-alias android:name=".Launcher" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias> 

    Получите имя компонента псевдонима пусковой установки, используя имя вашего пакета:

     private static final ComponentName LAUNCHER_COMPONENT_NAME = new ComponentName( "your.package.name", "your.package.name.Launcher"); 

    Вы можете проверить, не отключена ли она …

     private boolean isLauncherIconVisible() { int enabledSetting = getPackageManager() .getComponentEnabledSetting(LAUNCHER_COMPONENT_NAME); return enabledSetting != PackageManager.COMPONENT_ENABLED_STATE_DISABLED; } 

    … и отключить его, когда это необходимо, после предоставления информации пользователю:

     private void hideLauncherIcon() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Important!"); builder.setMessage("To launch the app again, dial phone number 12345."); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { getPackageManager().setComponentEnabledSetting(LAUNCHER_COMPONENT_NAME, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } }); builder.setIcon(android.R.drawable.ic_dialog_alert); builder.show(); } 

    Для запуска с дозвона создайте широковещательный приемник:

     public class LaunchViaDialReceiver extends BroadcastReceiver { private static final String LAUNCHER_NUMBER = "12345"; @Override public void onReceive(Context context, Intent intent) { String phoneNubmer = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); if (LAUNCHER_NUMBER.equals(phoneNubmer)) { setResultData(null); Intent appIntent = new Intent(context, MainActivity.class); appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(appIntent); } } } 

    Добавьте его в манифест:

     <receiver android:name=".LaunchViaDialReceiver" > <intent-filter> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver> 

    И добавьте разрешение на манифест:

     <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 

    Ответ на первую часть вашего вопроса, попробуйте этот код:

     PackageManager pm = getApplicationContext().getPackageManager(); pm.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 

    Ваше приложение не будет видно, но пользователь все равно может найти его в настройках >> Приложения >> Управление приложением

    Этот ответ также может быть полезен для вас.

    Пожалуйста, не забудьте опубликовать свой ответ здесь, если вы уже достигли функциональности (нажав некоторое число и открыв наше приложение).

    Обратите внимание, что решение:

     PackageManager pm = getApplicationContext().getPackageManager(); pm.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 

    Сделает приложение не обновляемым из игры Google, поскольку ОС не найдет пакет после отключения этого компонента и не сможет его повторно установить, если приложение не удалено manullay (что не является удобным для пользователя способом)

     public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); hideapplication(); } private void hideapplication() { // TODO Auto-generated method stub PackageManager pm = getApplicationContext().getPackageManager(); pm.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } }