2017-01-14 4 views
0

Ich versuche einen Alarm einzurichten, der eingeschaltet bleibt, weil ich möchte, dass er in 3 Tagen ausgeht und ich weiß, dass Android meine App vorher beenden wird.Persistenter Alarm

In meiner Tätigkeit

private void setAlarm() { 
    //ContactAlarmReceiver contactAlarmReceiver = new ContactAlarmReceiver(); 
    //contactAlarmReceiver.setAlarm(getApplicationContext(), dateInMillis, phonenumberET.getText().toString(), firstnameET.getText().toString()); 
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent alarmIntent = new Intent(MyConstants.BROADCAST_ACTION_CONTACT_ALARM); 
    alarmIntent.putExtra("phone", phonenumberET.getText().toString()); 
    alarmIntent.putExtra("name", firstnameET.getText().toString()); 

    PendingIntent pi = PendingIntent.getBroadcast(this, 0, alarmIntent, 0); 
    //am.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timeInMills, pi); 
    if (Build.VERSION.SDK_INT >= 23) { 
     am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, dateInMillis, pi); 
    } else if (Build.VERSION.SDK_INT >= 19) { 
     am.setExact(AlarmManager.RTC_WAKEUP, dateInMillis, pi); 
    } else { 
     am.set(AlarmManager.RTC_WAKEUP, dateInMillis, pi); 
    } 
    ComponentName component = new ComponentName(this, ContactAlarmReceiver.class); 
    getPackageManager() 
     .setComponentEnabledSetting(component, 
      PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
      PackageManager.DONT_KILL_APP); 
} 

Manifest:

<receiver 
    android:name=".ContactAlarmReceiver" 
    android:enabled="false"> 
    <intent-filter> 
     <action android:name="com.example.johnbravado.CONTACTALARM" /> 
     <action android:name="com.example.johnbravado.NOTIFLTBTN" /> 
     <action android:name="com.example.johnbravado.NOTIFRTBTN" /> 
    </intent-filter> 
</receiver> 

ContactAlarmReceiver:

@Override 
@Override 
public void onReceive(Context context, Intent intent) { 
    PowerManager powerManager = (PowerManager) context.getSystemService(POWER_SERVICE); 
    PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
      "com.example.johnbravado.zionwork"); 
    wakeLock.acquire(); 

    final NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Bundle extras = intent.getExtras(); 
    ComponentName receiver = new ComponentName(context, ContactAlarmReceiver.class); 
    PackageManager pm = context.getPackageManager(); 

    if (intent.getAction().equals(MyConstants.BROADCAST_ACTION_CONTACT_ALARM)) { 
     int count = extras.size(); 
     String num = extras.getString("phone"); 
     String name = extras.getString("name"); 
     sendContactNotification(context, MyConstants.BIG_NOTIFICATION_ID, num, name); 
    } 

    if (intent.getAction().equals(MyConstants.BROADCAST_ACTION_NOTIF_LTBTN)) { 
     sendSMS(context, extras.getString("phone"), extras.getString("msg")); 
     mNotificationManager.cancel(MyConstants.BIG_NOTIFICATION_ID); 
     pm.setComponentEnabledSetting(receiver, 
       PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
       PackageManager.DONT_KILL_APP); 
    } 

    if (intent.getAction().equals(MyConstants.BROADCAST_ACTION_NOTIF_RTBTN)) { 
     initiatePhone(context, intent.getExtras().getString("phone")); 
     mNotificationManager.cancel(MyConstants.BIG_NOTIFICATION_ID); 
     pm.setComponentEnabledSetting(receiver, 
       PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
       PackageManager.DONT_KILL_APP); 
    } 
    wakeLock.release(); 
} 

ich nie die Meldung nach längerer Zeit erhalten. Zum Beispiel habe ich den Wecker um 23 Uhr für 3 Uhr morgens gestellt, also sollte ich nach dem Aufwachen die Benachrichtigung sehen. Aber es wird keine Benachrichtigung angezeigt.

+0

'ContactAlarmService' scheint ein' Service' zu ​​sein, aber Sie verwenden einen 'PendingIntent', der eine Broadcast sendet,' PendingIntent.getBroadcast() '. –

+0

und die ausstehende Absicht, die ich auslösen möchte, wenn der Alarm ausgelöst wird, ist eine Übertragung. –

+0

Dann brauchen Sie eine 'BroadcastReceiver' Klasse als Ziel; wahrscheinlich speziell ein 'WakefulBroadcastReceiver'. Dann starte deinen 'Service' daraus. –

Antwort

1

würde Ich mag Sie darauf, dass zunächst einmal eine Klasse erstellen, wie:

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

public class AlarmReceiver extends BroadcastReceiver { 

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

     if(intent.getAction().equals("startalarm")){ 
     intent = new Intent(context, Your_service.class); 
     context.startService(intent); 

}

} 
} 

Hinweis: Wenn Ihr Alarmnetz Aufgabe auszuführen hat, dann einen Download starten Service innerhalb onRecieve() Methode Ihrer Alarmsendung. Dann setzen Sie AlarmReceiver Klasse in Intent.

Intent alarmIntent = new Intent(MyActivity.this, AlarmReceiver.class); 

vielleicht werden Sie aus Ihrem Problem herauskommen.

+0

Sind Sie mir ein Broadcast Receiver sollte bestehen, nachdem die App getötet wird? Ich begann damit, dass es funktioniert, bis App getötet wird –

+0

Bitte schauen Sie sich diesen Beitrag an: http: //stackoverflow.com/questions/5916859/how-to-save-alarm-after-app-killing –

+0

Ich habe mir das und ich angeschaut kann nicht aus dem Diagramm herausfinden, wie man den Dienst mit einer Sendung einbindet, werde ich mehr betrachten, obwohl –

Verwandte Themen