我有一个应用,当用户在特定区域时发送通知。我正在实施LocationListener
,在onLocationChanged
方法中,我有类似的内容。
public void onLocationChanged(Location location) {
Cursor cursor = new DatabaseHelper(this).getAll(); //Gets data from database
while (cursor.moveToNext()) {
double lat = Double.valueOf(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COL2)));
double lon = Double.valueOf(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COL3)));
float distance[] = new float[2];
Location.distanceBetween(location.getLatitude(), location.getLongitude(), lat, lon, distance);
//Notifications are sent from the below lines
if (distance[0] <= Double.valueOf(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COL4)))) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentTitle("You're nearby a reminder");
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContentText(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COL1)) + " at " + cursor.getString(cursor.getColumnIndex(DatabaseHelper.COL5)));
builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
builder.setAutoCancel(true);
Intent intent = new Intent(this, StartActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, intent, PendingIntent.FLAG_CANCEL_CURRENT);
builder.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(cursor.getPosition(), builder.build());
}
}
}
使用locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, this);
调用侦听器,程序运行正常但是当用户移动时,通知音调每10分钟播放一次。
有没有办法只播放一次通知声音,直到状态栏没有清除通知?
答案 0 :(得分:1)
解决此问题的最佳方法是使用GeoFences功能。有关详细信息,请参阅https://developer.android.com/training/location/geofencing.html。
大纲: - 应用程序注册底层操作系统 - 说 - 这里是我想要你监控的我的地理位置列表(特定位置+距离位置的半径)。 - 如果我的用户进入这个地理围栏 - 叫醒我并告诉我。 - 在那个时间点 - 您可以继续执行任何步骤(调用服务器并询问您需要向用户显示哪些信息),或者只是发送推送通知(在应用程序通知中)以执行必要的工作。 / p>
希望这有帮助。
答案 1 :(得分:1)
很容易就像馅饼一样。 Lame让我不读通知文件。
Notification compat = builder.build();
compat.flags = Notification.FLAG_ONLY_ALERT_ONCE;
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(cursor.getPosition(), compat);
刚刚添加Notification.flag
就可以了。