Einstellung „Geschützte Apps“ auf Huawei-Handys und Umgang damit

134

Ich habe ein Huawei P8 mit Android 5.0, das ich zum Testen einer App verwende. Die App muss im Hintergrund ausgeführt werden, da sie BLE-Regionen verfolgt.

Ich habe festgestellt, dass Huawei eine "Funktion" namens "Geschützte Apps" eingebaut hat, auf die über die Telefoneinstellungen (Akku-Manager> Geschützte Apps) zugegriffen werden kann. Auf diese Weise können ausgewählte Apps nach dem Ausschalten des Bildschirms weiter ausgeführt werden.

Sinnvoll für Huawei, aber leider für mich sieht es so aus, als wäre es Opt-In, dh Apps sind standardmäßig deaktiviert und Sie müssen sie manuell eingeben. Dies ist kein Showstopper, da ich Benutzer in einer FAQ oder in gedruckter Form beraten kann Dokumentation über das Update, aber ich habe kürzlich Tinder installiert (zu Forschungszwecken!) und festgestellt, dass es automatisch in die geschützte Liste aufgenommen wurde.

Weiß jemand, wie ich das für meine App machen kann? Ist es eine Einstellung im Manifest? Ist es etwas, das Huawei für Tinder aktiviert hat, weil es eine beliebte App ist?

jaseelder
quelle
@agamov, nein, ich konnte keine weiteren Informationen dazu finden. Ich habe gerade eine Zeile in die Beschreibung im Play Store eingefügt, in der es darum geht, geschützte Apps einzuschalten.
Jaseelder
@ TejasPatel, nein, ich hörte auf zu versuchen, es zu lösen und informierte nur Benutzer in der Beschreibung
jaseelder

Antworten:

34
if("huawei".equalsIgnoreCase(android.os.Build.MANUFACTURER) && !sp.getBoolean("protected",false)) {
        AlertDialog.Builder builder  = new AlertDialog.Builder(this);
        builder.setTitle(R.string.huawei_headline).setMessage(R.string.huawei_text)
                .setPositiveButton(R.string.go_to_protected, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Intent intent = new Intent();
                        intent.setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity"));
                        startActivity(intent);
                        sp.edit().putBoolean("protected",true).commit();
                    }
                }).create().show();
    }
Eran Katsav
quelle
Bis es eine Möglichkeit gibt zu wissen, ob die App geschützt wurde oder nicht, ist dies das Beste, aber um zu vermeiden, dass sie jedes Mal angezeigt wird, habe ich die Meldung "Nicht mehr anzeigen" und die Meldung lautet "Wenn Ihnen mehr berechnet wird, wenn" Sie schützen nicht "und die Aktionen sind" ignorieren, ich werde es riskieren "oder" zu Einstellungen gehen "
Saik Caskey
1
Gibt es etwas Ähnliches für ASUS Auto-Start Manager?
Xan
3
Ja, @Xan. Erstellen Sie einfach den Komponentennamen wie folgt:ComponentName("com.asus.mobilemanager","com.asus.mobilemanager.autostart.AutoStartActivity"));
Michel Fortes
2
Können Sie bitte erklären, woher das "sp" -Objekt kommt? wie hier verwendet? sp.edit().putBoolean("protected",true).commit();seit ich verstehe, ändern Sie dort den Wert in "geschütztes Recht"?
Leonardo G.
2
@ LeonardoG. : ziemlich sicher, dass "sp" für SharedPreferences steht, final SharedPreferences sp = getSharedPreferences ("ProtectedApps", Context.MODE_PRIVATE);
Papesky
76

Das Manifest enthält keine Einstellung, und Huawei hat Tinder aktiviert, da es sich um eine beliebte App handelt. Es gibt keine Möglichkeit festzustellen, ob Apps geschützt sind.

Auf jeden Fall habe ich ifHuaweiAlert()in onCreate()eine zeigen AlertDialog:

private void ifHuaweiAlert() {
    final SharedPreferences settings = getSharedPreferences("ProtectedApps", MODE_PRIVATE);
    final String saveIfSkip = "skipProtectedAppsMessage";
    boolean skipMessage = settings.getBoolean(saveIfSkip, false);
    if (!skipMessage) {
        final SharedPreferences.Editor editor = settings.edit();
        Intent intent = new Intent();
        intent.setClassName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity");
        if (isCallable(intent)) {
            final AppCompatCheckBox dontShowAgain = new AppCompatCheckBox(this);
            dontShowAgain.setText("Do not show again");
            dontShowAgain.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    editor.putBoolean(saveIfSkip, isChecked);
                    editor.apply();
                }
            });

            new AlertDialog.Builder(this)
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .setTitle("Huawei Protected Apps")
                    .setMessage(String.format("%s requires to be enabled in 'Protected Apps' to function properly.%n", getString(R.string.app_name)))
                    .setView(dontShowAgain)
                    .setPositiveButton("Protected Apps", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            huaweiProtectedApps();
                        }
                    })
                    .setNegativeButton(android.R.string.cancel, null)
                    .show();
        } else {
            editor.putBoolean(saveIfSkip, true);
            editor.apply();
        }
    }
}

private boolean isCallable(Intent intent) {
    List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
            PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

private void huaweiProtectedApps() {
    try {
        String cmd = "am start -n com.huawei.systemmanager/.optimize.process.ProtectActivity";
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            cmd += " --user " + getUserSerial();
        }
        Runtime.getRuntime().exec(cmd);
    } catch (IOException ignored) {
    }
}

private String getUserSerial() {
    //noinspection ResourceType
    Object userManager = getSystemService("user");
    if (null == userManager) return "";

    try {
        Method myUserHandleMethod = android.os.Process.class.getMethod("myUserHandle", (Class<?>[]) null);
        Object myUserHandle = myUserHandleMethod.invoke(android.os.Process.class, (Object[]) null);
        Method getSerialNumberForUser = userManager.getClass().getMethod("getSerialNumberForUser", myUserHandle.getClass());
        Long userSerial = (Long) getSerialNumberForUser.invoke(userManager, myUserHandle);
        if (userSerial != null) {
            return String.valueOf(userSerial);
        } else {
            return "";
        }
    } catch (NoSuchMethodException | IllegalArgumentException | InvocationTargetException | IllegalAccessException ignored) {
    }
    return "";
}
Aiuspaktyn
quelle
7
Wie haben Sie den Klassennamen "com.huawei.systemmanager.optimize.process.ProtectActivity" gefunden? Ich möchte etwas Ähnliches für den Ausdauermodus unter Sony implementieren, kenne aber den Paketnamen "Ausdauer" und den Klassennamen des Bildschirms "Außer Apps" in den Ausdauereinstellungen nicht.
David Riha
2
Wenn Paketname und Klassenname bekannt sind, können Sie den Bildschirm mit Absicht ganz einfach öffnen. Code unten. Intent intent = new Intent (); intent.setComponent (neuer Komponentenname ("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity")); startActivity (Absicht);
Kinsell
1
David, deine beste Wahl ist die logCat. Gehen Sie einfach zur Einstellungsseite und lassen Sie die logCat geöffnet.
Skynet
1
Kann ich für meine Anwendung energieintensiv einstellen?
sonnv1368
4
Richtiger Paketname für Huawei P20: com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity
rsicarelli
36

+1 für Pierre für seine großartige Lösung, die für mehrere Gerätehersteller (Huawei, asus, oppo ...) funktioniert.

Ich wollte seinen Code in meiner Android-App verwenden, die in Java ist. Ich habe meinen Code von den Antworten von Pierre und Aiuspaktyn inspiriert .

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Build;
import android.support.v7.widget.AppCompatCheckBox;
import android.widget.CompoundButton;
import java.util.List;

public class Utils {

public static void startPowerSaverIntent(Context context) {
    SharedPreferences settings = context.getSharedPreferences("ProtectedApps", Context.MODE_PRIVATE);
    boolean skipMessage = settings.getBoolean("skipProtectedAppCheck", false);
    if (!skipMessage) {
        final SharedPreferences.Editor editor = settings.edit();
        boolean foundCorrectIntent = false;
        for (Intent intent : Constants.POWERMANAGER_INTENTS) {
            if (isCallable(context, intent)) {
                foundCorrectIntent = true;
                final AppCompatCheckBox dontShowAgain = new AppCompatCheckBox(context);
                dontShowAgain.setText("Do not show again");
                dontShowAgain.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        editor.putBoolean("skipProtectedAppCheck", isChecked);
                        editor.apply();
                    }
                });

                new AlertDialog.Builder(context)
                        .setTitle(Build.MANUFACTURER + " Protected Apps")
                        .setMessage(String.format("%s requires to be enabled in 'Protected Apps' to function properly.%n", context.getString(R.string.app_name)))
                        .setView(dontShowAgain)
                        .setPositiveButton("Go to settings", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                context.startActivity(intent);
                            }
                        })
                        .setNegativeButton(android.R.string.cancel, null)
                        .show();
                break;
            }
        }
        if (!foundCorrectIntent) {
            editor.putBoolean("skipProtectedAppCheck", true);
            editor.apply();
        }
    }
}

private static boolean isCallable(Context context, Intent intent) {
    try {
        if (intent == null || context == null) {
            return false;
        } else {
            List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent,
                    PackageManager.MATCH_DEFAULT_ONLY);
            return list.size() > 0;
        }
    } catch (Exception ignored) {
        return false;
    }
}
}

}}

import android.content.ComponentName;
import android.content.Intent;
import java.util.Arrays;
import java.util.List;

public class Constants {
//updated the POWERMANAGER_INTENTS 26/06/2019
static final List<Intent> POWERMANAGER_INTENTS = Arrays.asList(
        new Intent().setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")),
        new Intent().setComponent(new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity")),
        new Intent().setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity")),
        new Intent().setComponent(new ComponentName("com.huawei.systemmanager", Build.VERSION.SDK_INT >= Build.VERSION_CODES.P? "com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity": "com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity")),
        new Intent().setComponent(new ComponentName("com.coloros.oppoguardelf", "com.coloros.powermanager.fuelgaue.PowerUsageModelActivity")),
        new Intent().setComponent(new ComponentName("com.coloros.oppoguardelf", "com.coloros.powermanager.fuelgaue.PowerSaverModeActivity")),
        new Intent().setComponent(new ComponentName("com.coloros.oppoguardelf", "com.coloros.powermanager.fuelgaue.PowerConsumptionActivity")),
        new Intent().setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity")),
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ? new Intent().setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.startupapp.StartupAppListActivity")).setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).setData(Uri.parse("package:"+ MyApplication.getContext().getPackageName())) : null,
        new Intent().setComponent(new ComponentName("com.oppo.safe", "com.oppo.safe.permission.startup.StartupAppListActivity")),
        new Intent().setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity")),
        new Intent().setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.BgStartUpManager")),
        new Intent().setComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity")),
        new Intent().setComponent(new ComponentName("com.asus.mobilemanager", "com.asus.mobilemanager.entry.FunctionActivity")),
        new Intent().setComponent(new ComponentName("com.asus.mobilemanager", "com.asus.mobilemanager.autostart.AutoStartActivity")),
        new Intent().setComponent(new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity"))
                .setData(android.net.Uri.parse("mobilemanager://function/entry/AutoStart")),
        new Intent().setComponent(new ComponentName("com.meizu.safe", "com.meizu.safe.security.SHOW_APPSEC")).addCategory(Intent.CATEGORY_DEFAULT).putExtra("packageName", BuildConfig.APPLICATION_ID)
);
}

Fügen Sie die folgenden Berechtigungen zu Ihrem hinzu Android.Manifest

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
<uses-permission android:name="oppo.permission.OPPO_COMPONENT_SAFE"/>
<uses-permission android:name="com.huawei.permission.external_app_settings.USE_COMPONENT"/>

  • Ich habe immer noch einige Probleme mit OPPO-Geräten

Ich hoffe das hilft jemandem.

OussaMah
quelle
3
funktioniert gut. Jetzt scheint huawei die PretectedApp-Einstellung nicht mehr zu verwenden. Es sieht so aus, als würde eine Option namens "Starten - App-Starts und Hintergrundausführung verwalten, um Energie zu sparen" verwendet, bei der Apps "automatisch gestartet", "Sekundärstart" und "Im Hintergrund ausführen" sein müssen. Irgendeine Idee, was ist diese Absicht?
Ton
Ich bin froh, dass es bei dir funktioniert hat :). Entschuldigung, ich habe keine Ahnung von der neuen Huawei-Funktion, die Sie erwähnt haben. Ich sollte danach suchen, sonst hätten meine Apps ein Problem.
OussaMah
5
@Ton verwenden Sie diese: com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity
Simon
2
Ändern Sie Asus in ComponentName ("com.asus.mobilemanager", "com.asus.mobilemanager.autostart.AutoStartActivity")
Cristian Cardoso
3
Ändern Sie Huawei-Telefone über EMUI +5: new Intent (). SetComponent (neuer ComponentName ("com.huawei.systemmanager", Build.VERSION.SDK_INT> = Build.VERSION_CODES.P? "Com.huawei.systemmanager.startupmgr.ui). StartupNormalAppListActivity ":" com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity ")),
Alex Cuadrón
14

Lösung für alle Geräte (Xamarin.Android)

Verwendung:

MainActivity =>
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    MyUtils.StartPowerSaverIntent(this);
}

public class MyUtils
{
    private const string SKIP_INTENT_CHECK = "skipAppListMessage";

    private static List<Intent> POWERMANAGER_INTENTS = new List<Intent>()
    {
        new Intent().SetComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")),
        new Intent().SetComponent(new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity")),
        new Intent().SetComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity")),
        new Intent().SetComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity")),
        new Intent().SetComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity")),
        new Intent().SetComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.startupapp.StartupAppListActivity")),
        new Intent().SetComponent(new ComponentName("com.oppo.safe", "com.oppo.safe.permission.startup.StartupAppListActivity")),
        new Intent().SetComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity")),
        new Intent().SetComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.BgStartUpManager")),
        new Intent().SetComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity")),
        new Intent().SetComponent(new ComponentName("com.samsung.android.lool", "com.samsung.android.sm.ui.battery.BatteryActivity")),
        new Intent().SetComponent(new ComponentName("com.htc.pitroad", "com.htc.pitroad.landingpage.activity.LandingPageActivity")),
        new Intent().SetComponent(new ComponentName("com.asus.mobilemanager", "com.asus.mobilemanager.autostart.AutoStartActivity")),
        new Intent().SetComponent(new ComponentName("com.asus.mobilemanager", "com.asus.mobilemanager.entry.FunctionActivity")).SetData(Android.Net.Uri.Parse("mobilemanager://function/entry/AutoStart")),
        new Intent().SetComponent(new ComponentName("com.dewav.dwappmanager", "com.dewav.dwappmanager.memory.SmartClearupWhiteList"))
    };

    public static void StartPowerSaverIntent(Context context)
    {
        ISharedPreferences settings = context.GetSharedPreferences("ProtectedApps", FileCreationMode.Private);
        bool skipMessage = settings.GetBoolean(SKIP_INTENT_CHECK, false);
        if (!skipMessage)
        {
            bool HasIntent = false;
            ISharedPreferencesEditor editor = settings.Edit();
            foreach (Intent intent in POWERMANAGER_INTENTS)
            {
                if (context.PackageManager.ResolveActivity(intent, PackageInfoFlags.MatchDefaultOnly) != null)
                {
                    var dontShowAgain = new Android.Support.V7.Widget.AppCompatCheckBox(context);
                    dontShowAgain.Text = "Do not show again";
                    dontShowAgain.CheckedChange += (object sender, CompoundButton.CheckedChangeEventArgs e) =>
                    {
                        editor.PutBoolean(SKIP_INTENT_CHECK, e.IsChecked);
                        editor.Apply();
                    };

                    new AlertDialog.Builder(context)
                    .SetIcon(Android.Resource.Drawable.IcDialogAlert)
                    .SetTitle(string.Format("Add {0} to list", context.GetString(Resource.String.app_name)))
                    .SetMessage(string.Format("{0} requires to be enabled/added in the list to function properly.\n", context.GetString(Resource.String.app_name)))
                    .SetView(dontShowAgain)
                    .SetPositiveButton("Go to settings", (o, d) => context.StartActivity(intent))
                    .SetNegativeButton(Android.Resource.String.Cancel, (o, d) => { })
                    .Show();

                    HasIntent = true;

                    break;
                }
            }

            if (!HasIntent)
            {
                editor.PutBoolean(SKIP_INTENT_CHECK, true);
                editor.Apply();
            }
        }
    }
}

Fügen Sie die folgenden Berechtigungen zu Ihrem hinzu Android.Manifest

<uses-permission android:name="oppo.permission.OPPO_COMPONENT_SAFE"/>
<uses-permission android:name="com.huawei.permission.external_app_settings.USE_COMPONENT"/>

Um die Aktivität des hier nicht aufgeführten Geräts zu ermitteln, verwenden Sie einfach die folgende Methode, um die richtige Aktivität zu finden, die für den Benutzer geöffnet werden soll

C #

public static void LogDeviceBrandActivities(Context context)
{
    var Brand = Android.OS.Build.Brand?.ToLower()?.Trim() ?? "";
    var Manufacturer = Android.OS.Build.Manufacturer?.ToLower()?.Trim() ?? "";

    var apps = context.PackageManager.GetInstalledPackages(PackageInfoFlags.Activities);

    foreach (PackageInfo pi in apps.OrderBy(n => n.PackageName))
    {
        if (pi.PackageName.ToLower().Contains(Brand) || pi.PackageName.ToLower().Contains(Manufacturer))
        {
            var print = false;
            var activityInfo = "";

            if (pi.Activities != null)
            {
                foreach (var activity in pi.Activities.OrderBy(n => n.Name))
                {
                    if (activity.Name.ToLower().Contains(Brand) || activity.Name.ToLower().Contains(Manufacturer))
                    {
                        activityInfo += "  Activity: " + activity.Name + (string.IsNullOrEmpty(activity.Permission) ? "" : " - Permission: " + activity.Permission) + "\n";
                        print = true;
                    }
                }
            }

            if (print)
            {
                Android.Util.Log.Error("brand.activities", "PackageName: " + pi.PackageName);
                Android.Util.Log.Warn("brand.activities", activityInfo);
            }
        }
    }
}

Java

public static void logDeviceBrandActivities(Context context) {
    String brand = Build.BRAND.toLowerCase();
    String manufacturer = Build.MANUFACTURER.toLowerCase();

    List<PackageInfo> apps = context.getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES);

    Collections.sort(apps, (a, b) -> a.packageName.compareTo(b.packageName));
    for (PackageInfo pi : apps) {
        if (pi.packageName.toLowerCase().contains(brand) || pi.packageName.toLowerCase().contains(manufacturer)) {
            boolean print = false;
            StringBuilder activityInfo = new StringBuilder();

            if (pi.activities != null && pi.activities.length > 0) {
                List<ActivityInfo> activities = Arrays.asList(pi.activities);

                Collections.sort(activities, (a, b) -> a.name.compareTo(b.name));
                for (ActivityInfo ai : activities) {
                    if (ai.name.toLowerCase().contains(brand) || ai.name.toLowerCase().contains(manufacturer)) {
                        activityInfo.append("  Activity: ").append(ai.name)
                                .append(ai.permission == null || ai.permission.length() == 0 ? "" : " - Permission: " + ai.permission)
                                .append("\n");
                        print = true;
                    }
                }
            }

            if (print) {
                Log.e("brand.activities", "PackageName: " + pi.packageName);
                Log.w("brand.activities", activityInfo.toString());
            }
        }
    }
}

Beim Start ausführen und die Protokolldatei durchsuchen, einen Logcat-Filter hinzufügen TAGvonbrand.activities

MainActivity =>
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    MyUtils.LogDeviceBrandActivities(this);
}

Beispielausgabe:

E/brand.activities: PackageName: com.samsung.android.lool
W/brand.activities: ...
W/brand.activities:   Activity: com.samsung.android.sm.ui.battery.AppSleepSettingActivity
W/brand.activities:   Activity: com.samsung.android.sm.ui.battery.BatteryActivity <-- This is the one...
W/brand.activities:   Activity: com.samsung.android.sm.ui.battery.BatteryActivityForCard
W/brand.activities: ...

Der Komponentenname lautet also:

new ComponentName("<PackageName>", "<Activity>")
new ComponentName("com.samsung.android.lool", "com.samsung.android.sm.ui.battery.BatteryActivity")

Wenn die Aktivität eine Berechtigung daneben hat, ist der folgende Eintrag in Android.Manifesterforderlich, um die Aktivität zu öffnen:

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

Kommentieren oder bearbeiten Sie die neue Komponente in dieser Antwort. Alle Hilfe wird mir sehr geschätzt.

Pierre
quelle
Wie haben Sie den Klassennamen "com.huawei.systemmanager.optimize.process.ProtectActivity" gefunden? Ich möchte etwas Ähnliches für Qmobile implementieren, kenne aber den Paketnamen von Qmobile und den Klassennamen des Bildschirms "außer Apps" nicht
Noaman Akram
1
Sie können in Ihrer Antwort über Qmobile .. new Intent (). SetComponent (neuer ComponentName ("com.dewav.dwappmanager", "com.dewav.dwappmanager.memory.SmartClearupWhiteList"),
Noaman Akram
Ich habe diesen Code verwendet, aber er funktioniert nicht in Samsung J6 Mobile.
Shailesh
@Pierre Haben Sie darüber nachgedacht, dies in eine Bibliothek auf GitHub zu verwandeln, damit andere Projekte es direkt einbinden können? Andere Entwickler können dann auch neue Komponenten über Pull-Anforderungen bereitstellen. Gedanken?
Shankari
1

Ich verwende die @ Aiuspaktyn-Lösung, bei der der Teil fehlt, in dem erkannt wird, wann der Dialog beendet wird, nachdem der Benutzer die App als geschützt festgelegt hat. Ich verwende einen Dienst, um zu überprüfen, ob die App beendet wurde oder nicht, und um zu überprüfen, ob sie vorhanden ist.

oikumo
quelle
3
können Sie ein Muster Ihrer Service pls posten.
Zaki
0

Mit dieser Bibliothek können Sie den Benutzer zu geschützten Apps navigieren oder automatisch starten:

AutoStarter

Wenn das Telefon die Autostart-Funktion unterstützt, können Sie dem Benutzer einen Hinweis zum Aktivieren Ihrer App in diesen Apps anzeigen

Sie können mit dieser Methode überprüfen:

AutoStartPermissionHelper.getInstance().isAutoStartPermissionAvailable(context)

Um den Benutzer zu dieser Seite zu navigieren, rufen Sie einfach Folgendes auf:

AutoStartPermissionHelper.getInstance().getAutoStartPermission(context)
Amir Hossein Ghasemi
quelle
-4

PowerMaster -> AutoStart -> Finden Sie Ihre App im blockierten Bereich und erlauben Sie

gdarcan
quelle