此处介绍两种实现方法,仅供参考以及自己记录
方式一:
使用系统弹框实现
1.在清单文件中配置权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
2.在service中实现
AlertDialog dialog = new AlertDialog.Builder(getApplicationContext()) .setMessage("我是服务弹框") .create(); dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); dialog.show();重点是:
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
的配置
方式二:
通过获取topActivity来实现dialog的绑定
1.在自定义的Application中重写方法registerActivityLifecycleCallbacks
并且在重写的方法中的onResume中将处于栈最顶端的activity赋值给自己定义的变量
2.在Application中编写对外接口,以供外部获取当前栈顶的activity
public static Activity getCurrentActivity(){ if (currentActivity != null){ System.out.println(" 验证 M currentActivity = "+currentActivity); return currentActivity; } return currentActivity; }3.在service中实现弹框效果
Activity activity = BaseApplication.getCurrentActivity(); System.out.println("验证 M 服务中获取到的activit M = "+activity); if ( null != activity){
AlertDialog dialog = new AlertDialog.Builder(activity) .setMessage("我是服务弹框") .create(); dialog.show();}
通过application获取到当前activity,并创建dialog将其绑定到当前activity中,即可弹出
结语:在6.0以上需要进行动态权限申请,来获取需要用到的权限,具体动态权限申请方法网络上有很多,自行查看