介绍
小编给大家分享一下安卓如何实现悬浮窗全系统版本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
悬浮窗是在系统上显示的内容,好像微信视频聊天时的小窗口一样,在退出软件后依然存在的一个窗口,本博客以窗口中放一个按钮组件为例,简单展示悬浮窗,其中包括了对Android 6.0以下,Android 6.0到Android 8.0, Android 8.0以上版本的处理,下面开始介绍实现方法:
<强> 1,MainActivity中的代码强>
public Button mFloatingButton; , ,@Override ,protected void  onCreate (Bundle savedInstanceState), { super.onCreate才能(savedInstanceState); ,,setContentView (R.layout.activity_main); ,//才能初始化视图 initView才能(); ,} ,//初始化视图 ,private void  initView (), { mFloatingButton才能=(按钮),findViewById (R.id.floating_btn); mFloatingButton.setOnClickListener才能(这个); ,} , ,public void  startFloatingButtonService (View 视图),{ Log.e才能(“测试流程,,,“测试流程“); if 才能;(FloatingService_Button.isStarted), { ,,Log.e(“测试流程2“,,“测试流程2“); ,才能回报; ,,} if 才能;(Build.VERSION.SDK_INT 祝辞=,Build.VERSION_CODES.M),{//判断系统版本 ,,if (! Settings.canDrawOverlays(这),{ ,,,Toast.makeText(,,“当前无权限,请授权“,,Toast.LENGTH_SHORT); ,,,Log.e(“测试流程3“,,“测试流程3“); ,,,startActivityForResult (new 意图(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse(“包:“,+,getPackageName ())),, 0); ,,},{else ,,,Log.e(“测试流程4“,,“测试流程4“); ,,,startService (new 意图(MainActivity.this, FloatingService_Button.class)); ,,} ,,},{else ,,startService (new 意图(MainActivity.this, FloatingService_Button.class)); ,,} , ,} , ,@Override ,protected void  onActivityResult (int requestCode, int resultCode,, Intent 数据),{ if 才能;(requestCode ==, 0), { ,,if (! Settings.canDrawOverlays(这),{ ,,,Log.e(“测试流程5“,,“测试流程5“); ,,,Toast.makeText(,,“授权失败“,,Toast.LENGTH_SHORT),告诉(); ,,},{else ,,,Log.e(“测试流程6“,,“测试流程6“); ,,,Toast.makeText(,,“授权成功,,,Toast.LENGTH_SHORT),告诉(); ,,,startService (new 意图(MainActivity.this, FloatingService_Button.class)); ,,} ,,} ,} , ,@Override ,public void  onClick (View v), { switch 才能;(v.getId ()) { ,,case R.id.floating_btn : ,,,startFloatingButtonService (v); ,,,休息; ,,} 以前,}>思路简单解释:点击弹出悬浮窗按钮时,获取版本并判断”Build.VERSION。SDK_INT祝辞=Build.VERSION_CODES.M”如果系统版本在6.0以下这不需要请求权限,如果系统版本在6.0以上需要进行权限检测以及请求,获取权限后,弹出悬浮框
<强> 2,activity_main。xml代码强>
& lt; ? xml version=?.0“,编码=皍tf-8" ?比; & lt; LinearLayout  xmlns: android=癶ttp://schemas.android.com/apk/res/android" ,xmlns:工具=癶ttp://schemas.android.com/tools" ,android: layout_width=癿atch_parent" ,android: layout_height=癿atch_parent" ,android:取向=皏ertical" ,工具:上下文=癱om.example.jack_lin.suspendwindow.MainActivity"祝辞 , & lt;按钮 android:才能id=癅 + id/floating_btn" ,, android才能:文本=癅string/floating_btn",/比; , , & lt;/LinearLayout>简单解释:xml中没什么特别东西,线性布局中放一个按钮
<强> 3,FloatingService_Button的代码强>
public static boolean isStarted =,假; , ,private WindowManager  windowManager; ,private WindowManager.LayoutParams  layoutParams; , ,private Button 按钮; , ,@Override ,public void  onCreate (), { super.onCreate才能(); Log.e才能(“进入服务1“,,“进入服务1“); isStarted =,才能正确; windowManager 才能=,(WindowManager), getSystemService (WINDOW_SERVICE); 时间=layoutParams 才能;new WindowManager.LayoutParams (); if 才能;(Build.VERSION.SDK_INT 祝辞=,Build.VERSION_CODES.O), { ,,layoutParams.type =, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; ,,},{else ,,layoutParams.type =, WindowManager.LayoutParams.TYPE_PHONE; ,,} null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullAndroid如何实现悬浮窗全系统版本