Android以编程方式隐藏/取消隐藏应用程序图标

我以编程方式使用下面的代码隐藏应用程序图标

try{ PackageManager p = getPackageManager(); p.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); }catch (Exception e) { e.printStackTrace(); } 

现在我想以编程方式显示图标

使用以下代码隐藏应用的图标:

 PackageManager p = getPackageManager(); ComponentName componentName = new ComponentName(this, com.apps.MainActivity.class); // activity which is first time open in manifiest file which is declare as <category android:name="android.intent.category.LAUNCHER" /> p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 

这里是如何带回应用程序的图标。

 PackageManager p = getPackageManager(); ComponentName componentName = new ComponentName(this, com.apps.MainActivity.class); p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 

要隐藏图标使用这个:

 PackageManager p = getPackageManager(); ComponentName componentName = new ComponentName(this, com.apps.MainActivity.class); p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 

并取消隐藏图标:

 PackageManager p = getPackageManager(); ComponentName componentName = new ComponentName(this, com.apps.MainActivity.class); p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 

重要提示:在隐藏应用程序时,如果您需要在应用程序的主要活动中执行某些操作,则会有些棘手。 你将面临一个ActivityNotFoundException 。 为了使它工作,你应该在做任何事情之前取消隐藏图标到你的主要活动,并在完成后再次隐藏。
简单的步骤:在这里收到一个电话
2 – 取消隐藏的图标
3发起主要活动
4,在主要活动上做你的事情
再次隐藏图标

只要使用下面的代码。

  PackageManager p = getPackageManager(); ComponentName componentName = new ComponentName("com.example.removeicon","com.example.removeicon.LauncherActivity"); p.setComponentEnabledSetting(componentName , PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 

请注意,图标可能不会消失,直到下一次重新启动。

从这里下载源代码( 以编程方式在android中隐藏和取消隐藏应用程序图标 )

MainActivity.java:

 package com.deepshikha.hideappicon; import android.Manifest; import android.app.ProgressDialog; import android.content.ComponentName; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.os.Handler; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener { Button btn_hide; private static final ComponentName LAUNCHER_COMPONENT_NAME = new ComponentName( "com.deepshikha.hideappicon", "com.deepshikha.hideappicon.Launcher"); public static int REQUEST_PERMISSIONS = 1; boolean boolean_permission; ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); fn_permission(); listener(); } private void init() { btn_hide = (Button) findViewById(R.id.btn_hide); progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setTitle("Alert"); progressDialog.setMessage("Please wait"); if (isLauncherIconVisible()) { btn_hide.setText("Hide"); } else { btn_hide.setText("Unhide"); } } private void listener() { btn_hide.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_hide: progressDialog.show(); new Handler().postDelayed(new Runnable() { @Override public void run() { progressDialog.dismiss(); if (isLauncherIconVisible()) { btn_hide.setText("Hide"); } else { btn_hide.setText("Unhide"); } } }, 10000); if (boolean_permission) { if (isLauncherIconVisible()) { fn_hideicon(); } else { fn_unhide(); } } else { Toast.makeText(getApplicationContext(), "Please allow the permission", Toast.LENGTH_LONG).show(); } break; } } private boolean isLauncherIconVisible() { int enabledSetting = getPackageManager().getComponentEnabledSetting(LAUNCHER_COMPONENT_NAME); return enabledSetting != PackageManager.COMPONENT_ENABLED_STATE_DISABLED; } private void fn_hideicon() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Important!"); builder.setMessage("To launch the app again, dial phone number 1234567890"); 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(); } private void fn_unhide() { PackageManager p = getPackageManager(); ComponentName componentName = new ComponentName(this, com.deepshikha.hideappicon.MainActivity.class); p.setComponentEnabledSetting(LAUNCHER_COMPONENT_NAME, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); } private void fn_permission() { if ((ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.PROCESS_OUTGOING_CALLS) != PackageManager.PERMISSION_GRANTED) || (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.PROCESS_OUTGOING_CALLS) != PackageManager.PERMISSION_GRANTED)) { if ((ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, android.Manifest.permission.PROCESS_OUTGOING_CALLS))) { } else { ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.PROCESS_OUTGOING_CALLS}, REQUEST_PERMISSIONS); } if ((ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.PROCESS_OUTGOING_CALLS))) { } else { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.PROCESS_OUTGOING_CALLS}, REQUEST_PERMISSIONS); } } else { boolean_permission = true; } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_PERMISSIONS) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { boolean_permission = true; } else { Toast.makeText(getApplicationContext(), "Please allow the permission", Toast.LENGTH_LONG).show(); } } } } 

LaunchAppReceiver.java:

 package com.deepshikha.hideappicon; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; /** * Created by deepshikha on 9/6/17. */ public class LaunchAppReceiver extends BroadcastReceiver { String LAUNCHER_NUMBER = "1234567890"; private static final ComponentName LAUNCHER_COMPONENT_NAME = new ComponentName( "com.deepshikha.hideappicon", "com.deepshikha.hideappicon.Launcher"); @Override public void onReceive(Context context, Intent intent) { String phoneNubmer = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); if (LAUNCHER_NUMBER.equals(phoneNubmer)) { setResultData(null); if (isLauncherIconVisible(context)) { } else { Intent appIntent = new Intent(context, MainActivity.class); appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(appIntent); } } } private boolean isLauncherIconVisible(Context context) { int enabledSetting = context.getPackageManager().getComponentEnabledSetting(LAUNCHER_COMPONENT_NAME); return enabledSetting != PackageManager.COMPONENT_ENABLED_STATE_DISABLED; } } 

谢谢!