ここのチュートリアル/ガイドに従って、サービスを使用する最初のアプリをコーディングしていますhttp://www.vogella.com/articles/AndroidServices/article.html サービスが機能しており、ブロードキャストレシーバーの作成について説明していますBOOT_COMPLETED は機能し、数分ごとにサービスを実行できます。
私が抱えている問題は、ユーザーが電話を再起動するまで機能しないことです。サービスはアクティビティで開始されますが、デバイスが再起動されていない限り、アクティビティで終了するようです。
再起動せずに最初に実行したときにアクティビティからスケジューラを開始する方法はありますか?
スケジューラの私のコードは次のとおりです。
public class ScheduleReceiver extends BroadcastReceiver {
// Restart service every 30 seconds
private static final long REPEAT_TIME = 1000 * 60; // check every minute.
@Override
public void onReceive(Context context, Intent intent) {
Log.d("schedulereceiver", "starting schedule");
AlarmManager service = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, StartServiceReceiver.class);
PendingIntent pending = PendingIntent.getBroadcast(context, 0, i,
PendingIntent.FLAG_CANCEL_CURRENT);
Calendar cal = Calendar.getInstance();
// Start 30 seconds after boot completed
cal.add(Calendar.SECOND, 30);
//
// Fetch every 30 seconds
// InexactRepeating allows Android to optimize the energy consumption
service.setInexactRepeating(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), REPEAT_TIME, pending);
// service.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
// REPEAT_TIME, pending);
}
}
私のマニフェストファイルは次のようになります。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".ProximityActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".ProximityService"
android:enabled="true"
android:icon="@drawable/ic_launcher"
android:label="@string/service_name" >
</service>
<receiver android:name="ScheduleReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver android:name="StartServiceReceiver" >
</receiver>
</application>
</manifest>