2017-05-26 5 views
0

Wenn ich den Alarm einstelle und dann mein Gerät neu starte, funktioniert der Alarm nicht mehr. Ich habe BroadcastReciver korrekt registriert und Boot BroadCastReciver erstellt, aber es funktioniert immer noch nicht nach dem Neustart des Geräts.Der Alarm-Manager funktioniert nach dem Neustart des Telefons nicht

Mein Code:

MainActivty für Alarm zum ersten Mal einstellen:

public class MainActivity extends AppCompatActivity { 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 



     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putString("language","1"); 
     editor.commit(); 

     setRecurringAlarm(this); 

    } 

    private void setRecurringAlarm(Context context) { 

     Calendar updateTime = Calendar.getInstance(); 
     updateTime.setTimeZone(TimeZone.getTimeZone("GMT+5:00")); 
     updateTime.set(Calendar.HOUR_OF_DAY, 3); 
     updateTime.set(Calendar.MINUTE, 00); 

     Intent intent = new Intent(context, Tasks.class); 
     PendingIntent recurringDownload = PendingIntent.getBroadcast(context, 
       0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager alarms = (AlarmManager) this.getSystemService(
       Context.ALARM_SERVICE); 
     alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
       updateTime.getTimeInMillis(), 
       AlarmManager.INTERVAL_DAY, recurringDownload); 
    } 
} 

BroadcastReciver Aufgabe:

public class Tasks extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

      Intent i = new Intent(); 
      i.setClassName(context, Main2Activity.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(i); 
     } 
} 

Stiefel BroadcastReciver:

public class BootBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Calendar updateTime = Calendar.getInstance(); 
     updateTime.setTimeZone(TimeZone.getTimeZone("GMT+5:00")); 
     updateTime.set(Calendar.HOUR_OF_DAY, 3); 
     updateTime.set(Calendar.MINUTE, 00); 

     Intent i = new Intent(context, Tasks.class); 
     PendingIntent recurringDownload = PendingIntent.getBroadcast(context, 
       0, i, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager alarms = (AlarmManager) context.getSystemService(
       Context.ALARM_SERVICE); 
     alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
       updateTime.getTimeInMillis(), 
       AlarmManager.INTERVAL_DAY, recurringDownload); 
    } 
} 

Androi dManifest:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission 
    android:name="android.permission.MODIFY_PHONE_STATE" 
    tools:ignore="ProtectedPermissions" /> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

<application 
    . 
    . 
    . 

    <receiver android:name=".BootBroadcastReceiver" 
     android:enabled="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
      <uses-permission android:name="android.permission.WAKE_LOCK" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 
    <receiver android:name=".Tasks" 
     android:enabled="true"> 
    </receiver> 

</application> 

Antwort

1

Sie benötigen Service-und Broadcast-Empfänger, die Ihre App aufwachen, wenn das Handy neu gestartet wird. Hier habe ich Service-Code, der Ihnen helfen kann (Es funktioniert perfekt in meiner App).

Dienst

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.support.annotation.Nullable; 


public class MyService extends Service { 
    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     new GPSTracker(ReunirseService.this); 
     return START_STICKY; 
    } 
} 

Empfänger die Absicht von Boot abgeschlossen empfangen und wird Ihren Dienst starten.

import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.Intent; 

    public class BootReceiver extends BroadcastReceiver { 
     RestartServiceReceiver alarm = new RestartServiceReceiver(); 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) 
      { 
      Intent i = new Intent(context, MyService .class); 
      context.startService(i); 
      } 

     } 
    } 

Und brauchen Sie die Erlaubnis von

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

RECEIVE_BOOT_COMPLETED hinzuzufügen und auch müssen Sie Filter

 <receiver android:name=".BootReceiver"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 
+0

Sie in Ihrem Manifest Dienst nicht hinzuzufügen hinzufügen? @AmrishKakadiya –

+0

Sorry, ich habe nur vergessen hier zu schreiben .. add '' –

Verwandte Themen