2016-04-06 31 views
1

i eine Anwendung habe, wo ich für jede 15 Minuten einen Alarm müssen planen dies der Codeandroid Ausführen von Code nur einmal

public void scheduleAlarm() { 
    // Construct an intent that will execute the AlarmReceiver 
    Intent intent = new Intent(getApplicationContext(), MyAlarmReceiver.class); 
    // Create a PendingIntent to be triggered when the alarm goes off 
    final PendingIntent pIntent = PendingIntent.getBroadcast(this, MyAlarmReceiver.REQUEST_CODE, 
     intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    // Setup periodic alarm every 5 seconds 
    long firstMillis = System.currentTimeMillis(); // alarm is set right away 
    AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
    // First parameter is the type: ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC_WAKEUP 
    // Interval can be INTERVAL_FIFTEEN_MINUTES, INTERVAL_HALF_HOUR, INTERVAL_HOUR, INTERVAL_DAY 
    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis, 
     AlarmManager.INTERVAL_HALF_HOUR, pIntent); 
    } 
} 

ist und ich diese Methode in der onCreate Methode meiner mainActivity nennen, mein Problem ist, ich bekomme nicht, wie man die Methode beschränkt, die nur einmal aufgerufen wird, da die Methode onCreate jedes Mal aufgerufen wird, wenn die Aktivität erstellt wird. Wenn ich eine gemeinsame Voreinstellung verwende, um zu speichern, ob die Methode aufgerufen wird oder nicht, was kann ich tun, wenn der Benutzer die appdata von den Einstellungen löscht.

+1

auch nicht helfen google, wenn der Benutzer die App-Daten gelöscht; hoffe du hast die antwort :); Viel Spaß beim Codieren – DJphy

+0

@Shantanu Hi, nur mit diesen Fragen überprüfen. http://stackoverflow.com/questions/24462279/alarm-manager-service-start-every-oncreate. – RameshJaga

+0

dann speichern Sie die Informationen in der lokalen Datenbank –

Antwort

1

Erstellen Sie eine Voreinstellung und setzen Sie die Flagge darauf.

SharedPreferences sharedPreferences = getSharedPreferences("MyPref", Context.MODE_PRIVATE); 
           SharedPreferences.Editor editor = sharedPreferences.edit(); 
           editor.putBoolean("isFlag", false); 
           editor.commit(); 

Bevor Sie diese Methode aufrufen, überprüfen Sie das Flag, wenn es wahr ist, dann wird Ihre Methode aufgerufen.

SharedPreferences sharedPreferences = getSharedPreferences("MyPref", Context.MODE_PRIVATE); 
if (sharedPreferences.getBoolean("isFlag", true)) { 
    scheduleAlarm(); 
} 

Ich hoffe, dass es Ihnen helfen kann ...

+0

aber was passiert, wenn der Benutzer die App Daten löscht –

+0

Sie können Ihre eigene Aktivität wie ** RestrictClearData.java ** erstellen Und in dieser Aktivität eine Fehlermeldung wie .. "Sie haben keine Erlaubnis zum Löschen von App-Daten" Fügen Sie Ihrem Application-Tag in der Manifestdatei einfach eine Zeile hinzu. ** android: manageSpaceActivity = ". RestrictClearData" ** –

+0

Anstelle der Schaltfläche ** Daten löschen ** ** Speicherplatz verwalten ** Schaltfläche wird angezeigt. Wenn der Benutzer auf diese Schaltfläche klickt, wird die Aktion Benutzer einschränken aktiviert. Ich hoffe, es kann Ihnen helfen .. :) –

Verwandte Themen