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

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

1、判断是否首次进入APP

/*** 是否是首次进入APP*/public static boolean isFirstEnterApp() {
spHelper = new SharedPreferencesHelper(this, ConstantValue.userInfo);boolean isFirstEnterApp = (Boolean) spHelper.getSharedPreference(ConstantValue.isFirstEnterApp, true);return isFirstEnterApp;}/*** 保存首次进入APP状态*/public static void saveFirstEnterApp() {spHelper.put(ConstantValue.isFirstEnterApp, false);}

2、首次进入,显示隐私弹窗,若不是就判断是否申请权限

 if (isFirstEnterApp) {startDialog();}else {checkPermission();}

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

private void startDialog() {final AlertDialog alertDialog = new AlertDialog.Builder(this).create();alertDialog.show();alertDialog.setCancelable(false);Window window = alertDialog.getWindow();if (window != null) {window.setContentView(R.layout.dialog_initmate);window.setGravity(Gravity.CENTER);TextView tvContent = window.findViewById(R.id.tv_content);TextView tvCancel = window.findViewById(R.id.tv_cancel);TextView tvAgree = window.findViewById(R.id.tv_agree);String str = "    感谢您对本公司的支持!本公司非常重视您的个人信息和隐私保护。" +"为了更好地保障您的个人权益,在您使用我们的产品前," +"请务必审慎阅读《隐私政策》和《用户协议》内的所有条款," +"尤其是:\n" +" 1.我们对您的个人信息的收集/保存/使用/对外提供/保护等规则条款,以及您的用户权利等条款;\n" +" 2. 约定我们的限制责任、免责条款;\n" +" 3.其他以颜色或加粗进行标识的重要条款。\n" +"如您对以上协议有任何疑问," +"可通过人工客服或发邮件至sharetronicios@163.com与我们联系。您点击“同意并继续”的行为即表示您已阅读完毕并同意以上协议的全部内容。" +"如您同意以上协议内容,请点击“同意”,开始使用我们的产品和服务!";SpannableStringBuilder ssb = new SpannableStringBuilder();ssb.append(str);final int start = str.indexOf("《");//第一个出现的位置ssb.setSpan(new ClickableSpan() {@Overridepublic void onClick(@NonNull View widget) {Toast.makeText(SplashScreenActivity.this, "《隐私政策》", Toast.LENGTH_SHORT).show();}@Overridepublic void updateDrawState(@NonNull TextPaint ds) {super.updateDrawState(ds);ds.setColor(getResources().getColor(R.color.gaoqing));ds.setUnderlineText(false);}}, start, start + 6, 0);int end = str.lastIndexOf("《");ssb.setSpan(new ClickableSpan() {@Overridepublic void onClick(@NonNull View widget) {Toast.makeText(SplashScreenActivity.this, "《用户协议》", Toast.LENGTH_SHORT).show();}@Overridepublic void updateDrawState(@NonNull TextPaint ds) {super.updateDrawState(ds);ds.setColor(getResources().getColor(R.color.gaoqing));ds.setUnderlineText(false);}}, end, end + 6, 0);tvContent.setMovementMethod(LinkMovementMethod.getInstance());tvContent.setText(ssb, TextView.BufferType.SPANNABLE);tvCancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {spHelper.put(ConstantValue.isFirstEnterApp, true);alertDialog.cancel();finish();}});tvAgree.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {spHelper.put(ConstantValue.isFirstEnterApp, false);checkPermission();alertDialog.cancel();}});}}

4、弹窗布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="25dp"android:padding="@dimen/dp_5"android:text="用户协议与隐私政策"android:textColor="#282828"android:textSize="20sp"android:textStyle="bold" /><ScrollViewandroid:layout_width="match_parent"android:layout_height="300dp"android:paddingTop="@dimen/dp_20"android:paddingBottom="@dimen/dp_20"><TextViewandroid:id="@+id/tv_content"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="15dp"android:layout_marginRight="15dp"android:lineSpacingMultiplier="1.2"android:textColor="#282828"android:textSize="16sp" /></ScrollView><Viewandroid:id="@+id/view_1"android:layout_width="match_parent"android:layout_height="1dp"android:background="#E7E7E7" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_cancel"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:padding="@dimen/dp_12"android:text="不同意"android:textColor="#282828"android:textStyle="bold" /><Viewandroid:layout_width="1dp"android:layout_height="match_parent"android:background="#E7E7E7" /><TextViewandroid:id="@+id/tv_agree"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_below="@+id/view_1"android:layout_toRightOf="@+id/view_2"android:layout_weight="1"android:gravity="center"android:padding="@dimen/dp_12"android:text="同意"android:textColor="#282828"android:textStyle="bold" /></LinearLayout></LinearLayout>
</android.support.v7.widget.CardView>

参考于:

https://blog.csdn.net/yun382657988/article/details/103343880

APP启动页隐私弹窗实现说明相关推荐

  1. ios启动页尺寸_关于移动端App启动页的策划方案

    App启动页是指app在启东时需要加载必要的运行环境和配置,在这个过程中提示用户等待的一个过渡页面. 在产品经理眼里启动页是app给予用户重要的第一印象:也是App最重要的黄金页面之一,所有用户100 ...

  2. UI培训教程分享:APP启动页UI界面设计

    本期为大家分享的ui培训教程是关于APP启动页面的UI设计方面,作为一名合格的UI设计师,APP产品的启动页是需要会的,下面就来看看详细的教程吧. UI培训教程分享:APP启动页UI界面设计 启动页面 ...

  3. app启动页的设计技巧(一)

    虽然,每一个APP的启动页界面设计是需要按使用场景设计的.但是每一个APP启动页的存在的意义与APP产品定位.APP运营策略有关的. 第一部分:对于设计一个好的APP启动页作品,必须满足这三个特征 认 ...

  4. 产品策划三:App启动页的策划方案

    App启动页是指app在启东时需要加载必要的运行环境和配置,在这个过程中提示用户等待的一个过渡页面. 在产品经理眼里启动页是app给予用户重要的第一印象:也是App最重要的黄金页面之一,所有用户100 ...

  5. app启动页自动跳转源码_关于移动端App启动页的策划方案

    App启动页是指app在启东时需要加载必要的运行环境和配置,在这个过程中提示用户等待的一个过渡页面. 在产品经理眼里启动页是app给予用户重要的第一印象:也是App最重要的黄金页面之一,所有用户100 ...

  6. android启动页广告图,一张图搞定APP启动页广告

    之前我们产品里的启动页比较简单,就是背景色加上我们的logo.slogan等,这种形式适配起来比较容易,把元素切出来交给开发写出来就行.最近由于运营的需求,我们需要在APP启动页展示广告,广告图更新频 ...

  7. android打开app白色页面,完美解决Android App启动页有白屏闪过的问题

    应用启动的时候有短暂的白屏,如图: 可以通过设置theme的方式来解决 @color/colorPrimary @color/colorPrimaryDark @color/colorAccent t ...

  8. app的启动页面(二)----四种APP启动页设计方案

    第一种APP启动页设计方案: 扁平法 简单粗暴的手法.简单的纯色或者几何立体背景+广告语+icon,也适合如今设计的风格趋势等. 方案的延伸就是,加点加载动画或者过渡动画. 第二种APP启动页设计方案 ...

  9. android开发 时间倒计时的启动页,App启动页倒计时功能

    示例代码采用 RxJava + RxLifecycle + Data-Binding 模式编写 示例图: 话不多说,实现方式如下: 1.导入依赖库 ① RxJava: Reactive Extensi ...

最新文章

  1. ORACLE MTTR
  2. 尽管普通的sql语句代码可以实现数据插入的操作,但是更好的代码应该是参数的方式:...
  3. Java / Spring:如何快速生成整个Swagger记录的CRUD REST API
  4. [html] 列举几种瀑布流布局的方法
  5. 异步简析之BlockingCollection实现生产消费模式
  6. reload maven project' has encountered a proble 问题
  7. 基于树莓派2代的DIY无线路由器
  8. 23 模块代码编写基础
  9. tinypng本地批量压缩图片
  10. 正规的打码网站使用方法有哪些
  11. 论文阅读KMN:Kernelized Memory Network for Video Object Segmentation
  12. 秒杀系统架构设计与分析
  13. 通俗易懂的csrf漏洞(token为什么能放cookie)
  14. Oracle--优化
  15. 黑马程序员--Java学习01--java简介
  16. 如何用一根网线实现在两台电脑之间传输数据
  17. Spring Boot 开发环境热部署(HotSwap)详解
  18. .NET Framework简介
  19. 2021-03-25 minio
  20. 路径规划算法学习Day5

热门文章

  1. c语言中将分钟的时间转换为小时和分钟并存的形式
  2. .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus)
  3. aspx网页背景图片设置代码_Vue+CSS3制作双螺旋DNA动画:代码详解和基础知识复习
  4. 西瑞克斯机顶盒cy-jc1320安装APP
  5. python 获取昨天的时间
  6. 提问的智慧!高手如何成长为高手,高手原来也是像我一样的菜鸟!
  7. 计算机安全外文文献出处,网络信息安全外文文献翻译中英文.doc
  8. 走进Vue.js 1.0-姜威-专题视频课程
  9. win10环境下AndroidStudio输入法光标不跟随解决办法
  10. 阻碍NFT进一步发展的绊脚石都有哪些?从6个方面切入分析