Uygulamam, belirli bir saatte bir günde bir web sitesinden veri alabilmem için bazı kodları yeniden onaylıyorum. Araştırmamdan, AlarmManager
en uygun yaklaşım gibi görünüyor.AlarmManager, BroadcastReceiver ve Service çalışmıyor
ben takip ediyorum öğretici geçerli:
http://mobile.tutsplus.com/tutorials/android/android-fundamentals-downloading-data-with-services/ Şimdiye kadar, AlarmManager
ve BroadcastReceiver
ancak Service
asla başlamak gibi görünüyor, çalışıyor gibi görünüyor (. Yani onStartCommand
çağrılacak görünmüyor)
İşte kodun önemli parçacıkları var bugüne kadar şunlardır:
MyActivity.java
private void setRecurringAlarm(Context context) {
Calendar updateTime = Calendar.getInstance();
updateTime.setTimeZone(TimeZone.getDefault());
updateTime.set(Calendar.HOUR_OF_DAY, 20);
updateTime.set(Calendar.MINUTE, 30);
Intent downloader = new Intent(context, AlarmReceiver.class);
downloader.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, downloader, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
// should be AlarmManager.INTERVAL_DAY (but changed to 15min for testing)
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, updateTime.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent);
Log.d("MyActivity", "Set alarmManager.setRepeating to: " + updateTime.getTime().toLocaleString());
}
AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent dailyUpdater = new Intent(context, MyService.class);
context.startService(dailyUpdater);
Log.d("AlarmReceiver", "Called context.startService from AlarmReceiver.onReceive");
}
}
MyService.java
public class MyService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("MyService", "About to execute MyTask");
new MyTask().execute();
return Service.START_FLAG_REDELIVERY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private class MyTask extends AsyncTask<String, Void, boolean> {
@Override
protected boolean doInBackground(String... strings) {
Log.d("MyService - MyTask", "Calling doInBackground within MyTask");
return false;
}
}
}
I tr AndroidManifest.xml
<application ...>
...
<service android:name="MyService"></service>
<receiver android:name="AlarmReceiver"></receiver>
</application>
MyActivity
'da setRecurringAlarm
'u bekletme, günlük yazdırmayı beklendiği şekilde beklendiği gibi, her 15 dakikada bir AlarmReceiver
günlüğünde görünür. Ancak, ben günlüklerine bakın ne MyService
:(
Örnek dan günlüğünü görmek asla:
DEBUG/MyActivity(688): Set alarmManager.setRepeating to: Jan 29, 2012 8:30:06 PM
DEBUG/AlarmReceiver(688): Called context.startService from AlarmReceiver.onReceive
DEBUG/AlarmReceiver(688): Called context.startService from AlarmReceiver.onReceive
ben yanlış yaptığımı anlamaya görünüyor olamaz - benim anlayış Android Dev Docs dan Ben context.startService(dailyUpdater)
çağırdığınızda AlarmReceiver
o dönüş çağrısında MyService
yılında onStartCommand
, bu durumda olması görünmüyor gerektiğini olsa o!
yanlış olduğunu yapıyorum hiç?
01 başlamaması içinMyService
neden oluyor
1 teşekkürler kod help me .. – Nirali
. Http://stackoverflow.com/questions/25852309/does-alarmmanager-require-the-pendingintent-to-be-of-type-broadcastreceiver – ctate