2016-05-05 13 views
0

マップの場所アラームを実装しています。私の目的地に到着しようとしているときに通知を受け取りますが、問題は電話がスリープ状態です。 、私はどのようにシステムで動作するのかわかりません、PLZは私を助けます。ここ私の電話がスリープモードになっているときに、単純な通知が表示されない

は私のコード..です

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); 
    } 

} 

私は私の通知がまだ保留されている場合、私は必要なものを、私はwakelockを使用する必要がありますが、私は実装する必要がどこで使用する方法を知らないと、解決策があるました私の電話がスリープ状態にならないようにしてください。通知が来たら、wakelockをリリースしてください。それ、どうやったら出来るの。任意の新しいプッシュ通知を受信デバイスのウェイクアップ:通知が

acquireWakeLock()を立ち上げたとき

+0

CHECK delay_while_idleはtrueにする必要があります –

+0

どうすればよいですか? –

+0

あなたはあなたについてのコードを書くことができますplz –

答えて

0

は、この方法を試してみてください。

private PowerManager.WakeLock wakeLock; 

    public void acquireWakeLock(Context context) { 
     if (wakeLock != null) wakeLock.release(); 

     PowerManager pm = (PowerManager) 
          context.getSystemService(Context.POWER_SERVICE); 

     wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | 
       PowerManager.ACQUIRE_CAUSES_WAKEUP | 
       PowerManager.ON_AFTER_RELEASE, "WakeLock"); 

     wakeLock.acquire(); 
    } 

    public void releaseWakeLock() { 
     if (wakeLock != null) wakeLock.release(); wakeLock = null; 
    } 
関連する問題