Huawei 전화의 "보호 된 앱"설정 및 처리 방법


134

앱 테스트에 사용하는 Android 5.0의 Huawei P8이 있습니다. BLE 영역을 추적하므로 앱이 백그라운드에서 실행되고 있어야합니다.

Huawei가 전화 설정 (Battery Manager> Protected Apps)에서 액세스 할 수있는 Protected Apps라는 "기능"을 내장하고 있음을 발견했습니다. 이렇게하면 화면이 꺼진 후에 선택한 앱이 계속 실행됩니다.

화웨이에게는 안타깝게도 나에게는 안타깝게도 앱이 기본적으로 사용되지 않는 것처럼 보입니다. 즉, 앱이 기본적으로 꺼져 있으며 수동으로 입력해야합니다. 사용자에게 FAQ 또는 인쇄로 조언을 제공 할 수 있기 때문에 이는 쇼 퍼가 아닙니다 수정 프로그램에 대한 문서를 작성했지만 최근에는 연구 목적으로 Tinder를 설치했으며이 목록이 보호 목록에 자동으로 포함 된 것을 알았습니다.

누구든지 내 앱에서 어떻게 할 수 있는지 알고 있습니까? 매니페스트의 설정입니까? 화웨이가 인기있는 앱이기 때문에 틴더를 위해 활성화 한 것입니까?


@agamov, 아니요 더 이상 정보를 찾을 수 없습니다. 방금 보호 된 앱을 켜는 방법에 대해 Play 스토어에 설명을 적었습니다.
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
@LeonardoG. : "sp"는 SharedPreferences, final 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"를 어떻게 찾았습니까? Sony에서 Stamina 모드와 비슷한 것을 구현하고 싶지만 Stamina 설정의 Stamina 패키지 이름과 "앱 제외"화면의 클래스 이름을 모릅니다.
David Riha

2
패키지 이름과 클래스 이름을 알고 있으면 의도적으로 화면을 쉽게 열 수 있습니다. 아래 코드 의도 의도 = 새로운 의도 (); intent.setComponent (new ComponentName ( "com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity")); startActivity (의도);
kinsell

1
데이비드, 가장 좋은 방법은 logCat입니다. 설정 페이지로 이동하여 logCat을 열어 두십시오.
Skynet

1
애플리케이션에 전력 집약을 설정할 수 있습니까?
sonnv1368

4
Huawei P20의 올바른 패키지 이름 : com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity
rsicarelli

36

여러 기기 제조업체 (Huawei, asus, oppo ...)에서 작동하는 훌륭한 솔루션으로 Pierre 에게 +1 .

Java로 된 Android 앱에서 코드를 사용하고 싶었습니다. 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
잘 작동합니다. 화웨이는 더 이상 PretectedApp 설정을 사용하지 않는 것 같습니다. 앱을 "자동 실행", "보조 실행"및 "백그라운드에서 실행"으로 허용해야하는 "시작-앱 실행 및 백그라운드 실행 관리"옵션을 사용하는 것 같습니다. 이 의도가 무엇인지 아십니까?

나는 그것이 당신을 위해 일한 것을 기쁘게 생각합니다 :). 죄송합니다. 언급하신 새로운 화웨이 기능에 대해 전혀 모르겠습니다. 검색해야합니다. 그렇지 않으면 내 앱에 문제가 있습니다.
OussaMah

5
@Ton 이것을 사용하십시오 : com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity
Simon

2
Asus를 ComponentName ( "com.asus.mobilemanager", "com.asus.mobilemanager.autostart.AutoStartActivity")로 변경
Cristian Cardoso

3
EMUI +5 이상으로 화웨이 전화를 변경하십시오. 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 "))
Alex Cuadrón

14

모든 장치에 대한 솔루션 (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);
            }
        }
    }
}

자바

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

시작시 실행하고 로그 파일을 통해 검색에 로그 캣 필터를 추가 TAGbrand.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의 패키지 이름과 "앱 제외"화면의 클래스 이름을
몰라

1
당신은 QMobile의에 대한 당신의 대답에서 편집 할 수 있습니다 .. 새로운 의도 () setComponent (새 ComponentName ( "com.dewav.dwappmanager", "com.dewav.dwappmanager.memory.SmartClearupWhiteList")).
Noaman 아크람

이 코드를 사용했지만 Samsung J6 mobile에서는 작동하지 않습니다.
Shailesh

@Pierre 다른 프로젝트에서 직접 포함 할 수 있도록 이것을 GitHub의 라이브러리로 만드는 것을 고려 했습니까? 그런 다음 다른 개발자는 풀 요청을 통해 새 구성 요소를 제공 할 수도 있습니다. 생각?
Shankari

1

@Aiuspaktyn 솔루션을 사용하고 있는데 사용자가 앱을 보호 된 것으로 설정 한 후 대화 상자가 표시되지 않을 때 감지하는 방법의 일부가 누락되었습니다. 서비스를 사용하여 앱이 종료되었는지 여부를 확인하고 앱이 존재하는지 확인합니다.


3
당신은 서비스 pls의 샘플을 게시 할 수 있습니다.
Zaki

0

이 라이브러리를 사용하여 사용자를 보호 된 앱 또는 자동 시작으로 탐색 할 수 있습니다.

자동 스타터

휴대 전화가 자동 시작 기능을 지원하는 경우 이러한 앱에서 앱을 활성화하는 힌트를 사용자에게 표시 할 수 있습니다

이 방법으로 확인할 수 있습니다.

AutoStartPermissionHelper.getInstance().isAutoStartPermissionAvailable(context)

사용자를 해당 페이지로 이동하려면 간단히 다음을 호출하십시오.

AutoStartPermissionHelper.getInstance().getAutoStartPermission(context)

-4

PowerMaster-> 자동 시작-> 차단 된 섹션에서 앱 찾기 및 허용

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.