Ứng dụng được bảo vệ trên máy tính cá nhân Cài đặt trên điện thoại Huawei và cách xử lý


134

Tôi có một chiếc Huawei P8 với Android 5.0 mà tôi đang sử dụng để thử nghiệm một ứng dụng. Ứng dụng cần được chạy trong nền, vì nó theo dõi các vùng BLE.

Tôi đã phát hiện ra rằng Huawei đã tích hợp một "tính năng" được gọi là Ứng dụng được bảo vệ, có thể được truy cập từ cài đặt điện thoại (Trình quản lý pin> Ứng dụng được bảo vệ). Điều này cho phép các ứng dụng được bầu tiếp tục chạy sau khi tắt màn hình.

Rõ ràng đối với Huawei, nhưng thật không may cho tôi, có vẻ như nó chọn tham gia, tức là các ứng dụng bị tắt theo mặc định và bạn phải tự đặt chúng vào. Đây không phải là một showstopper, vì tôi có thể tư vấn cho người dùng trong Câu hỏi thường gặp hoặc được in tài liệu về bản sửa lỗi, nhưng gần đây tôi đã cài đặt Tinder (cho mục đích nghiên cứu!) và nhận thấy rằng nó được đưa vào danh sách được bảo vệ tự động.

Có ai biết làm thế nào tôi có thể làm điều này cho ứng dụng của tôi? Có phải là một thiết lập trong bảng kê khai? Đây có phải là thứ mà Huawei đã kích hoạt cho Tinder vì đây là một ứng dụng phổ biến?


@agamov, không tôi không thể tìm thấy thêm thông tin nào về nó. Tôi chỉ đặt một dòng trong mô tả trên Cửa hàng Play về việc bật các ứng dụng được bảo vệ.
jaseelder

@TejasPatel, không, tôi đã ngừng cố gắng giải quyết nó và chỉ thông báo cho người dùng trong phần mô tả
jaseelder

Câu trả lời:


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

Cho đến khi có một cách để biết ứng dụng có được bảo vệ hay không, đây là điều tốt nhất, nhưng để tránh hiển thị nó mỗi lần, tôi có "không hiển thị lại" và thông báo là "Bạn có thể bị tính phí nhiều hơn nếu bạn không bảo vệ "và các hành động là" bỏ qua, tôi sẽ mạo hiểm "hoặc" đi đến cài đặt "
Saik Caskey

1
Có điều gì tương tự cho ASUS Auto-start Manager không?
Xan

3
Vâng, @Xan. Chỉ cần tạo tên thành phần như sau:ComponentName("com.asus.mobilemanager","com.asus.mobilemanager.autostart.AutoStartActivity"));
Michel Fortes

2
bạn có thể giải thích đối tượng "sp" đến từ đâu không? như được sử dụng ở đây? sp.edit().putBoolean("protected",true).commit();vì tôi hiểu đó là nơi bạn thay đổi giá trị thành được bảo vệ phải không?
Leonardo G.

2
@LeonardoG. : khá chắc chắn rằng "sp" là viết tắt của SharedPreferences, SharedPreferences cuối cùng sp = getSharedPreferences ("ProtectedApps", Context.MODE_PRIVATE);
papesky

76

Không có cài đặt nào trong bảng kê khai và Huawei đã bật Tinder vì đây là một ứng dụng phổ biến. Không có cách nào để biết các ứng dụng có được bảo vệ hay không.

Dù sao tôi đã sử dụng ifHuaweiAlert()trong onCreate()để hiển thị một 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
Làm thế nào bạn tìm thấy tên lớp "com.huawei.systemmanager.optizes. process.ProtectActivity"? Tôi muốn triển khai một cái gì đó tương tự cho chế độ Stamina trên Sony nhưng không biết tên gói của Stamina và tên lớp của màn hình "ngoại trừ ứng dụng" trong cài đặt Stamina.
David Riha

2
Nếu biết tên gói và tên lớp, bạn có thể dễ dàng mở màn hình, với một ý định. Mã dưới đây. Ý định = ý định mới (); aim.setComponent (new ElementName ("com.huawei.systemmanager", "com.huawei.systemmanager.optizes. process.ProtectActivity")); startActivity (ý định);
kinsell

1
David, đặt cược tốt nhất của bạn là logCat. Chỉ cần di chuyển đến trang cài đặt và giữ logCat mở.
Skynet

1
Tôi có thể thiết lập năng lượng chuyên sâu cho ứng dụng của mình không?
sonnv1368

4
Tên gói chính xác cho Huawei P20: com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity
rsicarelli

36

+1 cho Pierre cho giải pháp tuyệt vời của mình, hoạt động cho nhiều nhà sản xuất thiết bị (Huawei, asus, oppo ...).

Tôi muốn sử dụng mã của anh ấy trong ứng dụng Android có trong Java. Tôi lấy cảm hứng từ mã của tôi từ câu trả lời của Pierre và 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)
);
}

Thêm các quyền sau trong của bạn 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"/>

  • Tôi vẫn gặp một số vấn đề với các thiết bị OPPO

Tôi hi vọng điêu nay se giup được ai đo.


3
hoạt động tốt Bây giờ, huawei có vẻ như không sử dụng cài đặt PretectedApp nữa. Có vẻ như nó đang sử dụng một tùy chọn có tên "Khởi chạy - Quản lý khởi chạy ứng dụng và chạy nền để tiết kiệm năng lượng" trong đó bạn phải cho phép các ứng dụng được "tự động khởi chạy", "Khởi chạy phụ" và "Chạy trong nền". Bất kỳ ý tưởng này là gì ý định?
Tôn

Tôi vui vì nó đã làm việc cho bạn :). Xin lỗi, tôi không biết gì về tính năng mới của Huawei mà bạn đề cập. Tôi nên tìm kiếm về nó, nếu không các ứng dụng của tôi sẽ có vấn đề.
OussaMah

5
@Ton sử dụng cái này: com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity
Simon

2
Thay đổi Asus thành ElementName ("com.asus.mobilemanager", "com.asus.mobilemanager.autostart.AutoStartActivity")
Cristian Cardoso

3
Thay đổi điện thoại Huawei trên EMUI +5: Intent (). SetComponent (Thành phần mới ("com.huawei.systemmanager", Build.VERSION.SDK_INT> = Build.VERSION_CODES.P? " StartupN normalAppListActivity ":" com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity ")),
Alex Cuadrón

14

Giải pháp cho tất cả các thiết bị (Xamarin.Android)

Sử dụng:

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

Thêm các quyền sau trong của bạn Android.Manifest

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

Để giúp tìm hoạt động của thiết bị không được liệt kê ở đây, chỉ cần sử dụng phương pháp sau để giúp tìm hoạt động chính xác để mở cho người dùng

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

Thực hiện khi khởi động và tìm kiếm thông qua các log file, thêm một bộ lọc logcat trên TAGcủabrand.activities

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

    MyUtils.LogDeviceBrandActivities(this);
}

Đầu ra mẫu:

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

Vì vậy, tên thành phần sẽ là:

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

Nếu hoạt động có quyền bên cạnh, hoạt động sau đây Android.Manifestđược yêu cầu để mở hoạt động:

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

Nhận xét hoặc chỉnh sửa thành phần mới vào câu trả lời này. Tất cả sự giúp đỡ tôi sẽ đánh giá cao.


Làm thế nào bạn tìm thấy tên lớp "com.huawei.systemmanager.optizes. process.ProtectActivity"? Tôi muốn triển khai một cái gì đó tương tự cho Qmobile nhưng không biết tên gói của Qmobile và tên lớp của màn hình "ngoại trừ ứng dụng"
Noaman Akram

1
Bạn có thể chỉnh sửa trong câu trả lời của mình về Qmobile .. new Intent (). SetComponent (new ElementName ("com.dewav.dwappmanager", "com.dewav.dwappmanager.memory.SmartClearupWhiteList")),
Noaman Akram

Tôi đã sử dụng mã này nhưng nó không hoạt động trong Samsung J6 di động.
Shailesh

@Pierre bạn đã cân nhắc việc biến nó thành một thư viện trên GitHub để các dự án khác có thể bao gồm nó trực tiếp chưa? Các nhà phát triển khác sau đó cũng có thể đóng góp các thành phần mới thông qua các yêu cầu kéo. Suy nghĩ?
Shankari

1

Tôi đang sử dụng giải pháp @Aiuspaktyn, phần còn thiếu của cách phát hiện khi dừng hiển thị hộp thoại sau khi người dùng đặt ứng dụng là được bảo vệ. Tôi đang sử dụng Dịch vụ để kiểm tra xem ứng dụng có bị chấm dứt hay không, kiểm tra xem nó có tồn tại không.


3
bạn có thể gửi một mẫu dịch vụ của bạn xin vui lòng.
Zaki

0

Bạn có thể sử dụng thư viện này để điều hướng người dùng đến các ứng dụng được bảo vệ hoặc tự động khởi động:

Tự động thông minh

Nếu điện thoại hỗ trợ tính năng tự khởi động, bạn có thể hiển thị cho người dùng một gợi ý để bật ứng dụng của bạn trong các ứng dụng này

Bạn có thể kiểm tra theo phương pháp này:

AutoStartPermissionHelper.getInstance().isAutoStartPermissionAvailable(context)

Và để điều hướng người dùng đến trang đó, chỉ cần gọi đây:

AutoStartPermissionHelper.getInstance().getAutoStartPermission(context)

-4

PowerMaster -> AutoStart -> Tìm ứng dụng của bạn trong phần bị chặn và cho phép

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.