天道酬勤,学无止境

android-notifications

使用引用资源 ID 的声音 URI 时,Android 通知通道声音停止工作(Android Notification Channel sounds stop working when using sound URIs that reference resource ids)

问题 我们为在 Oreo 及更高版本上运行的设备创建了通知渠道,这些渠道使用位于我们的/res/raw文件夹中的自定义通知声音。 最近,当用户升级我们的应用程序时,通知声音停止工作,通知只会振动设备。 我们已确认卸载/重新安装或清除应用程序数据可解决此问题。 但是,为了在无需重新安装的情况下再次为所有人提供通知声音,我们需要从本质上删除并重新创建这些频道。 我们创建通知通道如下: fun initNotificationChannel(channel: PSSNotificationChannel) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val id = channel.id val name = context.getString(channel.nameResId) val importance = channel.importance val channel = NotificationChannel(id, name, importance) ... // Default sound val soundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + context.applicationContext

2021-12-05 00:39:16    分类:技术分享    android   android-notifications   android-8.0-oreo   android-9.0-pie

不同的通知声音在奥利奥中不起作用(Different notification sound not working in Oreo)

问题 我仅在Oreo版本中面临一些与通知相关的问题。 我按照此链接并按照他的建议在卸载/安装应用程序后成功获得了自定义声音。 现在的问题是我想在我的应用程序中使用两个自定义声音,为此,我有如下代码: private void sendNotification(NotificationBean notificationBean) { String textTitle = notificationBean.getTitle(); String alert = notificationBean.getMessage().getAlert(); int orderId = notificationBean.getMessage().getOrderId(); String notificationType = notificationBean.getMessage().getNotificationType(); String sound = notificationBean.getMessage().getSound(); Intent intent = new Intent(this, NavigationDrawerActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent

2021-12-03 19:02:15    分类:技术分享    android   android-notifications   android-8.0-oreo

从通知开始主要活动失败(Start main activity from notification fails)

问题 我的应用程序有一个带有前台通知的服务。 即使主要活动关闭,服务也会运行。 如果我单击通知,我想重新启动主要活动。 我所做的似乎是正确的。 对AndroidManifest.xml 的更改: <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> 在通知中设置挂起的意图: Intent activityIntent = new Intent(this, Muzika.class); activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(this

2021-12-03 12:22:09    分类:技术分享    android   android-intent   android-notifications

自定义通知声音在 Android Oreo 中不起作用(Custom Notification Sound not working in Android Oreo)

问题 Uri sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + context.getPackageName() + "/" + R.raw.notification_mp3); mBuilder.setSound(sound); 我已将 mp3 (notification_mp3.mp3) 文件复制到 res 文件夹中的原始文件夹中。 当通知被触发时,它会在Android Nougat 中产生给定的 mp3 声音,但在Android Oreo 中产生默认声音。 我推荐了很多网站,但在Android Oreo上没有任何效果。 我在 Android Docs 中没有发现有关 Android O 及更高版本中的通知声音的任何更改。 应该做哪些更改才能使此代码也能在 Android O 中运行? 回答1 要在 Oreo 中为通知设置声音,您必须在NotificationChannel而不是在Notification Builder本身上设置声音。 您可以按如下方式执行此操作 Uri sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + context.getPackageName() + "/" + R.raw

2021-12-03 10:18:11    分类:技术分享    android   push-notification   android-notifications

android中的Firebase计划通知(Firebase scheduled notification in android)

问题 我正在使用 firebase 开发一个 android 应用程序,这个应用程序应该每天推送两次通知,用户应该在应用程序设置中设置。 我看到至少 2 年前有人问过类似的问题,但没有答案,也许现在有一个选项可以做到。 无论如何我可以使用 Firebase 实现这一目标吗? 如果没有,我该如何实现? 回答1 您可以安排从 Firebase 控制台发送通知。 但这仅限于您手动输入的通知。 无法安排“一天两次”交付,也没有 API 以编程方式安排交付。 这意味着您必须自己编写代码来实现这一点。 一种方法是使用 Firebase Cloud Messaging API 发送消息,使用 Firebase 实时数据库(或 Cloud Firestore)存储有关何时何地发送消息的信息,然后按计划调用 Cloud Function从数据库中读取信息并调用 FCM API。

2021-12-03 01:36:42    分类:技术分享    android   firebase   firebase-cloud-messaging   android-notifications   firebase-notifications

whatsapp消息的自动回复方法(Automatic reply for whatsapp messages approach)

问题 我在Play Store上看到支持WhatsApp自动回复的应用程序很少,我在互联网上搜索了方法,但我发现的只是这段代码 Uri uri = Uri.parse("smsto:" + "99********"); Intent i = new Intent(Intent.ACTION_SENDTO, uri); i.putExtra("sms_body", "Hey!"); i.setPackage("com.whatsapp"); startActivity(i); 如果您已保存,它将打开 WhatsApp 并带您到该特定联系人,它会粘贴给定的文本,但不会发送消息。 链接 https://play.google.com/store/apps/details?id=horizo​​ntstack.autoreplyforwhatsapp.whatsreply 他们正在访问通知以获取消息。 我想知道他们如何在不打开应用程序的情况下在后台发送消息。 如果有人知道该方法,请在此处分享。 回答1 我是这样做的: 第 1 步:从 NotificationHelperLibrary 存储库中复制所有代码。 第 2 步:创建通知侦听器服务并将以下代码放入onNotificationPosted(..)方法中: MyNotifiService.this.cancelNotification

2021-12-02 08:02:42    分类:技术分享    android   android-notifications   whatsapp

android通知两次启动相同的活动(android notification launches same activity twice)

问题 当我单击状态栏上的通知时,它会启动一个活动,但行为很奇怪。 如果我的应用程序在前台并且我单击通知,则通知意图将被触发一次。 如果我的应用程序在后台,则通知意图会被触发两次。 如果我退出应用程序(即所有活动都已通过点击后退按钮弹出),则通知意图将被触发一次。 任何人都可以解释这种行为。 代码片段如下: _notification = new Notification(icon_id, "Ticker Text", System.currentTimeMillis()); _showActivityIntent = new Intent(); _showActivityIntent.setAction(MyActivityName); _showActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + Intent.FLAG_ACTIVITY_NO_HISTORY); _showActivityPendingIntent = PendingIntent.getActivity(context, 0, _showActivityIntent, 0); _notification.setLatestEventInfo(context, "My title", "My text",

2021-12-01 11:23:04    分类:技术分享    android   android-notifications

Android N - 下载管理器通知取消按钮(Android N - Download Manager Notification Cancel Button)

问题 Android N 在下载管理器通知中有一个新的取消按钮。 我想在我的应用程序中执行一些代码以在用户按下此按钮时停止进度条。 如果有,调用哪个方法? 另请注意,意图过滤器操作 DownloadManager.ACTION_NOTIFICATION_CLICKED 仅在用户单击通知本身时触发,而不是在他/她单击取消按钮时触发。 if_downloadManager = new IntentFilter(); if_downloadManager.addAction(DownloadManager.ACTION_DOWNLOAD_COMPLETE); if_downloadManager.addAction(DownloadManager.ACTION_NOTIFICATION_CLICKED); br_downloadManager = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { .... } if (DownloadManager.ACTION

2021-12-01 09:18:33    分类:技术分享    android   android-notifications   android-download-manager   cancel-button

当应用程序处于后台时通过 api 显示 Firebase 消息的通知 onReceived(Show Notification of Firebase Message onReceived when App is in Background Through api)

问题 我已经建立了一个聊天应用程序。 它工作正常。 两个用户都可以轻松聊天,但是如果一个用户的应用程序处于后台并且屏幕关闭,我就会陷入困境,用户无法收到收到的消息的通知。 我现在想要的是在我的应用程序中,当 userA 向 userB 发送消息,并且 userB mobile 空闲但应用程序在后台运行时,userB 可以获得有关该消息的通知。 并且用户 B 可以打开聊天活动并阅读消息。 我的 firebase 通知正在从 firebase 控制台工作,但我不知道如何调用实例 ID 并将其从 api 发送到特定设备,特定用户会在应用程序屏幕关闭且应用程序在后台运行时收到有关收到消息的通知。 我应该如何实现它? 我在这里有我的 firebase 实例 ID 服务类: public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { private static final String TAG = "MyFirebaseIIDService"; @Override public void onTokenRefresh() { //Getting registration token String refreshedToken = FirebaseInstanceId.getInstance()

2021-12-01 08:47:32    分类:技术分享    android   firebase   android-notifications   firebase-notifications

如何知道Android中的应用程序是否启用了通知?(How to know whether Notifications are enabled or not for an application in android?)

问题 我有一个 ListView,其中包含已安装应用程序的列表,对于每个应用程序,我需要知道通知是否已启用。 目前我正在使用以下代码来了解通知是否已启用: appOpsClass = Class.forName(AppOpsManager.class.getName()); Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, String.class); Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); int value = (int)opPostNotificationValue.get(Integer.class); return ((int)checkOpNoThrowMethod.invoke(mAppOps,value, appUID, appPackage) == AppOpsManager.MODE_ALLOWED); 我得到以下异常: 引起:java.lang.SecurityException: uid 10062 没有 android.permission.UPDATE_APP_OPS_STATS。

2021-11-30 19:46:46    分类:技术分享    android   android-notifications   android-settings