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
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
Sanjay
Beste Möglichkeit, das Anwendungssymbol vor dem Launcher zu verbergen, den Sie verwenden können
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.
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!
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.
Azhagthott
Das habe ich bisher gefunden, leider ist es keine Antwort auf die ursprüngliche Frage, nur Alternativen
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
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
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
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