这是我启动服务的代码。
public class MyStartupIntentReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
Intent callService = new Intent();
callService.setAction("com.xxxx.yyyy.services.StartServiceActivity");
context.startService(callService);
}
}
在清单文件中,我正在定义广播接收器,如下所示。
<receiver android:name=".MyStartupIntentReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"
/>
</intent-filter>
</receiver>
我在清单文件
中声明服务如下<service android:name=".services.CallService">
<intent-filter>
<action
android:name="com.xxxx.yyyy.services.StartServiceActivity" />
</intent-filter>
</service>
用户启动我的应用程序即时启动我的活动服务
serviceIntent = new Intent(SplashScreen.this, StartServiceActivity.class);
getApplicationContext().startService(serviceIntent);
问题是android2.3.5 SDK设备服务正常。但不是4.0设备。我的代码有什么问题。请帮我解决。
答案 0 :(得分:0)
我从互联网上找到一篇文章,希望它可以帮到你:
广播回归已确认
在上一篇文章中,我引用了一些证据,证明在用户使用你的应用程序之前,BOOT_COMPLETED广播不会在Android 3.1上开箱即用。
实际上有点大于此。
在我提出澄清的问题上,Hackborn女士表示:
从3.1开始安装应用程序时,它们处于“已停止”状态,因此在用户显式启动它们之前它们将无法运行。按下强制停止将使它们返回此状态。
因此,当首次安装应用程序时,系统会完全忽略它们,除非用户手动启动某些内容:单击启动器活动或添加应用程序小部件,很可能是这样。
一直依赖于在没有用户干预的情况下进行某种系统广播的开发人员需要针对Android 3.1调整他们的应用程序。
正如我在上一篇文章中写的那样:
我希望大多数应用都可以。例如,如果您的启动接收器用于建立AlarmManager计划,您还需要在首次运行应用程序时建立该计划,因此用户无需重新启动手机即可设置警报。这种模式不会改变 - 只是如果用户碰巧重新启动手机,它就不会设置你的警报,直到用户运行你的一个活动。
更新:为了澄清上述引用,一旦用户第一次运行应用程序(并且没有强制停止它),一切都像以前一样 - 重启将导致接收BOOT_COMPLETED广播等等。但是,如果用户安装了应用程序,除非他们手动运行应用程序,否则不会收到任何广播。如果用户强制停止应用程序,除非他们手动运行应用程序,否则不会收到任何广播。 这种变化并不是非常令人震惊,因为它通过限制恶意软件在没有用户知识的情况下运行的方式来提高安全性。虽然它没有提供完美的安全性 - 恶意软件仍然可以安装自己的愤怒的小鸟启动器图标副本,并希望用户搞砸 - 这是一个改进。