APP启动页隐私弹窗实现说明

2023-11-18

最近审核严禁,腾讯应用市场要求APP在启动页增加隐私政策和用户协议,用户从腾讯应用市场上下载APP,第一加载的时候弹窗,不然审核就不给过,样式大概如下

用户若点击不同意的时候,无法进入APP内部。下面把实现的代码贴上来

1、加个判断,其他应用市场不需要弹窗

private boolean showDialog = true;//腾讯应用市场显示隐私说明弹窗 设置为true
private static final String SP_IS_FIRST_ENTER_APP = "SP_IS_FIRST_ENTER_APP";

2、 判断是否首次进入APP

/**
     * 是否是首次进入APP
     */
    public static boolean isFirstEnterApp() {
        return SPUtils.getInstance().getBoolean(SP_IS_FIRST_ENTER_APP, true);
    }

    /**
     * 保存首次进入APP状态
     */
    public static void saveFirstEnterApp() {
        SPUtils.getInstance().put(SP_IS_FIRST_ENTER_APP, false);
    }

 3、首次进入,清楚登录信息,显示隐私弹窗,若不是,进入APP首页

/**
     * 首次进入App,清除登录信息,显示隐私说明
     */
    private void handleFirstEnterApp() {
        boolean firstEnterApp = LoginHelper.isFirstEnterApp();

        if (firstEnterApp) {
            LoginHelper.loginOut();
            LoginHelper.saveFirstEnterApp();
            startDialog();
        }else {
            checkIsShowScroll();
        }
    }

 4、个人觉得隐私弹窗,主要难点在弹窗的实现,隐私政策和用户协议点击需要跳转到web页面。如果用多个textView拼接的话,会比较繁琐。这里用到了android自带的方法SpannableStringBuilder 来实现业务需求,代码如下

private void startDialog() {
        dialog = new AlertDialog.Builder(getContext()).create();
        dialog.show();
        //对话框弹出后点击或按返回键不消失;
        dialog.setCancelable(false);

        final Window window = dialog.getWindow();
        if (window != null) {
            window.setContentView(R.layout.dialog_intimate);
            window.setGravity(Gravity.CENTER);
            window.setWindowAnimations(com.jm.core.R.style.anim_panel_up_from_bottom);
            window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            //设置属性
            final WindowManager.LayoutParams params = window.getAttributes();
            params.width = WindowManager.LayoutParams.MATCH_PARENT;
            params.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;
            params.dimAmount = 0.5f;
            window.setAttributes(params);
            TextView textView = window.findViewById(R.id.tv_1);
            TextView tvCancel= window.findViewById(R.id.tv_cancel);
            TextView tvAgree= window.findViewById(R.id.tv_agree);
            tvCancel.setOnClickListener(view ->startFinish());
            tvAgree.setOnClickListener(view -> enterApp());
            String str = "感谢您选择壁纸制作APP!我们非常重视您的个人信息和隐私保护。" +
                    "为了更好地保障您的个人权益,在您使用我们的产品前," +
                    "请务必审慎阅读《隐私政策》和《用户协议》内的所有条款," +
                    "尤其是:1.我们对您的个人信息的收集/保存/使用/对外提供/保护等规则条款,以及您的用户权利等条款; " +
                    "2. 约定我们的限制责任、免责条款; 3.其他以颜色或加粗进行标识的重要条款。如您对以上协议有任何疑问," +
                    "可通过人工客服或发邮件至2661630693@qq.com与我们联系。您点击\"同意并继续”的行为即表示您已阅读完毕并同意以上协议的全部内容。" +
                    "如您同意以上协议内容,请点击\"同意并继续”,开始使用我们的产品和服务!";
            textView.setText(str);

            SpannableStringBuilder ssb = new SpannableStringBuilder();
            ssb.append(str);
            final int start = str.indexOf("《");//第一个出现的位置
            ssb.setSpan(new ClickableSpan() {
                @Override
                public void onClick(View widget) {
                    getSupportDelegate().start(WebViewDelegate.create("隐私政策",
                            JConstants.URL_POLICY));
                    dialog.cancel();
                    SPUtils.getInstance().put(SP_IS_FIRST_ENTER_APP, true);
                }

                @Override

                public void updateDrawState(TextPaint ds) {
                    super.updateDrawState(ds);
                    ds.setColor(getProxyActivity().getResources().getColor(R.color.text_click_yellow));       //设置文件颜色
                    // 去掉下划线
                    ds.setUnderlineText(false);
                }

            }, start, start + 6, 0);

            final int end = str.lastIndexOf("《");//最后一个出现的位置

            ssb.setSpan(new ClickableSpan() {
                @Override
                public void onClick(View widget) {
                    getSupportDelegate().start(WebViewDelegate.create("用户协议",
                            JConstants.URL_AGREEMENT));
                    dialog.cancel();
                    SPUtils.getInstance().put(SP_IS_FIRST_ENTER_APP, true);
                }

                @Override

                public void updateDrawState(TextPaint ds) {
                    super.updateDrawState(ds);
                    ds.setColor(getProxyActivity().getResources().getColor(R.color.text_click_yellow));       //设置文件颜色
                    // 去掉下划线

                    ds.setUnderlineText(false);
                }

            }, end, end + 6, 0);

            textView.setMovementMethod(LinkMovementMethod.getInstance());
            textView.setText(ssb, TextView.BufferType.SPANNABLE);
        }
    }

    private void enterApp() {//同意并继续,进入APP
        dialog.cancel();
        checkIsShowScroll();
    }

    private void startFinish() {//更改状态,finish APP
        SPUtils.getInstance().put(SP_IS_FIRST_ENTER_APP, true);
        dialog.cancel();
        _mActivity.finish();

    }

5、弹窗布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background_allow_solid"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="用户协议与隐私政策"
        android:layout_centerHorizontal="true"
        android:textColor="#282828"
        android:textSize="20sp"
        android:textStyle="bold"
        android:layout_marginTop="25dp"/>

    <TextView
        android:id="@+id/tv_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_title"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="20dp"
        android:textSize="16sp"
        android:textColor="#282828"
        android:lineSpacingMultiplier="1.2"
        />
    <View
        android:id="@+id/view_1"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#E7E7E7"
        android:layout_below="@+id/tv_1"
        android:layout_marginTop="20dp"/>
    <View
        android:id="@+id/view_2"
        android:layout_width="1dp"
        android:layout_height="50dp"
        android:background="#E7E7E7"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/view_1"/>
    <TextView
        android:id="@+id/tv_cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="不同意"
        android:textStyle="bold"
        android:textColor="#282828"
        android:layout_toLeftOf="@+id/view_2"
        android:layout_marginRight="50dp"
        android:layout_below="@+id/view_1"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        android:padding="8dp"/>

    <TextView
        android:id="@+id/tv_agree"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="同意并继续"
        android:textStyle="bold"
        android:textColor="@color/text_click_yellow"
        android:layout_toRightOf="@+id/view_2"
        android:layout_marginLeft="50dp"
        android:layout_below="@+id/view_1"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        android:padding="8dp"
        />
</RelativeLayout>

以上为全部实现代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

APP启动页隐私弹窗实现说明 的相关文章

  • CH10-HarmonyOS原子化服务

    文章目录 前言 目标 原子化服务定义 原子化服务特性 原子化服务体验 服务中心 原子化服务流转 原子化服务分享 原子化开发基础 开发总体要求 服务卡片定义 运作机制 卡片提供方主要回调函数 JS卡片语法基础 原子化服务开发进阶 卡片结构目录
  • 实验吧-密码学-奇怪的短信(九键密码)

    短信里的一段密文 335321414374744361715332 一般来说是用手机接收短信的 于是可能是手机上的九键 将密文两个两个分隔开 33 53 21 41 43 74 74 43 61 71 53 32 然后对应着拼音九键来找出对

随机推荐

  • Android开发 关于避免切换主题时免闪屏的几种方式

    Android开发 关于避免切换主题时闪屏的几种方式 在activity中调用setTheme来切换夜间模式的方法可能大家有看过相关的文章了 但是调用setTheme设置的主题后界面并没有变化 这时需要调用activity的recreate
  • RAID 磁盘状态为foreign,怎么变成ready

    我们在关掉电源 插入三块硬盘 打开电源 这时候 首先启动服务器 出现 Press
  • Eclipse重命名Package,出现的四个选项的意思。

    1 update references 更新参考 2 Rename subpackages 重命名子包 3 Update textual occurrences in comments and strings forces preview
  • 51单片机SCT15数码管4321断灭长灭程序

    include
  • 第七章 yaml格式

    一 简单说明 yaml是一个可读性高 用来表达数据序列的格式 YAML 的意思其实是 仍是一种标记语言 但为了强调这种语言以数据做为中心 而不是以标记语言为重点 二 基本语法 缩进时不允许使用Tab键 只允许使用空格缩进的空格 数目不重要
  • 好分数阅卷3.0_网上阅卷系统是什么

    什么是网上阅卷系统 网上阅卷系统简称在线阅卷或阅卷系统 是一套集电子光学扫描技术和计算机网络技术于一体的纸答题卡电子处理的一套软硬件结合的现代计算机系统 系统特点及简介它主要实现了答题卡模板的智能化生产 由计算机自动对考生填写选择题段信息点
  • 追根究底,剖析MFC六大关键技术(1)

    题外话 我并不认为MFC减轻了程序员们的负担 MFC出现的目的虽然似乎是为了让程序员不用懂得太多就可以进行视窗编程 但本人在MFC里徘徊了很久很久 因为那时没有书本详细介绍MFC的原理 毫无收获 可能朋友们会说 怎么一定要了解MFC的具体呢
  • HBuilder X 上传git仓库

    首先安装git插件 HBuilder的左上方点击工具 点击插件安装 gt 安装新插件 gt 下滑找到 git 进行安装 安装easy git源码管理 HBuilder的左上方点击工具 点击插件安装 gt 安装新插件 gt 前往插件市场安装
  • K8s Liveness/Readiness/Startup 探针机制

    官方参考文档 目录 前言 一 默认健康检测 1 1 restartPolicy 1 2 测试案例 二 Liveness 三 Readiness 四 Startup 前言 玩过 Docker Swarm 的应该都知道 有一种功能叫自愈功能 当
  • 4.9-4.10 矩阵乘法的性质 & 矩阵的幂运算 & 矩阵的转置及其性质

    矩阵乘法的性质 矩阵的乘法不遵守交换律 矩阵乘法遵守结合律 分配律 对于任意r行c列的矩阵A 存在c行x列的矩阵O 满足 A Ocx Orx 对于任意r行c列的矩阵A 存在x行r列的矩阵O 满足 Oxr A Oxc 证明思路 A B C A
  • 3.二进制数的应用、逻辑学及逻辑门

    由前面的例子中我们讲了很多设备 比如手电筒 继电器 以及两个编码 莫尔斯编码和布莱叶盲文 这些和我们熟知的二进制数有着很大的联系 二进制数我们已经很了解了 接下来举几个例子 1 胶卷的好坏判定 我们把胶卷拉开 会发现有12个方格 是由银色和
  • Keil(MDK-ARM-STM32)系列教程(四)工程目标选项配置(Ⅱ)

    写在前面 本文接着上一篇文章 工程目标选项配置 进行讲述工程目标选项中后五项的配置 也就是C C Asm Linker Debug Utilities这五项配置的具体内容 对于工程目标选项中的C C 选项 不管是初学者 还是资深的软件工程师
  • memcach redis的理解 和有点

    Memcach 是一种缓存技术 在一定的时间内将动态页面经过解析之后保存发到文件中国 下次访问时动态网页就直接调用这个文件 而不必再重新访问数据库 使用memcach 做缓存的好处是 提高网站的访问速度 减轻高并发是服务器的压力 优点 稳定
  • 对于一个程序员来说,电脑的内存需要多大?

    1 程序员电脑内存有多大内存够用足够了 纯写代码的编程对电脑要求不高 尤其对显卡几乎没有要求 一般编程可能开的任务窗口比较多 所以只要cpu和内存大点就可以了一般来说 处理器确实比显卡来得重要一些 因为我们的电脑中只配备了一块处理器 而处理
  • MEX 文件 ‘lsd.mexw64‘ 无效: 找不到指定的模块。问题解决方法

    问题描述 在跑MATLAB和C 混合编程的一个算法时 出现了如下错误 MEX 文件 C Project final code reference code lsd mexw64 无效 找不到指定的模块 如下图所示 原因分析 根据资料 1 的
  • windows安装cx_oracle的坑

    转自http rookiefly cn detail 69 作死小能手这两天闲着没事 把自己电脑重装了 然而重装过后配置开发环境踩了一些坑 这里把安装cx oracle遇到的坑记录下来 方便以后查看 使用pip安装出现的问题 命令 pip
  • linux下nc命令

    一 nc命令检测端口的用法 nc v w 10 IP z PORT v 显示指令执行过程 w lt 超时秒数 gt 设置等待连线的时间 u 表示使用UDP协议 z 使用0输入 输出模式 只在扫描通信端口时使用 例1 扫描指定的8080端口
  • 亚马逊云科技与百川智能发起AI黑客松,共探医疗健康和游戏娱乐领域的前沿应用

    8月31日 亚马逊云科技云创计划成员企业暨基础模型创业公司百川智能 率先通过了 生成式人工智能服务管理暂行办法 备案 即日起面向全社会开放服务 基础模型获准面向公众用户开放服务 意味着有机会基于大量真实用户的调用反馈建立模型迭代的飞轮 其效
  • Linux命令之远程连接ssh

    概述 ssh命令是openssh套件中的客户端连接工具 可以给予ssh加密协议实现安全的远程登录服务器 实现对服务器的远程管理 在脚本中该命令有着重要重要 可用于在远程服务器中执行命令 语法 ssh命令的基本语法如下 ssh 选项 参数 常
  • APP启动页隐私弹窗实现说明

    最近审核严禁 腾讯应用市场要求APP在启动页增加隐私政策和用户协议 用户从腾讯应用市场上下载APP 第一加载的时候弹窗 不然审核就不给过 样式大概如下 用户若点击不同意的时候 无法进入APP内部 下面把实现的代码贴上来 1 加个判断 其他应