0

我敢打赌这是重复的问题,但我需要再问一次。即使我输入了以下代码,服务也无法启动

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <receiver android:name=".MyBroadcastreceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>         

    <activity
        android:name="com.im.HomeActivity"
        android:clearTaskOnLaunch="true"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

    <activity
        android:name="com.im.ListActivity"
        android:label="@string/title_activity_list" >
    </activity>

    <service
        android:name="com.im.SyncService"
        android:process=":remote" >
    </service>
</application>

public class MyBroadcastreceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent arg1) {
        Intent intent = new Intent(context, SyncService.class);
        context.startService(intent);
        Log.i("Autostart", "started");          
    }   
}

请帮帮我。

4

2 回答 2

0

BraodcastReciever被调用了吗?

如果不是,那么原因可能如下:

从 3.1 开始,当安装应用程序时,它们处于“停止”状态,因此在用户明确启动它们之前它们将无法运行。按下强制停止将使它们返回此状态。

一旦用户第一次运行应用程序(并且没有强制停止它),一切都会像以前一样 - 重新启动将导致接收到 BOOT_COMPLETED 广播等等。但是,如果用户安装了该应用程序,除非他们手动运行该应用程序,否则将不会收到任何广播。

因此,在您的情况下,您将必须创建启动器活动并确保您至少启动该启动器活动一次,然后您将开始接收启动事件广播。

资源

于 2013-04-26T11:20:43.277 回答
0

从 Android 3.1 开始,用户必须至少启动一次应用程序,然后您的应用程序才能接收android.intent.action.BOOT_COMPLETED事件。

同样android:allowBackup="true"在您的清单文件中设置,请确保该应用程序安装在 SD 卡上。如果要保存到外部存储,则需要设置android.intent.action.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE

在某些手机(如 HTC)上有一个快速启动选项,如果它被激活,BOOT_COMPLETE将不会被调用。

另一种方法是使用Intent.ACTION_SCREEN_ON并检查服务是否正在运行,如果没有,则启动服务。更多信息在这里

于 2013-04-26T11:29:29.180 回答