2016-05-05 3 views
0

Ich implementiere Karte Ort Alarm, ich erfolgreich erhalten Benachrichtigung, wenn ich mein Ziel erreichen werde, aber das Problem ist mein Telefon ist im Schlafmodus, ich kann keine Benachrichtigung erhalten , ich weiß nicht, wie man mit System arbeitet, plz helfen Sie mir.einfache Benachrichtigung nicht angezeigt, wenn mein Telefon im Schlafmodus

hier ist mein Code ..

public class AreWeThereIntentService extends IntentService { 

    private final String TAG = AreWeThereIntentService.class.getName(); 

    private SharedPreferences prefs; 
    private Gson gson; 

    public AreWeThereIntentService() { 
    super("AreWeThereIntentService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
    prefs = getApplicationContext().getSharedPreferences(
      Constants.SharedPrefs.Geofences, Context.MODE_PRIVATE); 
    gson = new Gson(); 

// 1. Get the event 
    GeofencingEvent event = GeofencingEvent.fromIntent(intent); 
    if (event != null) { 
     if (event.hasError()) { 
     onError(event.getErrorCode()); 
     } else { 

     // 2. Get the transition type 
     int transition = event.getGeofenceTransition(); 
     if (transition == Geofence.GEOFENCE_TRANSITION_ENTER || 
       transition == Geofence.GEOFENCE_TRANSITION_DWELL || 
       transition == Geofence.GEOFENCE_TRANSITION_EXIT) { 
      List<String> geofenceIds = new ArrayList<>(); 

      // 3. Accumulate a list of event geofences 
      for (Geofence geofence : event.getTriggeringGeofences()) { 
      geofenceIds.add(geofence.getRequestId()); 
      } 
      if (transition == Geofence.GEOFENCE_TRANSITION_ENTER || 
        transition == Geofence.GEOFENCE_TRANSITION_DWELL) { 
      // 4. Pass the geofence list to the notification method 
      onEnteredGeofences(geofenceIds); 
      } 
     } 
     } 

    } 
    } 


    private void onEnteredGeofences(List<String> geofenceIds) { 
    // 1. Outer loop over all geofenceIds 
    for (String geofenceId : geofenceIds) { 
     String geofenceName = ""; 

     // 2, Loop over all geofence keys in prefs and retrieve NamedGeofence from SharedPreferences 
     Map<String, ?> keys = prefs.getAll(); 
     for (Map.Entry<String, ?> entry : keys.entrySet()) { 
     String jsonString = prefs.getString(entry.getKey(), null); 
     NamedGeofence namedGeofence = gson.fromJson(jsonString, NamedGeofence.class); 
     if (namedGeofence.id.equals(geofenceId)) { 
      geofenceName = namedGeofence.name; 
      break; 
     } 
     } 

     // 3. Set the notification text and send the notification 
     String contextText = 
       String.format(this.getResources().getString(R.string.Notification_Text), geofenceName); 
     // 1. Create a NotificationManager 
     NotificationManager notificationManager = 
       (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 

// 2. Create a PendingIntent for AllGeofencesActivity 
     Intent intent = new Intent(this, AllGeofencesActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     long[] pattern = { 0, 100, 200, 300 }; 
// 3. Create and send a notification 
     Notification notification = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.mipmap.map_marker_icon) 
       .setContentTitle(this.getResources().getString(R.string.Notification_Title)) 
       .setContentText(contextText) 
       .setContentIntent(pendingNotificationIntent) 
       .setStyle(new NotificationCompat.BigTextStyle().bigText(contextText)) 
       .setPriority(NotificationCompat.PRIORITY_HIGH) 
       .setAutoCancel(true) 
       .setSound(alarmSound) 
       .setVibrate(pattern) 
       .build(); 
     notificationManager.notify(0, notification); 
    } 
    } 

    private void onError(int i) { 
    Log.e(TAG, "Geofencing Error: " + i); 
    } 

} 

i gefunden Lösung, die ich habe WakeLock zu verwenden, aber ich weiß nicht, wie und zu verwenden, wo ich umsetzen müssen, was ich brauche, ist, wenn meine Anmeldung noch aussteht dann will ich nicht, dass mein Telefon schläft, und wenn ich Benachrichtigung bekomme, dann wakelock freizugeben. wie mache ich das.

+0

CHECK delay_while_idle sollte wahr sein –

+0

Wie mache ich das? –

+0

können Sie einen Code über Sie schreiben schreiben plz –

Antwort

0

versuchen, diese Methode, wenn Benachrichtigung gestartet

acquireWakeLock(): Geräte Wakeup, wenn eine neue Push-Benachrichtigung empfangen wird.

Verwandte Themen