我需要編寫一些應用程序,它將在後臺執行一些工作。這個應用程序將從自動啓動運行,不會有任何啓動GUI。 Gui可以通過點擊通知來打電話,通知將以自動啓動顯示。我擔心,當用戶清除通知時,他失去了調用這個gui的機會。我的問題是,有沒有辦法阻止用戶清除我的通知?爲我的應用程序禁用清除通知
回答
你想實現一個Foreground Service。
您可能想要查看通知的「正在運行」部分中的通知。這些通知在用戶清除時不會被清除。使用Notification.FLAG_NO_CLEAR AND Notification.FLAG_ONGOING_EVENT。這應該給你想要的效果
確實有兩個理由使用兩者嗎?在Android 4.2.x上,我只使用Notification.Builder.setOngoing(),並且它本身似乎阻止通知被清除。我很好奇,因爲我發現Notification.Builder似乎沒有對應於FLAG_NO_CLEAR的方法。 – spaaarky21
下面是一個不允許用戶清除它的通知。
Notification notification = new NotificationCompat.Builder(this)
.setTicker(r.getString(R.string.app_name))
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(r.getString(R.string.app_name))
.setAutoCancel(false)
.setOngoing(true)
.build();
的setOngoing(true)
通話acheives這一點,從setAutoCancel(false)
當用戶點擊該通知要離開終止通知。
如果應用被卸載或致電取消或CancelAll通知將被清除:http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)
雖然他雖然缺少代碼的一些幾行(通知不會顯示或顯示不會對@cja答案可能是正確的您的通知托盤)。
這是完整的工作功能:
public void createNotification() {
NotificationCompat.Builder notification = new NotificationCompat.Builder(this);
notification.setTicker("Ticker Text");
notification.setSmallIcon(R.drawable.ic_launcher);
notification.setContentTitle("Content Title");
notification.setContentText("Content Text");
notification.setAutoCancel(false);
notification.setOngoing(true);
notification.setNumber(++NotificationCount);
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
notification.setContentIntent(pIntent);
notification.build();
NotificationManager nManger = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nManger.notify(NotificationID, notification.build());
}
NotificationID類型爲int作爲您的通知的ID。
您可以使用此清除:
public void clear() {
NotificationManager oldNoti = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
oldNoti.cancel(NotificationID);
}
確保notification.setAutoCancel(false);
設置爲假當按下清除按鈕或者滑動手勢出現時,它不會被清除。
幾行代碼最初來自@cja文章。
歡呼/快樂值編碼...
謝謝@ralphgabb我試過使用相同的,但我仍然能夠通過單擊清除所有和滑動手勢清除通知。我正在開發最低API級別19和目標API級別25 – bhavikshah28
多數民衆贊成在怪異,生病嘗試檢查出來,這個功能真的在我的最終(用於多個項目),或者你可以在這裏發表你的代碼幾行。 – ralphgabb
@ralphgaab https://prnt.sc/hpzi9e – bhavikshah28
就這兩個標誌添加到通知,FLAG_AUTO_CANCEL防止通知當用戶觸摸它,FLAG_ONGOING_EVENT使它成爲Ongoing Notification自動解除。
notification.flags=Notification.FLAG_AUTO_CANCEL|Notification.FLAG_ONGOING_EVENT;
- 1. 如何清除我的應用程序的iOS推送通知?
- 2. Phonegap應用程序清除推送通知不起作用
- 3. 如何在應用程序中清除遠程通知?
- 4. 清除應用程序完成時的通知
- 5. 清除當地通知的應用程序徽章
- 6. 清除來自另一個應用程序的通知
- 7. 禁用通知也禁用應用程序的吐司消息
- 8. Windows通用應用程序 - 清除應用程序內購買
- 9. iOS示例代碼清除通知中心的應用程序通知?
- 10. 通過Android清除應用程序
- 11. 禁用ios5通知中心爲web應用程序下拉
- 12. 爲什麼我的通知被清除?
- 13. 從通知中刪除應用程序
- 14. 我如何知道用戶何時清除我的應用程序緩存
- 15. 應用程序arraylist清除
- 16. 如何啓用/禁用應用程序的推送通知?
- 17. 通過輔助功能API清除其他應用程序的通知
- 18. 清除用戶通知
- 19. Android刪除我的應用程序中的短信通知
- 20. 如何使用單獨的應用程序清除所有通知?
- 21. 清除遠程APN通知
- 22. 通知應用程序用戶打開/查看狀態欄通知並單擊清除(清除所有狀態欄通知)清除應用程序狀態欄通知中的一個
- 23. 如何從我的應用程序啓用/禁用推送通知
- 24. Android清除應用程序緩存清除提供程序也
- 25. Iphone SDK禁用其他應用程序的通知
- 26. Android - 禁用Facebook推送通知的應用程序
- 27. ios:禁用應用程序焦點時的警報通知(OneSignal)
- 28. 推送通知的應用程序刪除行爲
- 29. 使用應用程序時禁用通知聲音和振動
- 30. 應用程序通知API
前臺服務可以工作,因爲它「不適合系統在內存不足時殺死」並且需要顯示通知。但是,僅僅爲了顯示無法清除的通知而創建服務真的是最佳做法嗎? Kurro的答案似乎好得多。 – spaaarky21