2012-03-07 62 views
0

以下是我的启动服务的代码。Android4.0服务已启动

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

在manifest文件中,我定义了如下的广播接收器。

<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

我从网上找到一个文章,希望它可以帮助ü:

广播回归确认

在以前的文章中,我列举的证据表明,BOOT_COMPLETED广播不会开箱工作的Android 3.1直到用户使用您的应用程序。

它实际上比这大一些。

在我提起诉讼,寻求澄清的问题,Hackborn女士表示:

与3.1开始时,应用程序安装它们处于“停止”状态,所以他们将无法运行,直到用户明确启动他们。按下强制停止会将它们返回到此状态。因此,在第一次安装应用程序时,系统完全忽略它们,除非用户手动启动某些内容:最有可能的是单击启动器活动或添加应用程序窗口小部件。

开发人员一直依靠获得某种系统广播而无需用户干预将需要调整他们的Android 3.1应用程序。

正如我在以前的文章中写道:

我期望大多数的应用程序都会好的。例如,如果您的启动接收器在那里建立AlarmManager时间表,您还需要在应用程序首次运行时建立该时间表,因此用户无需重新启动手机即可设置闹钟。该模式不会改变 - 只是如果用户重新启动手机,它将不会设置您的闹钟,直到用户执行其中一项活动。

更新:为了澄清上述报价,一旦用户第一次运行应用程序(并且不强制停止它),一切都会像以前一样运行 - 重新启动将导致BOOT_COMPLETED广播被接收等等。但是,如果用户安装应用程序,直到手动运行应用程序,并且不会收到广播。如果用户强制停止应用程序,直到手动运行该应用程序,并且不会收到广播。 这一变化并不令人震惊,因为它通过限制恶意软件在没有用户知识的情况下可以运行的方式来增强安全性。虽然它不提供完美的安全性 - 但恶意软件仍然可以安装它自己的“愤怒的小鸟”发射器图标,并希望用户搞砸 - 这是一种改进。