如何去除立即通知在android系统(how to remove notification inst

2019-10-29 04:21发布

在我的应用我显示的通知。 从服务我发送登录到JSON的时间。 它在服务器检查是否有任何新的数据可用与否,如果是,那么通过JSON我越来越没有新的数据,而最新数据的时间,我在显示它的通知。 如果我们点击通知其进入仪表板的活动页面,改变时序拉泰什数据的时间。 但问题是,当我点击通知后,首先进入仪表盘活动,则改变时间。 对于第2次点击通知后,这个原因是怎么回事了。 谁能告诉我如何在我的情况下,第一次点击后删除通知? 这是我的条件调用一个新的通知码:

 public class ReviewUpdateService extends IntentService{

private Notification.Builder earthquakeNotificationBuilder;
public static final int NOTIFICATION_ID = 1;

private String user_id;
JSONObject jsonData;
private static String share_pref_time_file = "time_file";
private static String share_pref_file = "json_file";
String service_notification;
int no_of_notify;

  public ReviewUpdateService() {
        super("ReviewUpdateService");
  }

  private AlarmManager alarmManager;
  private PendingIntent alarmIntent;


public void onCreate() {
    super.onCreate();
    alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    SharedPreferences prefs = getSharedPreferences(share_pref_file,
            Context.MODE_PRIVATE);
    String strJson = prefs.getString("jsondata", "");

    if (!strJson.equals("")) {
        try {
            jsonData = new JSONObject(strJson);
            user_id = jsonData.getString(LoginActivity.KEY_UID);                
        } catch (JSONException e) {

            e.printStackTrace();
        }
    }

    String ALARM_ACTION = ReviewAlarmReceiver.ACTION_REFRESH_DASHBOARD_ALARM;
    Intent intentToFire = new Intent(ALARM_ACTION);
    alarmIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0);

    earthquakeNotificationBuilder = new Notification.Builder(this);
    earthquakeNotificationBuilder
        .setAutoCancel(true)
        .setTicker("New Review detected")
        .setSmallIcon(R.drawable.icon_1);
}
 public void refreshEarthquakes() {
        // Get the XML
        //URL url;
     UserFunctions userFunctions =  new UserFunctions();
     SharedPreferences prefs = getSharedPreferences(share_pref_time_file,
                Context.MODE_PRIVATE);
    String formattedDate = prefs.getString("time", "");
        try {           
                // Log.d("user_id", user_id);
                // Log.d("time", formattedDate);
                JSONObject json_city = userFunctions
                    .getNotification(user_id, formattedDate);
            if(json_city!=null){
        {               
                try {
                    String notify_get_id = json_city.getString(LoginActivity.KEY_NO_NOTIFY);
                    no_of_notify = Integer.parseInt(notify_get_id);
                    service_notification = json_city.getString(LoginActivity.KEY_SERVICE_NOTIFY);
                } catch (JSONException e) {

                    e.printStackTrace();
                }
            }
        if(no_of_notify > 0){

        broadcastNotification(no_of_notify,"");
        }
                }

        }


        finally {
        }
      }


    @Override
    protected void onHandleIntent(Intent intent) {

        int updateFreq = 1; 

            int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP;
            long timeToRefresh = SystemClock.elapsedRealtime() +
                                 updateFreq*60*1000;
            alarmManager.setInexactRepeating(alarmType, timeToRefresh, updateFreq*60*1000, alarmIntent);


        refreshEarthquakes();
          Intent broadcastIntent=new Intent();
            broadcastIntent.setAction( ReviewAlarmReceiver.ACTION_REFRESH_DASHBOARD_ALARM );
            sendBroadcast( broadcastIntent );


    } 

private void broadcastNotification(int no_of_review, String service_name) {

    Intent startActivityIntent = new Intent(this, DashboardActivity.class); 
    startActivityIntent.putExtra("NotificationMessage", service_notification);
    startActivityIntent.putExtra("flag", 1);
    startActivityIntent.putExtra("notificationID", NOTIFICATION_ID);
    startActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//  startActivityIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK| Intent.FLAG_ACTIVITY_NEW_TASK );
    PendingIntent launchIntent = PendingIntent.getActivity(this, 0,
            startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT);    
    UserFunctions userFunctions = new UserFunctions();
    if (userFunctions.isUserLoggedIn(getApplicationContext())) {        
        startActivityIntent.putExtra("latest_time", service_notification);
        Log.d("latest_time", service_notification);
        startActivityIntent.putExtra("flag", 1);
        earthquakeNotificationBuilder
                .setContentIntent(launchIntent)
                .setContentTitle(no_of_review + " " + "new review is there")
                .setAutoCancel(true);
        // .setContentText(service_name);

        if (no_of_review > 10) {
            Uri ringURI = RingtoneManager
                    .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

            earthquakeNotificationBuilder.setSound(ringURI);
        }

        double vibrateLength = 100 * Math.exp(0.53 * no_of_review);
        long[] vibrate = new long[] { 100, 100, (long) vibrateLength };
        earthquakeNotificationBuilder.setVibrate(vibrate);

        int color;
        if (no_of_review < 2)
            color = Color.GREEN;
        else if (no_of_review < 5)
            color = Color.YELLOW;
        else
            color = Color.RED;

        earthquakeNotificationBuilder.setLights(color, (int) vibrateLength,
                (int) vibrateLength);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(NOTIFICATION_ID,
                earthquakeNotificationBuilder.getNotification());
    } else {
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancelAll();
        }
}
 } 

这就是我如何改变的请求JSON在仪表盘活动的时间:

    protected void onNewIntent(Intent intent) {

    DashboardActivity.this.finish();

    // -----Start New Dashboard to notification clicked----

    Intent i = new Intent(DashboardActivity.this, DashboardActivity.class);       
    Bundle extras = intent.getExtras();
    if(extras != null){
        startService(new Intent(this, ReviewUpdateService.class));  
        if(extras.containsKey("NotificationMessage"))
        {
            formattedDate= extras.getString("NotificationMessage");

        }
        if(extras.containsKey("flag"))
        {
            flag= extras.getInt("flag");

        }
        if(extras.containsKey("notificationID"))
        {
            NOTIFICATION_ID= extras.getInt("notificationID");

        }
    }
if(flag != 0){              
     NotificationManager nm = (NotificationManager) 
                getSystemService(NOTIFICATION_SERVICE);
            nm.cancel(NOTIFICATION_ID);
        SharedPreferences prefs1 = getSharedPreferences(
                share_pref_time_file, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs1.edit();
        editor.remove(share_pref_time_file);
        editor.clear();
        editor.commit();
        getApplicationContext()
                .getSharedPreferences(share_pref_time_file, 0).edit()
                .clear().commit();              
        SharedPreferences prefs2 = getSharedPreferences(
                share_pref_time_file, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor1 = prefs2.edit();
        Log.d("latest_intent_time", formattedDate);
        editor1.putString("time", formattedDate);
        editor1.commit();
        }
    startActivity(i);

    super.onNewIntent(intent);
}
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     NotificationManager nm = (NotificationManager) 
                getSystemService(NOTIFICATION_SERVICE);
            nm.cancel(NOTIFICATION_ID);
            setContentView(R.layout.dashboard);         
            startService(new Intent(this, ReviewUpdateService.class));  
                    ...................
                    }
            }

Answer 1:

也许这个答案将帮助他人:在仪表盘的活动我已经改变了我的时间,并保存它通过共享偏好。 而在服务类我有检查旧时代和最新的时间是相同的或没有。 如果它们是相同的它会删除通知,否则将通过给定的条件触发的通知。 这里是广播通知功能的代码:

  private void broadcastNotification(int no_of_review, String service_name) {

    Intent startActivityIntent = new Intent(this, DashboardActivity.class); 
    startActivityIntent.putExtra("NotificationMessage", service_notification);
    startActivityIntent.putExtra("flag", 1);
    startActivityIntent.putExtra("notificationID", NOTIFICATION_ID);
    startActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent launchIntent = PendingIntent.getActivity(this, 0,
            startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT);    
    UserFunctions userFunctions = new UserFunctions();
    if (userFunctions.isUserLoggedIn(getApplicationContext())) {    
        /* "formattedDate" is the date saved in shared preferences*/
        if(!formattedDate.equals(service_notification)){
        startActivityIntent.putExtra("latest_time", service_notification);
        Log.d("latest_time", service_notification);
        startActivityIntent.putExtra("flag", 1);
        earthquakeNotificationBuilder
                .setContentIntent(launchIntent)
                .setContentTitle(no_of_review + " " + "new review is there")
                .setAutoCancel(true);
        // .setContentText(service_name);

        if (no_of_review > 10) {
            Uri ringURI = RingtoneManager
                    .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

            earthquakeNotificationBuilder.setSound(ringURI);
        }

        double vibrateLength = 100 * Math.exp(0.53 * no_of_review);
        long[] vibrate = new long[] { 100, 100, (long) vibrateLength };
        earthquakeNotificationBuilder.setVibrate(vibrate);

        int color;
        if (no_of_review < 2)
            color = Color.GREEN;
        else if (no_of_review < 5)
            color = Color.YELLOW;
        else
            color = Color.RED;

        earthquakeNotificationBuilder.setLights(color, (int) vibrateLength,
                (int) vibrateLength);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(NOTIFICATION_ID,
                earthquakeNotificationBuilder.getNotification());
    } else {
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancelAll();
        }
    }else {
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancelAll();
        }
}


文章来源: how to remove notification instantly in android