Android App-Symbol programmgesteuert ein-/ausblenden

Lesezeit: 10 Minuten

Android App Symbol programmgesteuert ein ausblenden
PankajAndroid

Ich hatte den folgenden Code zum Ausblenden des App-Symbols programmgesteuert verwendet

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

Jetzt möchte ich das Symbol programmgesteuert sichtbar machen

  • Ich habe danach gesucht, aber wo muss ich diesen Code schreiben?

    – Asad Raza

    17. Mai 20 um 22:04 Uhr

  • wie dynamisch der Paketname übergeben und dieses bestimmte Appicon im Gerät ausgeblendet wird

    – Harscha

    2. Juli 2020 um 5:31 Uhr


Android App Symbol programmgesteuert ein ausblenden
CoronaPintu

Verstecken Sie das Symbol der App mit dem folgenden Code:

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);

So bringen Sie das Symbol der App zurück.

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

Wichtige Bearbeitung:

Gemäß Dokumenteab Android Q (API 29) sind alle App-Icons im Launcher sichtbar, egal was passiert, es sei denn:

Ab Android Q erscheint mindestens eine der Aktivitäten oder synthetisierten Aktivitäten der App in der zurückgegebenen Liste, es sei denn, die App erfüllt mindestens eine der folgenden Bedingungen:

  • Die App ist eine System-App.
  • Die App fordert keine Berechtigungen an.
  • Das Tag im App-Manifest enthält keine untergeordneten Elemente, die App-Komponenten darstellen.

Darüber hinaus blendet das System synthetisierte Aktivitäten für einige oder alle Apps in den folgenden unternehmensbezogenen Fällen aus:

  • Wenn es sich bei dem Gerät um ein vollständig verwaltetes Gerät handelt, werden in der zurückgegebenen Liste keine synthetisierten Aktivitäten für eine App angezeigt.
  • Wenn der aktuelle Benutzer über ein Arbeitsprofil verfügt, werden in der zurückgegebenen Liste keine synthetisierten Aktivitäten für die geschäftlichen Apps des Benutzers angezeigt.

  • Hallo, Ihr Code funktioniert perfekt, aber ich habe eine knifflige Sache zu tun. Nach dem Ausblenden des Symbols möchte ich die App starten, wenn der Benutzer eine bestimmte Nummer wie #007 anruft. Ich habe einen Empfänger für ausgehende Anrufe implementiert und eine Nummer abgeglichen, die ich versuche, meine Hauptaktivität zu starten, aber es gibt mir ActivityNotFoundException. Könnt ihr mir helfen, wenn ihr eine Ahnung habt..

    – Skorpion

    23. April 14 um 5:11 Uhr

  • @Scorpion ja, du hast Recht, das wird deine Aktivität zerstören, du kannst nicht auf diese Aktivität zugreifen. Dafür müssen Sie einen anderen Weg verwenden.

    – CoronaPintu

    23. April 14 um 5:12 Uhr


  • @Scorpion für dieses Problem hatte ich ungefähr 2 Tage lang Forschung und Entwicklung. Ja, jetzt geben Sie Ihnen einfach die Lösung, dass Sie Ihre Hauptaktivität verstecken werden, sobald Sie sie verstecken, wird die Aktivität nicht gefunden, sie wird zerstört, also müssen Sie dieselbe andere Aktivität wie mainActivity2 und erstellen Sie müssen den booleschen Wert in Sharerd speichern, ob das Symbol versteckt ist, dann müssen Sie mainActivity2 öffnen, sonst MainActivity … bitte überprüfen Sie es

    – CoronaPintu

    23. April 14 um 5:40 Uhr


  • Gleiche Anfrage von Ihnen, dass Ihre Lösung funktioniert. Das App-Symbol wird jedoch bis zum Neustart weiterhin angezeigt. Irgendeine Lösung dafür?? @CoronaPintu

    – Muhammad Zeeshan Karamat

    15. Juli 14 um 17:35 Uhr

  • Ich verstehe, dass es eine Weile her ist, seit es gefragt wurde, aber ich denke, es sollte eine andere Aktivität geben, die nicht mit einem Launcher-Intent-Filter definiert ist (daher wird sie nicht im App-Launcher angezeigt), die den Intent-Filter für ausgehende Anrufe haben wird, um die zu aktivieren Hauptaktivität.

    – Didi Kohen

    22. Februar 16 um 12:45 Uhr

1643908389 584 Android App Symbol programmgesteuert ein ausblenden
Sanjay

Beste Möglichkeit, das Anwendungssymbol vor dem Launcher zu verbergen, den Sie verwenden können

<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>

In Ihrem Manifest MainActivity

  <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
        </intent-filter>
    </activity>

fügen Sie auch eine Verwendungsfunktion hinzu Manifest Schild

<uses-feature
    android:name="android.software.leanback"
    android:required="true" />

  • Dies ist definitiv die beste und sauberste Lösung im Vergleich zu anderen früheren Lösungen. Danke vielmals

    – Nwawel A Iroume

    18. Juni 18 um 16:14 Uhr

  • ist das nur für TV Anwendung

    – CrazyMind

    6. September 18 um 5:07 Uhr

  • Irgendeine Möglichkeit, dies manuell zu handhaben? @Ahmad Ja, es funktioniert gut, aber ich habe keine Möglichkeit gefunden, dies manuell zu handhaben. – Nwawel A Iroume hast du das implementiert? Bitte beraten. daran hängen seit vielen Tagen

    – RaRa

    20. Mai 20 um 7:27 Uhr

  • @RaRa Ich verwende Java-Code, um das Symbol auszublenden, aber unter Android 10 funktioniert nur mein Code nicht.

    – Achmad

    21. Mai 20 um 7:36 Uhr

  • wie öffnet man es?

    – Naveen Kumar

    13. Juni 2020 um 13:12 Uhr

Um das Symbol auszublenden, verwenden Sie Folgendes:

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

und zum Einblenden des Symbols:

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

WICHTIG:
Es ist irgendwie schwierig, wenn Sie etwas mit der Hauptaktivität in Ihrer App tun müssen, wenn sie ausgeblendet ist. Sie werden mit einem konfrontiert ActivityNotFoundException. Damit es funktioniert, sollten Sie das Symbol einblenden, bevor Sie etwas mit Ihrer Hauptaktivität tun, und es wieder ausblenden, nachdem Sie fertig sind.
einfache Schritte: 1-Anruf hier erhalten
2-Symbol einblenden
3 Hauptaktivität starten
4-Erledigen Sie Ihre Dinge bei der Hauptaktivität
5-Symbol wieder ausblenden

  • Wie unterscheidet sich dies von dem Code, der ein Jahr zuvor veröffentlicht wurde? Sollte Ihr Vorschlag nicht ein Kommentar dazu sein?

    – Verlassener Einkaufswagen

    23. Januar 2020 um 22:04 Uhr

  • @AbandonedCart Meine Antwort zeigt auch, wie Sie mit MainActivity arbeiten können, während Sie es deaktiviert haben. Es ist sehr wahrscheinlich, dass Sie ActivityNotFoundException erhalten, wenn Sie diesem Ansatz folgen, um Ihre App zu verbergen, aber keine der Antworten enthält keine Details dazu. Deshalb habe ich meine Antwort als neu hinzugefügt, damit die Leute sie sehen können.

    – Amir Oveisi

    27. Januar 2020 um 7:23 Uhr

  • Die Frage ist, wie man die App wieder sichtbar macht, nachdem sie versteckt war. Der einzige ursprüngliche Teil der Antwort scheint eine Methode zu sein, die für die Frage nicht wirklich relevant ist, da das OP nicht fragt, welchen Fehler es erhält, wenn es versucht, es im verborgenen Zustand zu verwenden, sondern wie es sichtbar gemacht werden kann (Beheben des Fehlers durch Ursprünglich). Es hätte ein Kommentar werden sollen.

    – Verlassener Einkaufswagen

    28. Januar 20 um 19:21 Uhr


Laden Sie den Quellcode hier herunter (Das App-Symbol in Android programmgesteuert ein- und ausblenden)

Hauptaktivität.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;
    }

}

Danke!

1643908390 157 Android App Symbol programmgesteuert ein ausblenden
Farid

Diese Funktion wird ab Android Q (API 29) nicht mehr unterstützt. Details wurden auch zu einer früheren Antwort hinzugefügt. Das Symbol Ihrer App ist sichtbar, es sei denn, es erfüllt eine der folgenden Bedingungen, die in der angegeben sind Dokumente:

  • Die App ist eine System-App.
  • Die App fordert keine Berechtigungen an.
  • Das Tag im App-Manifest enthält keine untergeordneten Elemente, die App-Komponenten darstellen.

1643908390 886 Android App Symbol programmgesteuert ein ausblenden
Azhagthott

Das habe ich bisher gefunden, leider ist es keine Antwort auf die ursprüngliche Frage, nur Alternativen

  1. Dies ist die erste Option, aber wenn Ihre Apps eine Genehmigung benötigen und nicht mehr nützlich sind (zumindest in Android 10), wie @CoronaPintu hier erwähnt https://stackoverflow.com/a/22754642/1712446, funktioniert diese Methode, hat aber viele Einschränkungen

    private void hideIcon(Context context, Class activityToHide) {
        PackageManager packageManager = getPackageManager();
        ComponentName componentName = new ComponentName(context, activityToHide);
        packageManager.setComponentEnabledSetting(
            componentName,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
    }
    
  2. Verwenden Sie die gleiche Methode wie oben plus adb-Befehlauch wenn Ihre App eine Berechtigung benötigt, funktioniert diese Alternative, aber Sie müssen Zugriff auf Geräte haben und eine Verbindung zu einem PC herstellen, dann führen Sie diesen Befehl aus

    verstecken:
    $adb shell settings put global show_hidden_icon_apps_enabled 0

    zeigen:
    $adb shell settings put global show_hidden_icon_apps_enabled 1

Nur für den Fall, dass Sie diesen Befehl nicht über die App ausführen können

  1. Eine andere Option ist DevicePolicyManager

    private void hideIcon(Context context, Class activityToHide) {
        ComponentName componentName = new ComponentName(context, activityToHide);
            DevicePolicyManager devicePolicyManager = (DevicePolicyManager) getSystemService(getApplicationContext().DEVICE_POLICY_SERVICE);
            devicePolicyManager.setApplicationHidden(componentName, "your.package.name.here", true);
    }
    

Diese Methode funktioniert, aber wir haben wieder einige Einschränkungen, Sie müssen den Gerätebesitzermodus aktivieren, Sie können weitere Informationen finden Hier

Um diesen Modus zu aktivieren, müssen Sie diesen adb-Befehl ausführen

adb shell dpm set-device-owner my.package.name/.DevAdminReceiver

Sie können diesen Befehl jedoch über die App ausführen

Runtime.getRuntime().exec("dpm set-device-owner my.package.name/.DevAdminReceiver");    

Wenn das Telefon jedoch bereits ein Konto eingerichtet hat, schlägt diese Methode mit dem nächsten Fehler fehl:

java.lang.IllegalStateException: Not allowed to set the device owner because there are already several users on the device

.

757920cookie-checkAndroid App-Symbol programmgesteuert ein-/ausblenden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy