Android 如何在RingerMode更改时取消通知
我正在尝试创建一个状态栏通知,当应用处于活动状态时通知,当应用处于非活动状态时通知取消。 当用户通过单击应用程序中的“打开”按钮打开应用程序时,我收到了要通知的通知。当用户以同样的方式关闭应用程序时,我也收到了取消通知。 我的问题是,用户只需打开振铃器音量就可以切换应用程序,但当应用程序以这种方式关闭时,通知不会取消。 我得到了一个错误:Android 如何在RingerMode更改时取消通知,android,notifications,Android,Notifications,我正在尝试创建一个状态栏通知,当应用处于活动状态时通知,当应用处于非活动状态时通知取消。 当用户通过单击应用程序中的“打开”按钮打开应用程序时,我收到了要通知的通知。当用户以同样的方式关闭应用程序时,我也收到了取消通知。 我的问题是,用户只需打开振铃器音量就可以切换应用程序,但当应用程序以这种方式关闭时,通知不会取消。 我得到了一个错误: System services not available to Activities before onCreate() 主要活动: buttonTogg
System services not available to Activities before onCreate()
主要活动:
buttonToggleDetect.setOnClickListener(new View.OnClickListener() {
@Override
// when the main button is clicked
public void onClick(View v) {
setDetectEnabled(!detectEnabled);
mTracker.send(new HitBuilders.EventBuilder()
.setCategory("Home")
.setAction("Share")
.build());
if (isServiceRunning()){
showStatusBarIcon("App","App Active",true);
}
else showStatusBarIcon("App","App InActive", false);
}
RingerModeStateReceiver类
public class RingerModeStateReceiver extends BroadcastReceiver {
MainActivity mainActivity = new MainActivity();
public RingerModeStateReceiver() {
}
@Override // when the android sends a broadcast message that the RingerModeState has changed
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int ringMode = audioManager.getRingerMode();
if (ringMode == AudioManager.RINGER_MODE_NORMAL){
context.stopService(new Intent(context, CallDetectService.class));
mainActivity.showStatusBarIcon("App","App InActive", false);
}
//throw new UnsupportedOperationException("Not yet implemented");
}
}
有人能帮我看看我哪里出了问题吗?谢谢您需要在关闭应用程序之前删除通知 您可以通过应用程序的onDestroy,甚至通过服务来完成
问题是无法从广播接收器调用“showStatusBarIcon”,您需要使用上下文。从另一篇文章中我找到了答案。 在广播接收机类中,我替换了
mainActivity.showStatusBarIcon("App","App InActive", false);
与
这里有一个链接到
我搜索了“如何取消广播中的notifaction”来查找帖子谢谢你的回答。我该如何为它提供上下文?您已经在BroadcastReceiver中获得了它,您可以尝试:'context.MainActivity.showStatusBarIcon(..)'
mainActivity.showStatusBarIcon("App","App InActive", false);
NotificationManager notifactionManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
notifactionManager.cancel(9999);