简体   繁体   English

如何以编程方式检查 MIUI 自动启动权限?

[英]How to check MIUI autostart permission programmatically?

I need to check programmatically if the auto start permission for my app in MIUI phone is on or off.我需要以编程方式检查 MIUI 手机中我的应用程序的自动启动权限是打开还是关闭。 Facebook and whatsapp have this permission already enabled by default , how can I do so? Facebook 和 whatsapp 已默认启用此权限,我该怎么做?

For now it's not possible.目前是不可能的。

As it's completely depend on their operating system API's and customisation.因为它完全取决于他们的操作系统 API 和定制。 Even developers have requested for this on XIOMI's official forums but there is no response from there side.甚至开发者在小米官方论坛上也提出了这个要求,但那里没有任何回应。

Till now even i am finding an answer to this question but nothing helped me.直到现在,即使我找到了这个问题的答案,但没有任何帮助。

For the time being it will be only possible for rooted phones.暂时只有root手机才有可能。 ie making customisation in their firmware by becoming super user.即通过成为超级用户在他们的固件中进行定制。 But this is not at all advisable as it may damage user's phone .但这一点也不可取,因为它可能会损坏用户的手机

EDIT 1编辑 1

You can redirect user to autostart permission's settings page for enabling your app using following code您可以使用以下代码将用户重定向到自动启动权限的设置页面以启用您的应用程序

String manufacturer = "xiaomi";
if (manufacturer.equalsIgnoreCase(android.os.Build.MANUFACTURER)) {
    //this will open auto start screen where user can enable permission for your app
    Intent intent1 = new Intent();
    intent1.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
    startActivity(intent1);
}

EDIT 2 I have recently used Mi A1 from XIOMI which have stock android (not miui) so this phone does not have autostart permission settings from miui.编辑 2我最近使用了 XIOMI 的 Mi A1,它有股票 android(不是 miui),所以这款手机没有 miui 的autostart permission设置。 So take care while navigating user to the settings in such devices because it will not work here.因此,在将用户导航到此类设备中的设置时要小心,因为它在这里不起作用。

100% working for oppo, vivo, xiomi, letv huawei, and honor 100%为OPPO、vivo、小米、乐视华为、荣耀工作

just call this function只需调用此函数

private void addAutoStartup() {

    try {
        Intent intent = new Intent();
        String manufacturer = android.os.Build.MANUFACTURER;
        if ("xiaomi".equalsIgnoreCase(manufacturer)) {
            intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
        } else if ("oppo".equalsIgnoreCase(manufacturer)) {
            intent.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity"));
        } else if ("vivo".equalsIgnoreCase(manufacturer)) {
            intent.setComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity"));
        } else if ("Letv".equalsIgnoreCase(manufacturer)) {
            intent.setComponent(new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity"));
        } else if ("Honor".equalsIgnoreCase(manufacturer)) {
            intent.setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity"));
        }

        List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        if  (list.size() > 0) {
            startActivity(intent);
        }
    } catch (Exception e) {
        Log.e("exc" , String.valueOf(e));
    }
}

This is not a perfect solution by any means and it requires some testing, but I've been able to detect the autostart permission on my Xiaomi device with it.这无论如何都不是一个完美的解决方案,它需要一些测试,但我已经能够用它检测到我的小米设备上的自动启动权限。

The autostart permission allows apps to be started by receiving an implicit broadcast intent.自动启动权限允许通过接收隐式广播意图来启动应用程序。 This method consists of scheduling an implicit broadcast with AlarmManager, killing the app and checking if the broadcast caused it to respawn.此方法包括使用 AlarmManager 安排隐式广播、终止应用程序并检查广播是否导致它重生。 A second explicit intent is also scheduled just to make sure that the app is started eventually.还安排了第二个显式意图,以确保最终启动应用程序。

public class AutostartDetector extends BroadcastReceiver {

// I've omitted all the constant declaration to keep this snippet concise
// they should match the values used in the Manifest

public static void testAutoStart(Context context) {
    long now = System.currentTimeMillis();
    // this ID is for matching the implicit and explicit intents
    // it might be unnecessary
    String testId = Long.toHexString(now);

    Intent implicitIntent = new Intent(ACTION_IMPLICIT_BROADCAST);
    // the category is set just to make sure that no other receivers handle the broadcast
    implicitIntent.addCategory(CATEGORY_AUTOSTART);
    implicitIntent.putExtra(EXTRA_TEST_ID, testId);

    PendingIntent implicitPendingIntent =
            PendingIntent.getBroadcast(context, REQUEST_CODE_IMPLICIT_BROADCAST, implicitIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    Intent explicitIntent = new Intent(ACTION_EXPLICIT_BROADCAST);
    explicitIntent.addCategory(CATEGORY_AUTOSTART);
    explicitIntent.setComponent(new ComponentName(context, AutostartDetector.class));
    explicitIntent.putExtra(EXTRA_TEST_ID, testId);

    PendingIntent explicitPendingIntent =
            PendingIntent.getBroadcast(context, REQUEST_CODE_EXPLICIT_BROADCAST, explicitIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    // calling commit() makes sure that the data is written before we kill the app
    // again, this might be unnecessary
    getSharedPreferences(context).edit().putInt(testId, TestStatus.STARTED).commit();

    // the explicit intent is set with an additional delay to let the implicit one be received first; might require some fine tuning
    alarmManager.set(AlarmManager.RTC_WAKEUP, now + BASE_DELAY, implicitPendingIntent);
    alarmManager.set(AlarmManager.RTC_WAKEUP, now + BASE_DELAY + EXPLICIT_INTENT_DELAY, explicitPendingIntent);

    // kill the app - actually kind of tricky, see below
    SelfKiller.killSelf(context);
}

@Override
public void onReceive(Context context, Intent intent) {
    SharedPreferences sharedPreferences = getSharedPreferences(context);
    String testId = intent.getStringExtra(EXTRA_TEST_ID);

    if (testId == null) {
        Log.w(TAG, "Null test ID");
        return;
    }

    if (!sharedPreferences.contains(testId)) {
        Log.w(TAG, "Unknown test ID: " + testId);
        return;
    }

    String action = intent.getAction();
    if (ACTION_IMPLICIT_BROADCAST.equals(action)) {
        // we could assume right here that the autostart permission has been granted,
        // but we should receive the explicit intent anyway, so let's use it
        // as a test sanity check
        Log.v(TAG, "Received implicit broadcast");
        sharedPreferences.edit().putInt(testId, TestStatus.IMPLICIT_INTENT_RECEIVED).apply();
    } else if (ACTION_EXPLICIT_BROADCAST.equals(action)) {
        Log.v(TAG, "Received explicit broadcast");
        int testStatus = sharedPreferences.getInt(testId, -1);
        switch (testStatus) {
            case TestStatus.STARTED:
                // the implicit broadcast has NOT been received - autostart permission denied
                Log.d(TAG, "Autostart disabled");
                sharedPreferences.edit().putBoolean(PREF_AUTOSTART_ENABLED, false).apply();
                notifyListener(false);
                break;

            case TestStatus.IMPLICIT_INTENT_RECEIVED:
                // the implicit broadcast has been received - autostart permission granted
                Log.d(TAG, "Autostart enabled");
                sharedPreferences.edit().putBoolean(PREF_AUTOSTART_ENABLED, true).apply();
                notifyListener(true);
                break;

            default:
                Log.w(TAG, "Invalid test status: " + testId + ' ' + testStatus);
                break;
        }
    }
}

private interface TestStatus {
    int STARTED = 1;
    int IMPLICIT_INTENT_RECEIVED = 2;
}

Receiver declaration in the manifest:清单中的接收方声明:

<receiver android:name=".autostart.AutostartDetector">
    <intent-filter>
        <category android:name="com.example.autostart.CATEGORY_AUTOSTART"/>
        <action android:name="com.example.autostart.ACTION_IMPLICIT_BROADCAST"/>
        <action android:name="com.example.autostart.ACTION_EXPLICIT_BROADCAST"/>
    </intent-filter>
</receiver>

Killing the app reliably is another problem.可靠地杀死应用程序是另一个问题。 I've been using this helper method:我一直在使用这个辅助方法:

public static void killSelf(Context context) {
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    activityManager.killBackgroundProcesses(context.getPackageName());

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        // this is all we can do before ICS. luckily Xiaomi phones have newer system versions :)
        System.exit(1);
        return;
    }

    // set up a callback so System.exit() is called as soon as all
    // the activities are finished
    context.registerComponentCallbacks(new ComponentCallbacks2() {
        @Override
        public void onTrimMemory(int i) {
            if (i == TRIM_MEMORY_UI_HIDDEN) {
                Log.v(TAG, "UI Hidden");
                System.exit(1);
            }
        }

        /* ... */
    });

    // see below
    ActivityTracker.getInstance().finishAllActivities();
}

ActivityTracker is another utility that keeps track of activity lifecycles. ActivityTracker 是另一个跟踪活动生命周期的实用程序。 Make sure to register it in the Application subclass.确保在 Application 子类中注册它。

@RequiresApi(api = Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public final class ActivityTracker implements Application.ActivityLifecycleCallbacks {
    private final ArraySet<Activity> mCreatedActivities = new ArraySet<>();

    public static ActivityTracker getInstance() {
        return Holder.INSTANCE;
    }

    public static void init(Application application) {
        application.registerActivityLifecycleCallbacks(getInstance());
    }

    public static void release(Application application) {
        ActivityTracker activityTracker = getInstance();
        application.unregisterActivityLifecycleCallbacks(activityTracker);
        activityTracker.mCreatedActivities.clear();
    }

    public void finishAllActivities() {
        // iterate over active activities and finish them all
        for (Activity activity : mCreatedActivities) {
            Log.v(TAG, "Finishing " + activity);
            activity.finish();
        }
    }

    public Set<Activity> getCreatedActivities() {
        return Collections.unmodifiableSet(mCreatedActivities);
    }

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
        mCreatedActivities.add(activity);
    }    

    @Override
    public void onActivityDestroyed(Activity activity) {
        mCreatedActivities.remove(activity);
    }

    private static final class Holder {
        private static final ActivityTracker INSTANCE = new ActivityTracker();
    }

    /* ... */
}

You might also want to stop all the services just to be sure.您可能还想停止所有服务以确保安全。

In addition to Nikhil's answer :除了Nikhil 的回答

First of all, some apps like Facebook, Whatsapp are whitelisted from Xiomi by default that means auto start permission will automatically be on for these apps.首先,Facebook、Whatsapp 等一些应用程序默认被小米列入白名单,这意味着这些应用程序将自动开启自动启动权限。

I also didn't find any way to check for auto start permission if it's enabled or not and enable it programmatically.我也没有找到任何方法来检查自动启动权限是否已启用并以编程方式启用它。 Though as above answer suggests we can redirect user to auto start permission activity but when we have to redirect user we still don't know and also this will not work in all of the Xiomi devices.虽然如上答案表明我们可以将用户重定向到自动启动权限活动,但是当我们必须重定向用户时,我们仍然不知道,而且这也不适用于所有 Xiomi 设备。

So I used an alternative for my sync adapter to work.所以我使用了另一种方法让我的同步适配器工作。 I stored a boolean variable named "isSyncAdapterRunning" in shared preferences and set the value of it every time sync adapter runs.我在共享首选项中存储了一个名为“isSyncAdapterRunning”的布尔变量,并在每次同步适配器运行时设置它的值。 This way I'll be able to know if my sync adapter is working or not.这样我就可以知道我的同步适配器是否工作。

//in my sync adapter
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {
    Log.e("TAG", "SyncStarted");
    performSync(true);        
}

public static void performSync(boolean fromSyncAdapterClass){
    //write your code for sync operation
    if(fromSyncAdapterClass){
          setValueOfIsSyncAdapterRunningVariable();
    }
}

I made other background service to perform same task if sync adapter is not working.如果同步适配器不工作,我让其他后台服务执行相同的任务。

//In my other background service
public class BackgroundSyncService extends IntentService {

public BackgroundSyncService() {
    super("BackgroundSyncService");
}

@Override
protected void onHandleIntent(Intent intent) {
    SyncAdapter.performSync(false);        
}
}

Now start sync adapter:现在启动同步适配器:

// start your sync adapter here

//And after that just start that service with a condition
if(!getValueOfIsSyncAdapterRunningVariable()){
      startService(new Intent(context, BackgroundSyncService.class));
}

So basically I'm running another service to perform same task in background if my sync adapter is not working and the best thing is only one of them will run at a time.所以基本上我正在运行另一个服务来在后台执行相同的任务,如果我的同步适配器不工作,最好的事情是一次只有一个运行。 Above code will fail if user turn on auto start permission and turn off again because value of boolean variable is already set.如果用户打开自动启动权限并再次关闭,上述代码将失败,因为布尔变量的值已经设置。 For that you can set value of boolean variable to default once in every 24Hrs.为此,您可以每 24 小时将布尔变量的值设置为默认值一次。

Hope this helps.希望这可以帮助。

For now it's not possible.目前是不可能的。 As it's completely depend on their operating system API's and customization.因为它完全取决于他们的操作系统 API 和定制。 But i implemented a fix using SharedPreference.但我使用 SharedPreference 实现了修复。 It doesn't solved the problem but it prevents app from opening setting screen everytime app is opened.它没有解决问题,但它会阻止应用程序在每次打开应用程序时打开设置屏幕。 Example :例子 :

 if (AppPref.getAutoStart(context).isEmpty() && AppPref.getAutoStart(context).equals("")) {
        enableAutoStart();
    }

private void enableAutoStart() {
    if (Build.BRAND.equalsIgnoreCase("xiaomi")) {

        new AlertDialog.Builder(context)
                .setTitle("Enable AutoStart")
                .setMessage("Please allow this app to always run in the background,else our services can't be accessed.")
                .setNegativeButton("Deny", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        AppPref.setAutoStart(context, "");
                        dialog.dismiss();
                    }
                })
                .setPositiveButton("ALLOW", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        try {
                            AppPref.setAutoStart(context, "1");
                            Intent intent = new Intent();
                            intent.setComponent(new ComponentName("com.miui.securitycenter",
                                    "com.miui.permcenter.autostart.AutoStartManagementActivity"));
                            startActivity(intent);
                        } catch (Exception e) {
                            Toast.makeText(context, "Can't perform action", Toast.LENGTH_SHORT).show();
                        }
                        dialog.dismiss();
                    }
                })
                .create()
                .show();
    }
}

You cannot check whether autorun permission is enabled or not because autorun feature is provided by customised os only not by android os like mi, vivo, oppo, letv etc您无法检查是否启用了自动运行权限,因为自动运行功能仅由自定义操作系统提供,而不是由 mi、vivo、oppo、letv 等 android 操作系统提供

This is a workaround tested on MI, Honor and vivo phones.这是在 MI、Honor 和 vivo 手机上测试的解决方法。

To check whether os is customised like miui, honor ui copy and paste this method in activity, fragment or util class要检查os是否像miui一样自定义,请将此方法复制并粘贴到activity、fragment或util类中

public static void getAutoStartPermission(final Activity context) {
        final String build_info = Build.BRAND.toLowerCase();
        switch (build_info) {
            case "xiaomi":
                Utilities.Companion.showAutorunDialog(context);
                break;
            case "letv":
                Utilities.Companion.showAutorunDialog(context);
                break;
            case "oppo":
                Utilities.Companion.showAutorunDialog(context);
                break;
            case "vivo":
                Utilities.Companion.showAutorunDialog(context);
                break;
            case "Honor":
                Utilities.Companion.showAutorunDialog(context);
                break;
            default:
                break;

        }

    }

Where在哪里

fun showAutorunDialog(context: Context) {
            val builder = AlertDialog.Builder(context)
            //set title for alert dialog
            builder.setTitle("Alert")
            //set message for alert dialog
            builder.setMessage("Enable Autostart permission for this app if its disabled in app settings in order to run application in background.")
            builder.setCancelable(true)
            //performing positive action
            builder.setPositiveButton("Enable") { _, _ ->
                addAutoStartup(context)
            }

            // Create the AlertDialog
              var  vpnDialog = builder.create()
                // Set other dialog properties
                vpnDialog!!.setCancelable(false)
                vpnDialog!!.show()

        }
        private fun addAutoStartup(context:Context) {
            try {
                val intent = Intent()
                val manufacturer = Build.MANUFACTURER
                if ("xiaomi".equals(manufacturer, ignoreCase = true)) {
                    intent.component = ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")
                } else if ("oppo".equals(manufacturer, ignoreCase = true)) {
                    intent.component = ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity")
                } else if ("vivo".equals(manufacturer, ignoreCase = true)) {
                    intent.component = ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity")
                } else if ("Letv".equals(manufacturer, ignoreCase = true)) {
                    intent.component = ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity")
                } else if ("Honor".equals(manufacturer, ignoreCase = true)) {
                    intent.component = ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity")
                }
                val list: List<ResolveInfo> = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
                if (list.size > 0) {
                    context.startActivity(intent)
                }
            } catch (e: java.lang.Exception) {
                Log.e("exc", e.toString())
            }
        }

This code worked for me.这段代码对我有用。 Simple and easy .简单易行。 Credit信用

  private State getAutoStartState(Activity activity) throws Exception {
    Class<?> clazz;
    try {
        clazz = Class.forName(CLAZZ);
    } catch (ClassNotFoundException ignored) {
        // we don't know if its enabled, class
        // is not found, no info
        return State.NO_INFO;
    }
    final Method method = getMethod(clazz);
    if (method == null) {
        // exception raised while search the method,
        // or it doesn't exist
        return State.NO_INFO;
    }
    // the method is a public method, It's still
    // better to do this
    method.setAccessible(true);

    // the target object is null, because the
    // method is static
    final Object result = method.invoke(null, getActivity(),
            getActivity().getPackageName());

    // the result should be an Int
    if (!(result instanceof Integer))
        throw new Exception();

    final int _int = (int) result;

    if (_int == ENABLED)
        return State.ENABLED;
    else if (_int == DISABLED)
        return State.DISABLED;
    return State.UNKNOWN;
}

private Method getMethod(Class<?> clazz) {
    try {
        return clazz.getDeclaredMethod("getApplicationAutoStart",
                Context.class, String.class);
    } catch (Exception ignored) {
        // this should not happen, probably
        // MIUI version is updated, lets give a last try
        return null;
    }
}
public void checkMIUIAutoStart(Activity activity) throws Exception {
    if (getAutoStartState(activity) == State.DISABLED) {

        String manufacturer = "xiaomi";
        if (manufacturer.equalsIgnoreCase(android.os.Build.MANUFACTURER)) {
            //this will open auto start screen where user can enable permission for your app
            Intent intent1 = new Intent();
            intent1.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
            startActivity(intent1);
        }

    }else {
        Toast.makeText(activity, "Auto-start is enabled.", Toast.LENGTH_SHORT).show();
    }
}

You could use this library to check the autostart permission state on MIUI 10, 11 and 12.您可以使用此库检查 MIUI 10、11 和 12 上的自动启动权限状态。

https://github.com/XomaDev/MIUI-autostart https://github.com/XomaDev/MIUI-autostart

// make sure device is MIUI device, else an 
// exception will be thrown at initialization
Autostart autostart = new Autostart(applicationContext);

State state = autostart.getAutoStartState();

if (state == State.DISABLED) {
    // now we are sure that autostart is disabled
    // ask user to enable it manually in the settings app    
} else if (state == State.ENABLED) {
    // now we are also sure that autostart is enabled
}

To check if permission enabled, I just starting a foreground service and check if is running.要检查是否启用了权限,我只是启动了一个前台服务并检查是否正在运行。

Service:服务:

class ExtraPermissionStateService: Service() {

    companion object {
        private var instance: ExtraPermissionStateService? = null

        fun isAppCanRunOnBackground(context: Context): Boolean {
            val serviceIntent = Intent(context, ExtraPermissionStateService::class.java)
            context.startService(serviceIntent)
            return instance != null
        }
    }

    override fun onBind(p0: Intent?): IBinder? {
        return null
    }

    override fun onCreate() {
        super.onCreate()
        instance = this
    }

    override fun onDestroy() {
        super.onDestroy()
        instance = null
    }
}

call it:叫它:

ExtraPermissionStateService.isAppCanRunOnBackground(context)

And don't forget on the manifest:并且不要忘记清单:

<service android:name=".helpers.utils.ExtraPermissionStateService"/>

I have tried the below solution and it worked for me.我已经尝试了以下解决方案,它对我有用。 If the "Auto Start" is enabled it will return "true", if not it will return "false".如果启用了“自动启动”,它将返回“true”,否则将返回“false”。

public class CustomPermissionCheck {

private static final String TAG = "CustomPermissionCheck";

private Context context;
private static final int APP_AUTO_START_PERMISSION_CODE = 10008;

public CustomPermissionCheck(Context context) {
    this.context = context;
}

public boolean isAutoStartEnabled() {

    try {
        AppOpsManager appOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
        Method method = AppOpsManager.class.getMethod("checkOpNoThrow", int.class, int.class, String.class);
        int result = (int) method.invoke(appOpsManager, APP_AUTO_START_PERMISSION_CODE, android.os.Process.myUid(), context.getPackageName());
        boolean isEnabled = result == AppOpsManager.MODE_ALLOWED;
        return isEnabled;
    } catch (Exception e) {
        e.printStackTrace();
    }

    return false;
}
}

You have to do allow and deny for system permissions.您必须允许和拒绝系统权限。

below is the code:下面是代码:

private boolean checkPermission(){
    int result = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION);
    if (result == PackageManager.PERMISSION_GRANTED){

        return true;

    } else {

        return false;

    }
}

 @Override
 public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_REQUEST_CODE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                Snackbar.make(view,"Permission Granted, Now you can access location data.",Snackbar.LENGTH_LONG).show();

            } else {

                Snackbar.make(view,"Permission Denied, You cannot access location data.",Snackbar.LENGTH_LONG).show();

            }
            break;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在 android studio 上以编程方式检查自动启动权限是启用还是禁用 - how to check Programmatically AutoStart Permission is Enable or disable on android studio 如何检查miui手机中的短信权限 - How to check permission for sms in miui phones 以编程方式自动启动权限 - Autostart permission programmatically 如何以编程方式在MIUI设备中打开应用程序权限设置? - How to open app permission Settings in MIUI devices programmatically? 如何以编程方式获取MIUI Security app自动启动权限? - How to get MIUI Security app auto start permission programmatically? 如何获得MIUI 8+中的“服务SMS”阅读权限(以编程方式) - How to get Permission for read “Service SMS” in MIUI 8+ (programmatically) 如何在MIUI 8+中获取读取“服务SMS”的权限(以编程方式) - How to get Permission for read “Service SMS” in MIUI 8+ (programmatically) 如何在MIUI中检查显示弹出窗口(WindowManager)权限? - how to check display popup window (WindowManager) permission in MIUI? 如何检查应用程序是MI安全权限自动启动中的白名单 - How to check application is white list in MI security permission autostart 如何在MIUI中适合运行时权限 - how to fit run time permission in MIUI
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM