服务未在BOOT COMPLETE上启动

时间:2015-05-07 15:21:15

标签: android service broadcastreceiver

我有一项服务,我想在BOOT COMPLETE

上开始

启动时,我显示了一个Toast消息。

我的问题是,当设备启动时,会显示toast并粘贴在屏幕上,并且服务无法正常启动。

但是,如果我尝试通过某项活动启动我的服务,则该服务启动良好,并且几秒钟之后烤面包会消失。

我的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tfl.extprotocolservice"
    android:versionCode="7"
    android:versionName="1.6" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <receiver android:name="com.tfl.extprotocolservice.ExtProtocolBroadcastReceiver"
            android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <service android:name=".ExtProtocolService" >
            <intent-filter>
                <action android:name="com.tfl.extprotocolservice.ISetIpPort" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.tfl.extprotocolservice.IExtMessage" />
            </intent-filter>
        </service>
 <!-- 
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="landscape" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 -->
    </application>

</manifest>

我的广播接收器:

public class ExtProtocolBroadcastReceiver extends BroadcastReceiver {


    /* broadcast receiver to start on BOOT COMPLETE*/
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent StartServiceIntent=new Intent(context,ExtProtocolService.class);
        context.startService(StartServiceIntent);

    }

}
不过,清单中的活动是评论的,​​因为我并不真的需要它,它只是测试从活动开始服务。

3 个答案:

答案 0 :(得分:3)

如果您的申请没有活动,您的BroadcastReceiver将永远不会被调用。

安装应用程序时,它将以“已停止状态”安装。处于“停止状态”的应用程序不会向其发送广播Intent

为了使您的应用程序退出“已停止状态”,用户必须手动启动您的应用程序(至少一次)。为此,您必须向他提供Activity,以便他可以用来启动您的申请。

一旦您的应用程序不再处于“停止状态”,Android将向其发送广播Intent。也就是说,直到用户“强制停止”你的应用程序。

如果用户“强制停止”您的应用程序,它将返回“停止状态”并且将不再获得广播Intent。直到用户再次手动启动您的应用程序。

答案 1 :(得分:0)

我尝试使用am broadcast -a android.intent.action.BOOT_COMPLETED然后重启设备。

您可以尝试<action android:name="android.intent.action.USER_PRESENT"/>

经过更多研究,我认为fastboot mode不会广播BOOT_COMPLETE。

答案 2 :(得分:-1)

您的服务是过滤操作,但您的意图不提供任何操作。 修复此问题:

StartServiceIntent.setAction("com.tfl.extprotocolservice.IExtMessage");