我使用NotificationListener服务有两个问题
我的代码如下
public class MyListener extends NotificationListenerService
{
public void onNotificationPosted(StatusBarNotification statusBarNotification)
{
//Receive all notification.
// I need to receive reminder notification only
}
//.....
......
}
//My Manifiest like below
<service
android:name=".MyListener"
android:enabled="true"
android:label="@string/app_name"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService"/>
</intent-filter>
</service>
但我只需要收到日历提醒通知。
如何添加过滤器以仅接收日历提醒通知?
当我打开通知访问权限时,会显示以下消息
允许MyApp通知访问?
MyAPP将能够阅读所有通知,包括个人通知 联系人姓名和您的消息文本等信息 接收。它还可以解除通知或触发动作 它们包含的按钮
如何在通知访问对话框中更改上述消息?
答案 0 :(得分:1)
如何添加过滤器以仅接收日历提醒通知?
要过滤Google的日历,我们可以收听通知
使用com.google.android.calendar
包名称发布
StatusBarNotification.getPackageName
要过滤提醒通知,我们可以收听通知
使用reminder
类别发布
Notification.CATEGORY_REMINDER
。 (API 23 +)
public class ReminderListenerService extends NotificationListenerService {
private static final String CALENDAR_PKG = "com.google.android.calendar";
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
final Notification noti = sbn.getNotification();
// Filter for the Calendar application
final boolean isCalendar = CALENDAR_PKG.equals(sbn.getPackageName());
// Filter for Notification.CATEGORY_REMINDER (API 23+)
final boolean isReminder = Notification.CATEGORY_REMINDER.equals(noti.category);
// Retrieve the reminder
final String reminder = noti.extras.getString(Notification.EXTRA_TITLE);
}
}
<强>棒棒糖强>
就Google日历应用而言,我不确定如何在Lollipop中过滤提醒功能。使用Notification.CATEGORY_EVENT
代替NotificationCompat.CATEGORY_REMINDER
之类的内容。
如何在通知访问对话框中更改上述消息?
你做不到。但您可以显示自己的对话框,说明您需要访问的原因,然后使用以下命令将用户定向到通知侦听器设置:
startActivity(new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS)
答案 1 :(得分:0)
<receiver
android:name=".Calendar.CatchChangesReceiver"
android:exported="true"
android:priority="1000">
<intent-filter>
<!-- <action android:name="android.intent.action.PROVIDER_CHANGED" />-->
<action android:name="android.intent.action.EVENT_REMINDER" />
<data android:scheme="content" />
<data android:host="com.android.calendar" />
</intent-filter>
</receiver>
公共类CatchChangesReceiver扩展了BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equalsIgnoreCase(CalendarContract.ACTION_EVENT_REMINDER)) {
//Do Something Here to get EVENT ID
Uri uri = intent.getData();
String alertTime = uri.getLastPathSegment();
String selection = CalendarContract.CalendarAlerts.ALARM_TIME + "=?";
Cursor curs = context.getContentResolver().query(CalendarContract.CalendarAlerts.CONTENT_URI_BY_INSTANCE, new String[]{CalendarContract.CalendarAlerts.EVENT_ID, CalendarContract.CalendarAlerts.TITLE}, selection, new String[]{alertTime}, null);
}
}
}