Android8.0以上的notification和startForeground

1,startForeground方法,避免service被杀死

private void setNotification(String text) {

    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
    PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    Notification notification = null;

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {

        Uri mUri = Settings.System.DEFAULT_NOTIFICATION_URI;

        NotificationChannel mChannel = new NotificationChannel(CHANNEL_ONE_ID, "driver", NotificationManager.IMPORTANCE_LOW);

        mChannel.setDescription("description");

        mChannel.setSound(mUri, Notification.AUDIO_ATTRIBUTES_DEFAULT);

        mManager.createNotificationChannel(mChannel);

        notification = new Notification.Builder(this, CHANNEL_ONE_ID)
                .setChannelId(CHANNEL_ONE_ID)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(getString(R.string.app_name))
                .setContentText(text)
                .setContentIntent(pi)
                .build();
    } else {
        // 提升应用权限
        notification = new Notification.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(getString(R.string.app_name))
                .setContentText(text)
                .setContentIntent(pi)
                .build();
    }
    notification.flags = Notification.FLAG_ONGOING_EVENT;
    notification.flags |= Notification.FLAG_NO_CLEAR;
    notification.flags |= Notification.FLAG_FOREGROUND_SERVICE;
    startForeground(10000, notification);
}

2,8.0普通通知(新增channelID)

if (ScreenKt.isBackground(getActivity()) && isOnDuty) {
    //"您现在是出车中,进入后台超过5分钟可能会导致接不到单,请及时回到应用"
    SpeechKt.speak(R.string.enter_the_background);

    Intent intent = new Intent(getActivity(), MainActivity.class);
    PendingIntent pi = PendingIntent.getActivity(getActivity(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    Notification notification = null;
    NotificationManager manager = (NotificationManager) getActivity().getSystemService(NOTIFICATION_SERVICE);
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        String CHANNEL_ONE_ID = "com.huanqiuchuxing.driver";

        Uri mUri = Settings.System.DEFAULT_NOTIFICATION_URI;

        NotificationChannel mChannel = new NotificationChannel(CHANNEL_ONE_ID, "driver", NotificationManager.IMPORTANCE_LOW);

        mChannel.setDescription("description");

        mChannel.setSound(mUri, Notification.AUDIO_ATTRIBUTES_DEFAULT);

        manager.createNotificationChannel(mChannel);

        notification = new Notification.Builder(getActivity(), CHANNEL_ONE_ID)
                .setChannelId(CHANNEL_ONE_ID)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("您现在是出车中,进入后台超过5分钟可能会导致接不到单,请及时回到应用")
                .setContentText("进入应用")
                .setAutoCancel(true)
                .setContentIntent(pi)
                .build();

    } else {
        notification = new Notification.Builder(getActivity())
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("您现在是出车中,进入后台超过5分钟可能会导致接不到单,请及时回到应用")
                .setContentText("进入应用")
                .setAutoCancel(true)
                .setContentIntent(pi)
                .build();
    }
    manager.notify(10001, notification);
}

亲测有效,拿走不谢。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值