我想在启动时启动服务。
我做了一个breoadcast接收器,从broadcastreceiver启动了一个服务,全部插入xml。
来自http://www.androidcompetencycenter.com/2009/06/start-service-at-boot/
的教程对我帮助很大。
结果:
在模拟器上,就像在真实设备上发生的那样:
- 服务开始然后立即停止!
我不知道服务停止的原因!
服务启动肯定,我可以读取日志和Toast消息。证明服务已启动。
同样在日志中我可以看到一些信息:
<u>
05-17 23:18:44.379: D/EAS SyncManager(247): !!! EAS SyncManager, onCreate
05-17 23:18:44.789: D/EAS SyncManager(247): !!! EAS SyncManager, onStartCommand
05-17 23:18:44.860: D/EAS SyncManager(247): !!! EAS SyncManager, stopping self
05-17 23:18:44.999: D/My Service(258): starting broadcast receiver
05-17 23:18:45.119: D/My Service(258): starting service in onCreate
05-17 23:18:45.985: D/Eas Debug(247): Logging:
05-17 23:18:45.999: D/EAS SyncManager(247): !!! EAS SyncManager, onDestroy
05-17 23:18:46.299: I//system/bin/fsck_msdos(29): Attempting to allocate 998 KB for FAT
</u>
EAS SyncManager已被破坏。我相信这是我的服务被迫停止的原因。 根据我从http://hi-android.info/src/com/android/exchange/SyncManager.java.html读到的内容,当EAS SyncManager被销毁时,启动时启动的服务默认接收StopSelf()。
我不知道这是不是真的。 如果确实如此......我该如何解决? 到现在为止有没有人对此感到困惑? 请帮忙。
这是代码:
等级
//服务等级
public class Contacts_Service extends Service{
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
Log.d("My Service", "onCreate");
mPeriodicEventHandler = new Handler();
mPeriodicEventHandler.postDelayed(doPeriodicTask,13000);
}
private Runnable doPeriodicTask = new Runnable()
{
public void run()
{
//your action here
Log.d("My Service", "eeeevery 13000 ms");
mPeriodicEventHandler.postDelayed(doPeriodicTask, 13000);
}
};
}
// BroadcastReceiver类从哪里开始启动服务
public class MyStartupIntentReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())){
Log.d("My Service", "starting broadcast receiver");
Intent serviceIntent = new Intent();
serviceIntent.setAction("com.Srv.mail.Contacts_Service");
context.startService(serviceIntent);
//serviceIntent.setAction("com.Srv.mail.SrvMailSettingsActivity");
//context.startActivity(serviceIntent);
}
}
}
以及AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.Srv.mail"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver android:name=".MyStartupIntentReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
<service android:enabled="true" android:name="Contacts_Service">
<intent-filter>
<action android:name="com.Srv.mail.Contacts_Service" />
</intent-filter>
</service>
<activity
android:name="com.Srv.mail.SrvMailSettingsActivity"
android:label="@string/app_name" >
<!-->intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter-->
</activity>
</application>
</manifest>
答案 0 :(得分:0)
我不确定只是尝试一下..可能有效
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
// Your code
}