接收广播实现全局弹窗

Android TV开发过程中通过接收开机广播等实现各种提示弹窗的需求非常多,当然也可以是其他任何广播,任何诡异的需求,你懂的...

以下内容仅是个人开发经验,欢迎指正~*

  • 方法一:
public class LoginBroadCastReceiver extends BroadcastReceiver{
 
    @Override
    public void onReceive(final Context context, Intent intent){
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("下线通知");
        builder.setMessage("你的账号在其他地方登录!");
        builder.setCancelable(false);
        builder.setPositiveButton("重新登录", new DialogInterface.OnClickListener()
        {
            @Override 
            public void onClick(DialogInterface dialog, int which){
                ActivityCollector.finishAll();
                Intent intent = new Intent(context, LoginActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //在广播接受者中启动活动需要添加这个标志
                context.startActivity(intent);
            }
        });
        AlertDialog dialog = builder.create();
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); //需要设置AlertDialog的类型,保证在广播接收者中可以正常弹出
        dialog.show();
    }
}

弹窗权限:

<uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW" />
  • 方法二:
    正常弹出AlertDialog的流程如下:
new AlertDialog.Builder(context).setTitle("在BroadcastReceiver里弹出AlertDialog").show();

但是其实AlertDialog似乎只能在activity中弹出为了解决在BroadcastReceiver里弹出AlertDialog这个问题,我们可以这样做:

AlertDialog alertDialog=new AlertDialog.Builder(context).create();
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alertDialog.show();

需要注意的时候,最后还要在androidManifest.xml文件中加入以下两句话:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/>

谨以作为开发记录,如果有帮到您,记得点赞哦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容