我打赌这是一再重复的问题,但我需要再问一次。即使我已经下面的代码
,服务也无法启动<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");
}
}
请帮帮我。
答案 0 :(得分:0)
你的BraodcastReciever
被调用了吗?
如果没有,那么原因可能如下:
从3.1开始安装应用程序时,它们位于 “停止”状态,因此他们将无法运行直到用户 明确启动它们。按下强制停止将返回它 状态。
一旦用户第一次运行应用程序(并且没有强制停止 它),一切都像以前一样 - 重启将导致BOOT_COMPLETED 要收到的广播等等。但是,如果用户安装了 应用程序,除非他们手动运行应用程序,否则不会进行广播 接收。
因此,在您的情况下,您必须创建启动器活动,并确保至少启动一次启动器活动然后您将开始接收启动事件广播。
答案 1 :(得分: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
并检查服务是否正在运行,如果不是,则启动服务。更多信息here