2016-05-26 12 views
0

Ich implementiere eine Standortalarm-Demo und erhalte erfolgreich eine Benachrichtigung, wenn ich mein Ziel erreiche. Aber ich möchte Alarm statt einfacher Benachrichtigung verwenden, ich weiß über Alarmdienst nicht, und bis jetzt habe ich es nicht implementiert.Wie stelle ich einen Alarm ein, wenn ich das Ziel erreiche?

Hier ist mein Code zu bekommen Anmeldung:

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

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

Was ich will, ist Alarm statt einfache Benachrichtigung, wenn ich Geofence eingeben.

+0

Können Sie bitte versuchen, zuerst einen Alarm (ohne Geofence) zu implementieren? Das sollte genug sein, um deine eigene Frage zu beantworten. –

+0

Mate, Ihre Frage bezieht sich auf "wie man Alarm setzt". – Blackkara

+0

@ cricket_007 ja, ich werde implementieren, wenn niemand meine Frage beantworten. –

Antwort

0

wenn ich Ihre Frage richtig verstanden habe ... verwenden Alarmmanager für Alarm und Benachrichtigung durch Rundfunkempfänger wie diese senden ...

Intent myIntent = new Intent(this, AlarmReceiver.class); 

          PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
          alarmManager.set(AlarmManager.RTC_WAKEUP, 1, pendingIntent); 
          alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, randomValue, 0,pendingIntent); 

und in AlarmReceiver

public class Silent_notification_receiver extends BroadcastReceiver { 

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

     NotificationManager mNotificationManager = (NotificationManager) context 
       .getSystemService(Context.NOTIFICATION_SERVICE); 

     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
       context).setSmallIcon(R.drawable.app_icon) 
       .setAutoCancel(true).setContentTitle("Alert") 
       .setContentText("You are in Silent Area"); 
     mBuilder.setAutoCancel(true); 
     mNotificationManager.notify(0, mBuilder.build()); 
    } 
0

Sie sind fast da Wenn Sie Verhalten wie Alarm oder Telefonanruf wünschen, müssen Sie Ihre Anwendung öffnen Aktivität/Fragment/Dialog und Klingelton abspielen. https://developer.android.com/reference/android/media/RingtoneManager.html https://developer.android.com/reference/android/media/Ringtone.html

+0

kannst du mir eine kleine Demo geben über das, was du redest –

+0

nach etwas googeln fand das vielleicht nützlich http://www.concretepage.com/android/android-ringtone-and-ringtonemanager-example-get-default-and-current-ringtone wurde nicht getestet. –

+0

ok .. ich überprüfe jetzt –