如何自动启动而不需要在Android中以编程方式自动启动

时间:2018-06-28 07:55:32

标签: android service broadcastreceiver bootcompleted

因为我想每两分钟更新一次服务器的位置,所以我在android中添加了服务类,当移动设备重启时,我使用boot_completed调用广播接收器。但是即使我的设备重新启动,该接收器也不会调用还是我那个时候也没有打开应用程序。

因为禁用了AUTO-START,这就是为什么它不出现的原因。如何在android中以编程方式启用像启用gps弹出窗口一样。

代码:如果我这样给出,它将打开自动启动页面的权限,而不是手动显示如何启用它。请帮助我。每次打开应用程序时,此代码都意味着即使启用,它也会出现。

if(Build.BRAND.equalsIgnoreCase("xiaomi") ){

    Intent intent = new Intent();
    intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
    startActivity(intent);


}else if(Build.BRAND.equalsIgnoreCase("Letv")){

    Intent intent = new Intent();
    intent.setComponent(new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity"));
    startActivity(intent);

}
else if(Build.BRAND.equalsIgnoreCase("Honor")){

    Intent intent = new Intent();
    intent.setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity"));
    startActivity(intent);

}

public class BootCompletedIntentReceiver extends BroadcastReceiver {
    PendingIntent pintent;
    @Override
    public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "boot"+intent.getAction(), Toast.LENGTH_SHORT).show();
        Log.i("QQ","boot"+intent.getAction());

        if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
        Intent pushIntent = new Intent(context, ForegroundLocationService.class);
            context.startService(pushIntent);

/*
            Calendar cal = Calendar.getInstance();
         intent = new Intent(context, ForegroundLocationService.class);
            pintent = PendingIntent
                    .getService(context, 0, intent, 0);
            Log.i("QQ","else--less than oreo"+pintent);

            AlarmManager alarm = (AlarmManager)context. getSystemService(Context.ALARM_SERVICE);
            // Start service every 20 seconds
            alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
                    5* 1000, pintent);*/
        }
    }
}

清单:

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

 <receiver android:enabled="true"
        android:directBootAware="true"
        android:exported="true" android:name=".background_services.BootCompletedIntentReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
            <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
        </intent-filter>
        <meta-data android:name="enable" android:value="true"/>
        <meta-data android:name="bootType" android:value="restart"/>
        <meta-data android:name="sendToBack" android:value="true"/>
    </receiver>

1 个答案:

答案 0 :(得分:0)

据我所知,不可能达到与gps Popup相同的行为。 也无法知道用户是否为您的APP开启了自动启动功能。 因此,我认为您唯一可以做的就是让用户在您已经在做的同时为您的应用打开自动启动功能。例如,在首次打开的应用程序上询问一次,然后在共享的首选项中存储一个值,以防止应用程序下次启动时弹出该窗口。