服务未在BOOT COMPLETE上启动

yan*_*ish 5 service android 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>
Run Code Online (Sandbox Code Playgroud)

我的广播接收器:

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

    }

}
Run Code Online (Sandbox Code Playgroud)

顺便说一下,清单中的活动是评论的,​​因为我并不真的需要它,它只是测试从一个活动启动服务.

Dav*_*ser 4

如果您的应用程序没有任何活动,您BroadcastReceiver将永远不会被调用。

当您安装应用程序时,它会以“停止状态”安装。处于“停止状态”的应用程序不会收到Intent发送给它们的广播。

为了使您的应用程序脱离“停止状态”,用户必须手动启动您的应用程序(至少一次)。为此,您必须向他提供一个Activity可以用来启动您的应用程序的文件。

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

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