起動時にサービスを開始したい。ブロードキャストレシーバーを作成し、ブロードキャストレシーバーからサービスを開始し、すべてxmlに挿入しました。のチュートリアルhttp://www.androidcompetencycenter.com/2009/06/start-service-at-boot/
は私を大いに助けてくれました。結果: エミュレーターでは、実際のデバイスと同様に、次のように発生します: - サービスが開始され、すぐに停止します! なぜサービスが停止するのかわかりません!
サービスは確実に開始されています。ログとトーストメッセージを読むことができます。サービスが開始されたことを証明するもの。
ログにも次のようなメッセージが表示されます。
<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>