Pengaturan "Aplikasi Terlindungi" pada ponsel Huawei, dan cara menanganinya

134

Saya memiliki Huawei P8 dengan Android 5.0 yang saya gunakan untuk menguji aplikasi. Aplikasi harus berjalan di latar belakang, karena melacak wilayah BLE.

Saya telah menemukan bahwa Huawei telah membangun "fitur" yang disebut Aplikasi yang Dilindungi, yang dapat diakses dari pengaturan telepon (Manajer Baterai> Aplikasi yang Dilindungi). Ini memungkinkan aplikasi terpilih untuk tetap berjalan setelah layar dimatikan.

Masuk akal untuk Huawei, tapi sayangnya bagi saya, sepertinya itu opt-in, yaitu aplikasi keluar secara default, dan Anda harus memasukkannya secara manual. Ini bukan showstopper, karena saya dapat menyarankan pengguna di FAQ atau dicetak dokumentasi tentang perbaikan, tetapi saya baru saja menginstal Tinder (untuk tujuan penelitian!), dan memperhatikan bahwa itu dimasukkan ke dalam daftar yang dilindungi secara otomatis.

Adakah yang tahu bagaimana saya bisa melakukan ini untuk aplikasi saya? Apakah ini pengaturan dalam manifes? Apakah ini sesuatu yang diaktifkan oleh Huawei untuk Tinder karena ini adalah aplikasi yang populer?

jaseelder
sumber
@agamov, tidak, saya tidak dapat menemukan info lebih lanjut tentang itu. Saya baru saja memberi garis pada deskripsi di Play Store tentang pengaktifan aplikasi yang dilindungi.
jaseelder
@ TelasPatel, tidak, saya berhenti mencoba menyelesaikannya dan hanya memberi tahu pengguna dalam uraian
jaseelder

Jawaban:

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
sumber
Sampai ada cara untuk mengetahui apakah aplikasi dilindungi atau tidak, ini adalah hal terbaik, tetapi untuk menghindari menunjukkannya setiap waktu, saya memiliki "jangan tampilkan lagi" dan pesannya adalah "Anda mungkin akan dikenakan biaya lebih banyak jika Anda tidak melindungi "dan tindakannya adalah" abaikan, saya akan mengambil risiko ", atau" buka pengaturan "
Saik Caskey
1
ada yang serupa dengan ASUS Auto-start Manager?
Xan
3
Ya, @Bisa. Cukup buat nama komponen sebagai berikut:ComponentName("com.asus.mobilemanager","com.asus.mobilemanager.autostart.AutoStartActivity"));
Michel Fortes
2
bisakah Anda menjelaskan dari mana objek "sp" berasal? seperti yang digunakan di sini? sp.edit().putBoolean("protected",true).commit();karena saya mengerti di situlah Anda mengubah nilai menjadi terlindungi, bukan?
Leonardo G.
2
@LeonardoG. : cukup yakin bahwa "sp" adalah kepanjangan dari SharedPreferences, final SharedPreferences sp = getSharedPreferences ("ProtectedApps", Context.MODE_PRIVATE);
papesky
76

Tidak ada pengaturan dalam manifes, dan Huawei telah mengaktifkan Tinder karena ini adalah aplikasi yang populer. Tidak ada cara untuk mengetahui apakah aplikasi dilindungi.

Pokoknya saya digunakan ifHuaweiAlert()dalam onCreate()untuk menunjukkan 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
sumber
7
bagaimana Anda menemukan nama kelas "com.huawei.systemmanager.optimize.process.ProtectActivity"? Saya ingin menerapkan sesuatu yang serupa untuk mode Stamina di Sony tetapi tidak tahu nama paket Stamina dan nama kelas layar "kecuali aplikasi" dalam pengaturan Stamina.
David Riha
2
Jika nama paket dan nama kelas diketahui, Anda dapat dengan mudah membuka layar, dengan maksud. Kode di bawah ini. Intent intent = new Intent (); intent.setComponent (ComponentName baru ("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity")); startActivity (niat);
Kinsell
1
David, taruhan terbaik Anda adalah logCat. Cukup pindah ke halaman pengaturan dan biarkan logCat terbuka.
Skynet
1
Bisakah saya mengatur daya intensif untuk aplikasi saya?
sonnv1368
4
Nama paket yang benar untuk Huawei P20: com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity
rsicarelli
36

+1 untuk Pierre untuk solusi hebatnya yang berfungsi untuk beberapa produsen Perangkat (Huawei, asus, oposisi ...).

Saya ingin menggunakan kodenya di aplikasi Android saya yang ada di Jawa. Saya menginspirasi kode saya dari Pierre dan Aiuspaktyn jawaban .

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

Tambahkan izin berikut di 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"/>

  • Saya masih menghadapi beberapa masalah dengan perangkat OPPO

Saya harap ini membantu seseorang.

OussaMah
sumber
3
bekerja dengan baik. Sekarang, Huawei sepertinya tidak menggunakan pengaturan PretectedApp lagi. Sepertinya menggunakan opsi yang disebut "Luncurkan - Kelola peluncuran aplikasi dan latar belakang berjalan untuk menghemat daya" di mana Anda harus mengizinkan aplikasi menjadi "peluncuran otomatis", "Peluncuran sekunder" dan "Lari di latar belakang". Adakah yang tahu maksud apa ini?
Ton
Saya senang itu berhasil untuk Anda :). Maaf, saya tidak tahu tentang fitur Huawei baru yang Anda sebutkan. saya harus mencari tentang hal itu, jika tidak aplikasi saya akan memiliki masalah.
OussaMah
5
@Ton gunakan ini: com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity
Simon
2
Ubah Asus menjadi ComponentName ("com.asus.mobilemanager", "com.asus.mobilemanager.autostart.AutoStartActivity")
Cristian Cardoso
3
Ubah ponsel Huawei di atas EMUI +5: Intent baru (). SetComponent (ComponentName baru ("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

Solusi untuk semua perangkat (Xamarin.Android)

Pemakaian:

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

Tambahkan izin berikut di Android.Manifest

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

Untuk membantu menemukan aktivitas perangkat yang tidak tercantum di sini, cukup gunakan metode berikut untuk membantu menemukan aktivitas yang benar untuk dibuka bagi pengguna

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

Jawa

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

Mengeksekusi pada startup dan mencari melalui file log, menambahkan logcat filter pada TAGdaribrand.activities

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

    MyUtils.LogDeviceBrandActivities(this);
}

Output sampel:

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: ...

Jadi nama komponennya adalah:

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

Jika aktivitas memiliki izin di sebelahnya, entri berikut Android.Manifestini diperlukan untuk membuka aktivitas:

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

Komentari atau edit komponen baru ke dalam jawaban ini. Semua bantuan akan sangat saya hargai.

Pierre
sumber
bagaimana Anda menemukan nama kelas "com.huawei.systemmanager.optimize.process.ProtectActivity"? Saya ingin mengimplementasikan sesuatu yang serupa untuk Qmobile tetapi tidak tahu nama paket Qmobile dan nama kelas layar "kecuali aplikasi"
Noaman Akram
1
Anda dapat mengedit jawaban Anda tentang Qmobile .. Intent baru (). SetComponent (ComponentName baru ("com.dewav.dwappmanager", "com.dewav.dwappmanager.memory.SmartClearupWhiteList")),
Noaman Akram
Saya telah menggunakan kode ini tetapi tidak berfungsi di ponsel Samsung J6.
Shailesh
@Pierre sudahkah Anda mempertimbangkan untuk menjadikan ini sebagai perpustakaan di GitHub sehingga proyek lain dapat memasukkannya secara langsung? Pengembang lain juga dapat berkontribusi komponen baru melalui permintaan tarik. Pikiran?
Shankari
1

Saya menggunakan solusi @Aiuspaktyn yang hilang bagian dari cara mendeteksi ketika berhenti menampilkan dialog setelah pengguna mengatur aplikasi sebagai terlindungi. Saya menggunakan Layanan untuk memeriksa apakah aplikasi itu dihentikan atau tidak, memeriksa apakah ada.

oikumo
sumber
3
dapatkah Anda memposting sampel layanan Anda?
Zaki
0

Anda dapat menggunakan perpustakaan ini untuk menavigasi pengguna ke aplikasi yang dilindungi atau mulai otomatis:

AutoStarter

Jika ponsel mendukung fitur autostart, Anda dapat menunjukkan kepada pengguna petunjuk untuk mengaktifkan aplikasi Anda di aplikasi ini

Anda dapat memeriksa dengan metode ini:

AutoStartPermissionHelper.getInstance().isAutoStartPermissionAvailable(context)

Dan untuk menavigasi pengguna ke halaman itu, cukup panggil ini:

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

PowerMaster -> AutoStart -> Temukan aplikasi Anda di bagian yang diblokir dan izinkan

gdarcan
sumber