最近公司要做一个类似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()); } }