Articles of 通知

在没有通知有效负载的情况下在Android和iOS上使用GCM

我想通过Google Cloud Messaging在Android和iOS上实现推送通知。 我不想在我的有效负载中使用notification密钥,因为Android行为并不理想。 在Android上,我更喜欢我的接收器总是被data有效负载触发,我可以使用NotificationCompat自己构建NotificationCompat 。 例如,如果您在Android上使用notification有效内容,则无法控制通知样式。 但是,如果我只发送一个data有效载荷,我想我的iOS应用程序将不会接收推送,如果它是后台 – 杀死,从设备重启后从未启动等等。我认为GCM的content_available标志可能会触发推送吗? 在iOS上,我是否能够复制Android的行为,始终让我的应用内代码在通知时执行? 我可以根据GCM data有效负载构建我自己的iOS通知,也许可以使用类似UILocalNotification东西,但从我正在阅读的内容UILocalNotification ,iOS要求notification有效负载存在以确保始终通过用户。 我能在iOS上获得这种控制吗?

显示后通知消失

我们的应用程序中的代码类似于以下内容 val pendingIntent = PendingIntent.getActivity(ctx, id.toInt(), intent, PendingIntent.FLAG_CANCEL_CURRENT) val builder = NotificationCompat.Builder(ctx, Channel.TEST_CHANNEL.channelId) builder.setTicker(tickerText) .setContentTitle(contentTitle) .setContentText(contentText) .setVibrate(vibrate) .setSmallIcon(icon) .setAutoCancel(true) .setLights(-0xff0100, 300, 1000) .setSound(uri) .setContentIntent(pendingIntent) .setStyle(NotificationCompat.BigTextStyle().bigText(contentText)) .addAction(R.drawable.ic_notification, ctx.getString(R.string.notification), piAction) val notification = builder.build() val nf = ctx.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager nf.notify(NOTIFICATION_TAG, id.toInt(), notification) } 从最近开始,我们注意到某些运行Android 8+的设备上的通知在显示后开始消失,没有用户的互动。 将auto-cancel设置为false有所帮助,但用户体验会降低。 id是数据库中的唯一项ID。 这可能是需要注意的重要事项 – 从技术上讲,我们可以通过用户显示,删除/取消此类id的通知,以及稍后再次使用具有相同ID的类似通知的时间。 这可能是原因吗?

我在特定时间安排本地通知,使用开关但在设定时间不触发

我正在使用一个开关,当打开时会触发警报并启动通知。 最初它工作正常并在设定的时间触发警报。 手动更改时间后,它开始工作奇怪的通知是在开关打开但不在指定的设定时间时立即触发。 这是交换机的代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); aSwitch = (Switch) findViewById(R.id.switch1); prefs = PreferenceManager.getDefaultSharedPreferences(this); Boolean switchState = prefs.getBoolean(“locked”, false); if(switchState) { aSwitch.setChecked(true); } else { aSwitch.setChecked(false); } aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { prefs.edit().putBoolean(“locked”, true).apply(); NotificationEventReceiver.setupAlarm(getApplicationContext()); aSwitch.setChecked(true); } else { prefs.edit().putBoolean(“locked”, false).apply(); NotificationEventReceiver.cancelAlarm(getApplicationContext()); […]

从InstrumentationTestCase创建通知

我想从unit testing中测试通知是否能够从资产中播放自定义声音。 测试并不是为了validation任何东西,我把它写成一种快速的方式来演示一个function而不会混淆主应用程序代码。 所以在测试项目中,我在/res/raw添加了一个wav文件。 我将在通知构建器中使用此URL: Uri path = Uri.parse(“android.resource:///testsound.wav”); 该URL应该根据我在SO中阅读的问题工作。 我们假设它有效。 现在因为我不想在主项目的/res/raw文件夹中包含测试wav文件,但是在测试项目中,我不得不从InstrumentationTestCase扩展我的unit testing,以便我可以访问测试项目。 这是代码: NotificationCompat.Builder builder = new NotificationCompat.Builder(getInstrumentation().getContext()); … builder.setSound(path, AudioManager.STREAM_NOTIFICATION); … NotificationManager notificationManager = (NotificationManager) getInstrumentation().getContext().getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(NOTIFICATION_ID, builder.build()); notify调用抛出以下exception: java.lang.SecurityException: Calling uid 10198 gave package which is owned by uid 10199 at android.os.Parcel.readException(Parcel.java:1540) at android.os.Parcel.readException(Parcel.java:1493) at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:611) at android.app.NotificationManager.notify(NotificationManager.java:187) at android.app.NotificationManager.notify(NotificationManager.java:140) … at […]

单击android中通知内的按钮打开一个对话框

正如您在通知中看到的批准/拒绝按钮,我想打开一个对话框以确认用户输入而不打开任何活动。 这是我的代码,其中MyDialog是一个Activity,但我没有打开这个活动,而是想打开一个对话框。 public void createNotification(View view) { Intent yesIntent = new Intent(this, MyDialog.class); yesIntent.putExtra(“NOTI_ID”, NOTIFICATION_ID); yesIntent.putExtra(“ACTION”, 1); PendingIntent yesPIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), yesIntent, PendingIntent.FLAG_UPDATE_CURRENT); Intent noIntent = new Intent(this, MyDialog.class); noIntent.putExtra(“ACTION”, 0); noIntent.putExtra(“NOTI_ID”, NOTIFICATION_ID); PendingIntent nopIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), noIntent, 0); NotificationCompat.Builder noti = new NotificationCompat.Builder(this) .setContentTitle(“New Project Approval”) .setContentText(“Project Description”) .setContentIntent(PendingIntent.getActivity(MainActivity.this, 0, […]

通知中的播放/暂停按钮图像,Android

我已经实现了音乐播放器,可以在播放流音频时触发自定义通知。 一切正常,我可以使用通知中的按钮播放/暂停音频。 唯一的问题是图像按钮:单击按钮无法更改图像以指示播放/暂停。 在RemoteReceiver中使用remoteViews.setImageViewResource()不起作用。 控件是使用BroadcastReceiver完成的,这是从玩家活动中触发通知的代码: public void setNotification(String songName){ String ns = Context.NOTIFICATION_SERVICE; NotificationManager notificationManager = (NotificationManager) getSystemService(ns); @SuppressWarnings(“deprecation”) Notification notification = new Notification(R.drawable.ic_launcher, null, System.currentTimeMillis()); RemoteViews notificationView = new RemoteViews(getPackageName(), R.layout.notification_view); notificationView.setImageViewResource(R.id.button1, R.drawable.pause); notificationView.setTextViewText(R.id.textView1, songName); //the intent that is started when the notification is clicked (works) Intent notificationIntent = new Intent(this, PlayerActivity.class); PendingIntent pendingNotificationIntent […]

Android – 正确更新通知进度条

我仍然是Android的新手,我正在努力改进我的通知进度条以使其更顺畅,而不是为我的Pebble点燃一百万次更新并以“正确的方式”进行。 此代码工作“正常”,就像我使用它时,通知绘制和进度条按预期完成。 当我将Pebble手表设置为接受我的应用程序通知时,这对我来说成了一个问题。 这导致每个上传的图像振动约50次,具体取决于上传速度的速度。 作为一个初学者,我认为我这样做是错的,并且有更好的方法来做我想做的事情。 我的通知的进度条使用以下代码更新: private int upload_progress; private Long time_previous_progress = Calendar.getInstance().getTimeInMillis(); protected void onProgressUpdate(Integer… progress) { Long time_now = Calendar.getInstance().getTimeInMillis(); if( ((time_now – time_previous_progress) < 55) // 55ms minimum delay || (progress[0] 100) // progress >0 && <100 || progress[0].equals(upload_progress) // progress changed || ! App.getStatus() // watcher is running ) { […]

Android – 如何将通知设置为将来的特定日期?

编辑:已解决! 曾经想要从某个特定日期开始设置通知(当某个活动开始时或按下按钮时?)阅读更多内容以了解如何: //Set a notification in 7 days Calendar sevendayalarm = Calendar.getInstance(); sevendayalarm.add(Calendar.DATE, 7); Intent intent = new Intent(this, Receiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 001, intent, 0); AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, sevendayalarm.getTimeInMillis(), pendingIntent); 这是Receiver类的代码 public class Receiver extends Service { @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { […]

在活动可见时隐藏前台服务的通知

他们是一种将服务作为前台服务启动并在活动可见时隐藏通知的方法吗? 考虑一个音乐播放器,当应用程序打开时,您不需要通知(即按钮),但只要音乐播放器在后台,就会显示通知。 我知道,怎么做,如果我不在前台运行我的服务…但是当在前台运行时,服务本身需要通知并显示它,我自己无法管理通知… 我该如何解决这个问题?

使用RemoteViews的Android自定义通知布局

我正在尝试使用这篇文章为我的Android应用程序创建一个自定义通知,我偶然发现了一个我在过去2小时内试图解决的问题。 只有我的布局的图像视图显示,我无法弄清楚如何让它像预期的那样工作。 我的代码: package be.ac.ucl.lfsab1509.cumulus.services; import android.app.Notification; import android.app.PendingIntent; import android.content.Intent; import android.support.v4.app.NotificationCompat; import android.support.v4.app.TaskStackBuilder; import android.widget.RemoteViews; import be.ac.ucl.lfsab1509.cumulus.R; import be.ac.ucl.lfsab1509.cumulus.activities.MainActivity; import be.ac.ucl.lfsab1509.cumulus.entities.Song; public class CumulusNotification { private CumulusService mCtx; private CumulusMediaPlayer mPlayer; private Notification mNotification; private NotificationCompat.Builder mBuilder; private RemoteViews mContentView; public CumulusNotification(CumulusService ctx, CumulusMediaPlayer player){ mCtx = ctx; mPlayer = player; mBuilder = […]