Ich möchte, dass mein Dienst zu einem vom Alarmmanager angegebenen Zeitpunkt ausgeführt wird. Aber in meinem Fall läuft es auf die Zeit die ich angegeben habe und auch wenn ich die App nach dem angegebenen Zeit-Service öffne. Ich will es nur zur angegebenen Zeit laufen lassen und es sollte jeden Tag wiederholen. Ich weiß nicht, was im Code falsch ist, den ich geschrieben habe. Jede Hilfe wird geschätzt.Anrufdienst von Broadcast-Empfänger funktioniert nicht wie erwartet
Das ist meine Dienstklasse:
public class AutoLogout extends Service {
private SQLiteHandler db;
private SessionManager session;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// SqLite database handler
db = new SQLiteHandler(getApplicationContext());
// session manager
session = new SessionManager(getApplicationContext());
logoutUser();
Toast.makeText(getApplicationContext(),"Service started",Toast.LENGTH_SHORT).show();
return Service.START_STICKY;
}
/**
* Logging out the user. Will set isLoggedIn flag to false in shared
* preferences Clears the user data from sqlite users table
*/
private void logoutUser() {
session.setLogin(false);
db.deleteData();
// Launching the login activity
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
stopService(new Intent(getApplicationContext(),AutoLogout.class));
Toast.makeText(getApplicationContext(),"Service stopped",Toast.LENGTH_SHORT).show();
}
}
Das ist mein BroadcastReciever Klasse:
public class AlarmBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "MyReceiver Started", Toast.LENGTH_SHORT).show();
Intent intent1 = new Intent(context,AutoLogout.class);
context.startService(intent1);
}
}
CategoryActivity.java wo i Alarmmanager in oncreate Methode nenne:
public class CategoryActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_category);
Calendar cal_alarm = Calendar.getInstance();
cal_alarm.set(Calendar.HOUR_OF_DAY,14);
cal_alarm.set(Calendar.MINUTE,46);
cal_alarm.set(Calendar.SECOND,00);
Intent intent = new Intent(this, AlarmBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, cal_alarm.getTimeInMillis() , pendingIntent);
}
}
Dies ist in meiner Manifest-Datei:
Vielleicht ist dies für Sie? https://developer.android.com/reference/android/app/IntentService.html – Fildor
Warum verwenden Sie eine Aktivität zum Zurücksetzen des Alarms? Übrigens bezweifle ich, dass der CategoryActivity-Code kompiliert wird. Sie führen Code außerhalb jeder Methode oder Ctor aus ... haben Sie etwas kopiert? – Fildor
@Fildor: wo muss ich den Alarm zurückrufen? –