การตั้งค่า "แอปที่ได้รับการป้องกัน" บนโทรศัพท์ Huawei และวิธีจัดการ


135

ฉันมี Huawei P8 พร้อม Android 5.0 ที่ใช้ทดสอบแอป แอปจะต้องทำงานในพื้นหลังเนื่องจากจะติดตามภูมิภาค BLE

ฉันค้นพบว่า Huawei ได้สร้าง "คุณลักษณะ" ที่เรียกว่าแอปที่ได้รับการป้องกันซึ่งสามารถเข้าถึงได้จากการตั้งค่าโทรศัพท์ (ตัวจัดการแบตเตอรี่> แอปที่ได้รับการป้องกัน) ซึ่งจะช่วยให้แอปที่เลือกทำงานต่อไปหลังจากปิดหน้าจอแล้ว

มีเหตุผลสำหรับ Huawei แต่น่าเสียดายสำหรับฉันดูเหมือนว่าจะมีการเลือกใช้นั่นคือแอปจะไม่สามารถใช้งานได้โดยค่าเริ่มต้นและคุณต้องใส่ด้วยตนเองนี่ไม่ใช่ showstopper เนื่องจากฉันสามารถแนะนำผู้ใช้ในคำถามที่พบบ่อยหรือพิมพ์ เอกสารเกี่ยวกับการแก้ไข แต่ฉันเพิ่งติดตั้ง Tinder (เพื่อการวิจัย!) และสังเกตเห็นว่ามีการใส่ไว้ในรายการที่มีการป้องกันโดยอัตโนมัติ

มีใครรู้บ้างว่าฉันจะทำสิ่งนี้กับแอปของฉันได้อย่างไร เป็นการตั้งค่าในรายการหรือไม่ เป็นสิ่งที่ Huawei เปิดใช้งาน Tinder เพราะเป็นแอปยอดนิยมใช่หรือไม่?


@agamov ไม่ฉันไม่พบข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ ฉันเพิ่งใส่คำอธิบายใน Play Store เกี่ยวกับการเปิดแอปที่มีการป้องกัน
jaseelder

@TejasPatel ไม่ฉันหยุดพยายามแก้ปัญหาและแจ้งผู้ใช้ในคำอธิบาย
jaseelder

คำตอบ:


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

จนกว่าจะมีวิธีที่จะทราบได้ว่าแอปได้รับการป้องกันหรือไม่นี่เป็นสิ่งที่ดีที่สุด แต่เพื่อหลีกเลี่ยงไม่ให้แสดงทุกครั้งฉันมีข้อความ "ไม่แสดงอีก" และมีข้อความว่า "คุณอาจถูกเรียกเก็บเงินเพิ่มหาก คุณไม่ได้ปกป้อง "และการกระทำดังกล่าว" เพิกเฉยฉันจะเสี่ยง "หรือ" ไปที่การตั้งค่า "
Saik Caskey

1
มีอะไรที่คล้ายกันสำหรับ ASUS Auto-start Manager หรือไม่?
Xan

3
ครับ @Xan. เพียงสร้างชื่อส่วนประกอบดังนี้ComponentName("com.asus.mobilemanager","com.asus.mobilemanager.autostart.AutoStartActivity"));
Michel Fortes

2
ช่วยอธิบายหน่อยได้ไหมว่าวัตถุ "sp" มาจากไหน ตามที่ใช้ที่นี่? sp.edit().putBoolean("protected",true).commit();เพราะฉันเข้าใจว่านั่นคือจุดที่คุณเปลี่ยนค่าเป็นป้องกันใช่ไหม
Leonardo G.

2
@ เลโอนาร์โดจี. : ค่อนข้างแน่ใจว่า "sp" ย่อมาจาก SharedPreferences, SharedPreferences สุดท้าย sp = getSharedPreferences ("ProtectedApps", Context.MODE_PRIVATE);
papesky

76

ไม่มีการตั้งค่าในรายการและ Huawei ได้เปิดใช้ Tinder เนื่องจากเป็นแอปยอดนิยม ไม่มีวิธีใดที่จะทราบได้ว่าแอปได้รับการปกป้องหรือไม่

อย่างไรก็ตามผมใช้ifHuaweiAlert()ในonCreate()การแสดง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 "";
}

7
คุณพบชื่อคลาส "com.huawei.systemmanager.optimize.process.ProtectActivity" ได้อย่างไร ฉันต้องการใช้สิ่งที่คล้ายกันสำหรับโหมด Stamina ใน Sony แต่ไม่ทราบชื่อแพ็กเกจของ Stamina และชื่อคลาสของหน้าจอ "ยกเว้นแอป" ในการตั้งค่า Stamina
David Riha

2
หากทราบชื่อแพ็กเกจและชื่อคลาสคุณสามารถเปิดหน้าจอได้อย่างง่ายดายโดยมีเจตนา รหัสด้านล่าง เจตนาเจตนา = เจตนาใหม่ (); Intent.setComponent (ComponentName ใหม่ ("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity")); startActivity (เจตนา);
kinsell

1
เดวิดทางออกที่ดีที่สุดของคุณคือ logCat เพียงแค่ย้ายไปที่หน้าการตั้งค่าและเปิด logCat ไว้
Skynet

1
ฉันสามารถตั้งค่าพลังงานให้เข้มข้นสำหรับแอปพลิเคชันของฉันได้หรือไม่
sonnv1368

5
ชื่อแพ็คเกจที่ถูกต้องสำหรับ Huawei P20: com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity
rsicarelli

38

+1 สำหรับปิแอร์สำหรับโซลูชันที่ยอดเยี่ยมของเขาซึ่งใช้ได้กับผู้ผลิตอุปกรณ์หลายราย (Huawei, asus, oppo ... )

ฉันต้องการใช้รหัสของเขาในแอป Android ของฉันซึ่งอยู่ใน Java ฉันได้แรงบันดาลใจรหัสของฉันจากคำตอบของPierre และAiuspaktyn

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

เพิ่มสิทธิ์ต่อไปนี้ในไฟล์ 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"/>

  • ฉันยังคงประสบปัญหาบางประการเกี่ยวกับอุปกรณ์ OPPO

ฉันหวังว่านี่จะช่วยใครบางคนได้


3
ทำงานได้ดี ตอนนี้ดูเหมือนว่า huawei จะไม่ได้ใช้การตั้งค่า PretectedApp อีกต่อไป ดูเหมือนว่าจะใช้ตัวเลือกที่เรียกว่า "เปิดตัว - จัดการการเปิดตัวแอปและการทำงานในพื้นหลังเพื่อประหยัดพลังงาน" ซึ่งคุณต้องอนุญาตให้แอป "เปิดใช้งานอัตโนมัติ" "เปิดตัวรอง" และ "เรียกใช้ในพื้นหลัง" ความคิดนี้เจตนาคืออะไร?
ต้น

ฉันดีใจที่มันได้ผลสำหรับคุณ :) ขออภัยฉันไม่รู้เกี่ยวกับคุณสมบัติใหม่ของ Huawei ที่คุณพูดถึง ฉันควรค้นหามันไม่เช่นนั้นแอปของฉันจะมีปัญหา
OussaMah

5
@Ton ใช้สิ่งนี้: com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity
Simon

2
เปลี่ยน Asus เป็น ComponentName ("com.asus.mobilemanager", "com.asus.mobilemanager.autostart.AutoStartActivity")
Cristian Cardoso

3
เปลี่ยนโทรศัพท์ Huawei เหนือ EMUI +5: Intent ใหม่ (). setComponent (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

15

โซลูชันสำหรับอุปกรณ์ทั้งหมด (Xamarin.Android)

การใช้งาน:

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

เพิ่มสิทธิ์ต่อไปนี้ในไฟล์ Android.Manifest

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

เพื่อช่วยค้นหากิจกรรมของอุปกรณ์ที่ไม่อยู่ในรายการนี้เพียงใช้วิธีการต่อไปนี้เพื่อช่วยค้นหากิจกรรมที่ถูกต้องเพื่อเปิดให้ผู้ใช้

ค#

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

ดำเนินการเมื่อเริ่มต้นและค้นหาผ่านไฟล์บันทึกเพิ่มตัวกรอง logcat บนTAGของbrand.activities

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

    MyUtils.LogDeviceBrandActivities(this);
}

ตัวอย่างผลลัพธ์:

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

ดังนั้นชื่อส่วนประกอบจะเป็น:

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

หากกิจกรรมมีสิทธิ์ถัดจากAndroid.Manifestนั้นจำเป็นต้องมีรายการต่อไปนี้ในการเปิดกิจกรรม:

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

แสดงความคิดเห็นหรือแก้ไของค์ประกอบใหม่ในคำตอบนี้ ความช่วยเหลือทั้งหมดฉันจะชื่นชมมาก


คุณพบชื่อคลาส "com.huawei.systemmanager.optimize.process.ProtectActivity" ได้อย่างไร ฉันต้องการใช้สิ่งที่คล้ายกันสำหรับ Qmobile แต่ไม่ทราบชื่อแพ็กเกจของ Qmobile และชื่อคลาสของหน้าจอ "except apps"
Noaman Akram

1
คุณสามารถแก้ไขคำตอบของคุณเกี่ยวกับ Qmobile .. new Intent (). setComponent (ComponentName ใหม่ ("com.dewav.dwappmanager", "com.dewav.dwappmanager.memory.SmartClearupWhiteList"))
Noaman Akram

ฉันใช้รหัสนี้ แต่ใช้ไม่ได้ในมือถือ Samsung J6
Shailesh

@Pierre คุณคิดจะสร้างสิ่งนี้เป็นไลบรารีบน GitHub เพื่อให้โครงการอื่น ๆ สามารถรวมไว้ได้โดยตรงหรือไม่? จากนั้นนักพัฒนาคนอื่น ๆ ยังสามารถมีส่วนร่วมในองค์ประกอบใหม่ผ่านการร้องขอแบบดึง ความคิด?
Shankari

1

ฉันใช้โซลูชัน @Aiuspaktyn ซึ่งไม่มีส่วนของวิธีตรวจจับเมื่อหยุดแสดงกล่องโต้ตอบหลังจากที่ผู้ใช้ตั้งค่าแอปว่าได้รับการป้องกัน ฉันใช้บริการเพื่อตรวจสอบว่าแอปถูกยุติหรือไม่ตรวจสอบว่ามีอยู่จริงหรือไม่


3
คุณสามารถโพสต์ตัวอย่างบริการของคุณได้ไหม
Zaki

1

คุณสามารถใช้ไลบรารีนี้เพื่อนำทางผู้ใช้ไปยังแอพที่มีการป้องกันหรือเริ่มอัตโนมัติ:

AutoStarter

หากโทรศัพท์รองรับคุณสมบัติการเริ่มอัตโนมัติคุณสามารถแสดงคำใบ้ให้ผู้ใช้เปิดใช้งานแอปของคุณในแอปเหล่านี้

คุณสามารถตรวจสอบได้โดยวิธีนี้:

AutoStartPermissionHelper.getInstance().isAutoStartPermissionAvailable(context)

และสำหรับการนำทางผู้ใช้ไปยังหน้านั้นให้เรียกสิ่งนี้ว่า:

AutoStartPermissionHelper.getInstance().getAutoStartPermission(context)

-4

PowerMaster -> AutoStart -> ค้นหาแอปของคุณในส่วนที่ถูกบล็อกและอนุญาต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.