Android BOOT_COMPLETED事件无法启动服务

时间:2016-01-18 12:41:56

标签: android android-service bootcompleted

我正在编写一个小型的Android应用程序,它在设备启动时启动我的服务。 应用程序在Android版本4.4.2(Mi Note 4G,必须在其安全应用程序中启用权限),5.0(联想K3 Note),5.1(One Plus One),6(Nexus 5)的所有手机上运行良好,除了一款手机运行Android 5.0(联想A1000,Launcher类似于MiUI)。应用程序仅安装在内部存储上。 在设备重启之前使用/启动应用程序一次。 以下是清单和广播接收器文件的摘录

的manifest.xml:

 <receiver android:name="com.company.Broadcast"
     android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
       
        <intent-filter>
    
            <action android:name="android.intent.action.BOOT_COMPLETED" />
    
            <category android:name="android.intent.category.LAUNCHER" />
    
        </intent-filter>
    
    </receiver>
    
    <service android:enabled="true" android:exported="false" android:name="com.company.service" />

广播接收器:

    public class Broadcast extends BroadcastReceiver {
    
        private static final String TAG = “BroadcastReceiver";
    
        @Override
    
        public void onReceive(Context context, Intent intent) {
    
            Log.d(TAG, "onReceive");
    
            Intent service = new Intent(context, Service.class);
    
            service.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    
            context.startService(service);
        
    }
    
    
    }

某些预先安装的应用程序在启动时启动,有些会被跳过。我的应用程序恰好位于跳过的应用列表中。

以下是设备启动时来自logcat的一些行,

01-18 17:02:58.933 504-560/? I/PackageManager: Package com.android.deskclock checking android.permission.RECEIVE_BOOT_COMPLETED: BasePermission{183dc63c android.permission.RECEIVE_BOOT_COMPLETED}
01-18 17:02:58.933 504-560/? I/PackageManager: Package com.android.deskclock granting android.permission.RECEIVE_BOOT_COMPLETED
01-18 17:02:58.933 504-560/? I/PackageManager: Package com.android.mms.service checking android.permission.RECEIVE_BOOT_COMPLETED: BasePermission{183dc63c android.permission.RECEIVE_BOOT_COMPLETED}
01-18 17:02:58.933 504-560/? I/PackageManager: Package com.android.mms.service granting android.permission.RECEIVE_BOOT_COMPLETED

跳过包评论:

01-18 17:03:06.235 504-529/? D/ActivityManager: send broadcast: android.intent.action.BOOT_COMPLETED, skip package: com.google.android.gm
01-18 17:03:06.235 504-529/? D/ActivityManager: send broadcast: 

> android.intent.action.BOOT_COMPLETED, skip package: com.company

01-18 17:03:06.235 504-529/? D/ActivityManager: send broadcast: android.intent.action.BOOT_COMPLETED, skip package: com.frozendevs.cache.cleaner

我可能错过了一些代码来使它工作。任何意见/建议对我来说都有很大的帮助。

2 个答案:

答案 0 :(得分:2)

问题出在设备上。某些设备仅允许内部应用程序接收此操作。

您可以将其添加到您的意图过滤器中作为解决方法

<action android:name="android.intent.action.USER_PRESENT" />

用户解锁设备后会触发此操作。

答案 1 :(得分:0)

经过长时间的研究,我什至也获得了lenovo 1000 mobile的解决方案。

 <action android:name="android.intent.action.USER_PRESENT" />

它对我来说很好。如果它的lenovo移动设备您应该等待至少2分钟,那么它将自动打开