2016-06-08 53 views
1

嗨如果应用的用户接近特定事件,则必须在某个date中获得notificationAndroid Studio,如果接近位置,会收到日期通知

我在想使用推notification但我必须知道如何在我的应用程序中实现。

你有一些代码示例来显示我吗?谢谢

我已经阅读关于GCM从谷歌更容易发送通知?它是如何工作的?

+0

使用地理围栏附近的位置。这里的链接:https://开头开发商。 android.com/training/location/geofencing.html,以及有关日期即时通讯也实现相同的概念,如果你成功的日期,然后plz告诉我.. –

+0

什么样的通知,你想显示?你想从服务器获取一些数据来显示它为通知还是仅基于日期和当前位置? –

+0

在通知面板上的正常通知,就像来自whatsapp的消息,但告诉我,如果我在一个特定日期的城镇 – FreedomSka

回答

0

这里是关于位置通知小演示..

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

      Intent intent = new Intent(this, MapsActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      AppSettings settings = AppSettings.getSettings(getApplication()); 
      Notification notification = new NotificationCompat.Builder(this) 
        .setSmallIcon(R.mipmap.ic_launcher) 
        .setContentTitle(this.getResources().getString(R.string.Notification_Title)) 
        .setContentText(contextText) 
        .setContentIntent(pendingNotificationIntent) 
        .setStyle(new NotificationCompat.BigTextStyle().bigText(contextText)) 
        .setPriority(NotificationCompat.PRIORITY_HIGH) 
        .setAutoCancel(true) 
        .setVibrate(new long[0]) 
        .setWhen(System.currentTimeMillis()) 
        .build(); 

      try { 
       Uri song = Uri.parse(settings.getSdcard()); 
       if (song == null) { 
        notification.sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE 
          + "://" + getPackageName() + "/raw/battlefield"); 
       } else { 
        notification.sound = Uri.parse(settings.getSdcard()); 
       } 
      } catch (NullPointerException e) { 
       e.printStackTrace(); 
      } 
      notificationManager.notify(0, notification); 
     } 
    } 

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

,或者您可以使用此示例应用程序代码:link

+0

我会尝试,谢谢 – FreedomSka

+0

不用担心..我会为您提供我的应用程序链接也bcz即将完成。所以你可以了解这个应用程序的工作流程。 –