锁屏通知

最近公司要做一个类似QQ锁屏通知的效果,百般尝试都没达到自己想要实现的效果,尤其是7.0+的机子,百度搜罗了N多篇文章基本都一样,大概思路就是再单独创建个Activity来展示消息,但是效果不尽人意。没办法只有自己研究Notification了,虽说最终效果还是要比理想的差一点但是也还能接受,想实现锁屏通知首先要手动设置通知权限,这个设置朋友们有没有能通过代码来实现的?有的话留言,谢谢!

<!-- 解锁屏幕需要的权限 -->
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<!-- 申请电源锁需要的权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />

import android.app.KeyguardManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import static android.app.Notification.DEFAULT_ALL;

public class MainActivity extends AppCompatActivity {

    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 0:
                    //管理锁屏的一个服务
                    KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
                    if (km.inKeyguardRestrictedInputMode()) {
                        Log.i("Simon", "锁屏了");
                        //获取电源管理器对象
                        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
                        if (!pm.isScreenOn()) {
                            PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP |
                                    PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");
                            wl.acquire();  //点亮屏幕
                            wl.release();  //任务结束后释放
                        }
                        createNotification();
                    } else {
                        Log.i("Simon", "未锁屏");
                    }
                    mHandler.sendEmptyMessageDelayed(0, 5000);
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mHandler.sendEmptyMessageDelayed(0, 5000);
    }

    /*创建通知*/
    private void createNotification() {
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        Notification.Builder builder = new Notification.Builder(this);
        //先解锁系统自带锁屏服务,放在锁屏界面里面
        KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
        keyguardManager.newKeyguardLock("").disableKeyguard(); //解锁
        Intent intent = new Intent(this, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

        builder.setContentIntent(pendingIntent);
        builder.setSmallIcon(R.mipmap.ic_launcher);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
        builder.setAutoCancel(true);
        builder.setContentTitle("高温告警!");
        builder.setPriority(Notification.PRIORITY_HIGH);
        builder.setDefaults(DEFAULT_ALL);
        builder.setVisibility(Notification.VISIBILITY_PUBLIC);
        // builder.setFullScreenIntent(pendingIntent, true);

        mNotificationManager.notify(2, builder.build());
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值