Android Q 之后,都不能使用 startActivity 在后台启动了。
详情见:https://developer.android.google.cn/guide/components/activities/background-starts?hl=zh-cn
可以使用fullscreen intent 达到同样的效果。
1 public class NotificationUtils extends ContextWrapper { 2 public static final String TAG = NotificationUtils.class.getSimpleName(); 3 4 public static final String id = "channel_1"; 5 public static final String name = "notification"; 6 private NotificationManager manager; 7 private Context mContext; 8 9 public NotificationUtils(Context base) { 10 super(base); 11 mContext = base; 12 } 13 14 @RequiresApi(api = 26) 15 public void createNotificationChannel() { 16 NotificationChannel channel = new NotificationChannel(id, name, NotificationManager.IMPORTANCE_HIGH); 17 getManager().createNotificationChannel(channel); 18 } 19 20 private NotificationManager getManager() { 21 if (manager == null) { 22 manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 23 } 24 return manager; 25 } 26 27 public void sendNotificationFullScreen( String title, String content, String type) { 28 if (Build.VERSION.SDK_INT >= 26) { 29 createNotificationChannel(); 30 Notification notification = getChannelNotificationQ 31 (title, content, type); 32 getManager().notify(1, notification); 33 } 34 } 35 36 public void clearAllNotifiication(){ 37 NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 38 notificationManager.cancelAll(); 39 } 40 41 public Notification getChannelNotificationQ(String title, String content, String type) { 42 Intent fullScreenIntent = new Intent(this, MainActivity.class); 43 fullScreenIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 44 fullScreenIntent.putExtra("action", "callfromdevice"); 45 fullScreenIntent.putExtra("type", type); 46 PendingIntent fullScreenPendingIntent = PendingIntent.getActivity(this, 0, fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT); 47 48 NotificationCompat.Builder notificationBuilder = 49 new NotificationCompat.Builder(this, id) 50 .setSmallIcon(R.mipmap.ic_logo) 51 .setContentTitle(title) 52 .setTicker(content) 53 .setContentText(content) 54 .setAutoCancel(true) 55 .setDefaults(Notification.DEFAULT_ALL) 56 .setPriority(NotificationCompat.PRIORITY_MAX) 57 .setCategory(Notification.CATEGORY_CALL) 58 .setFullScreenIntent(fullScreenPendingIntent,true); 59 60 Notification incomingCallNotification = notificationBuilder.build(); 61 return incomingCallNotification; 62 } 63 64 }
在后台service中调用:
NotificationUtils notificationUtils = new NotificationUtils(MyService.this); String content = "fullscreen intent test"; notificationUtils.sendNotificationFullScreen(getString(R.string.app_name), content, type);
测试的时候发现如果系统通知栏还有应用的通知消息,就只会收到通知,不会弹出页面。需要再弹出页面的时候清空一下之前的通知。
调用以下代码:
NotificationUtils notificationUtils = new NotificationUtils(this); notificationUtils.clearAllNotifiication();
这样每次都可以在Android Q中弹出页面了。
噢。耶。
仅测试一台红米Android Q,不知此方法是否使用所有Android Q 手机