Cocos Creater打包安卓App添加隐私弹窗详细步骤+常见问题处理

news2025/4/20 12:58:25

最终演示效果,包含所有代码内容 + 常见错误问题处理

点击服务协议、隐私政策,跳转到相关网页,

点击同意进入游戏,不同意关闭应用

一,添加Activity,命名为MyLaunchActivity

二,编写MyLaunchActivity.java的内容

package com.cocos.game.launch;

import android.os.Bundle;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import fish.create.light.R;

import android.widget.FrameLayout;
import android.webkit.WebView;
import android.widget.TextView;
import android.widget.Button;
import android.view.View;
import android.webkit.WebSettings;
import android.view.KeyEvent;
import android.content.Intent;
import android.app.Activity;


import com.cocos.game.AppActivity;


//AppCompatActivity
public class MyLaunchActivity extends Activity {

//    @Override
//    protected void onCreate(Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        EdgeToEdge.enable(this);
//        setContentView(R.layout.my_launch);
//        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
//            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
//            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
//            return insets;
//        });
//    }



    private static String _agreedSymbol = "AGREE_HQ_SERVICE";
    private MyPrivacyDialog _agrementDialog=null;
    private FrameLayout _bgLayout=null;
    private TextView _titleTxt=null;
    private WebView _webView=null;
    private Button _exitBtn=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_launch);
        initShow();
        initDialog();
    }

    private void initShow(){
        _bgLayout=findViewById(R.id.launch_con_node);
        _titleTxt=findViewById(R.id.launch_title);
        _exitBtn=findViewById(R.id.launch_exitBtn);
        _exitBtn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                if(_agrementDialog!=null){
                    _agrementDialog.show();
                }
                _bgLayout.setVisibility(View.GONE);
            }
        });

        _webView=findViewById(R.id.launch_WebView);
        WebSettings settings = _webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDefaultTextEncodingName("UTF-8");
        //自适应手机屏幕
        settings.setUseWideViewPort(true);
        settings.setLoadWithOverviewMode(true);

        _bgLayout.setVisibility(View.GONE);
    }

    private void initDialog(){
        boolean states= (boolean) SPUtil.get(getApplication(),_agreedSymbol,false);
        if (states==false)
        {
            _agrementDialog = new MyPrivacyDialog(this);
            _agrementDialog.show();
            _agrementDialog.setOnBtnClickListener(new MyPrivacyDialog.OnBtnClickListener(){
                @Override
                public void onClick(int type) {
                    switch (type) {
                        case MyPrivacyDialog.ARGEEMENT_TEXT_CLICK://查看用户协议
                            loadUrl(getResources().getString(R.string.url_service),getResources().getString(R.string.user_service));
                            break;
                        case MyPrivacyDialog.SECRET_TEXT_CLICK://查看隐私协议
                            _agrementDialog.hide();
                            loadUrl(getResources().getString(R.string.url_private),getResources().getString(R.string.user_private));
                            break;
                        case MyPrivacyDialog.NOT_ARGEE_BTN_CLICK://不同意按钮
                            _agrementDialog.dismiss();
                            finish();
                            break;
                        case MyPrivacyDialog.ARGEE_BTN_CLICK: //同意按钮
                            _agrementDialog.dismiss();
                            SPUtil.put(getApplication(),_agreedSymbol,true);
                            jumpGameActivity();
                            break;
                    }
                }
            });
        }
        else{
            jumpGameActivity();
        }
    }

    private void loadUrl(String url,String str){
        _bgLayout.setVisibility(View.VISIBLE);
        _titleTxt.setText(str);
        _webView.loadUrl(url);

        _agrementDialog.hide();
    }

    public void jumpGameActivity() {
        // 闪屏结束后,跳转到游戏界面
        Intent intent = new Intent(this, AppActivity.class);
        startActivity(intent);
        this.finish();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if (keyCode == KeyEvent.KEYCODE_BACK)
        {

        }
        return true;
    }






}

三,编写my_launch.xml内容

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:l

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2338735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 热点二维码简单示例

Android 热点二维码简单示例 一、前言 Android 原生设置有热点二维码分享功能&#xff0c;有些系统应用也会有这个需求。 下面看看是如何实现的。 本文是一个比较简单的内容。 二、热点二维码生成实现 1、效果 整个应用就一个普通的Activity&#xff0c;显示一个按钮和二维…

JAVAEE(网络原理—UDP报头结构)

我们本篇文章要讲的是UDP的报头结构以及注意事项。 下面呢&#xff0c;我先说一下UDP是什么&#xff1f; 1.UDP是什么&#xff1f; UDP是一种网络协议。网络协议是计算机网络中&#xff0c;为了使不同设备之间能够准确、高效地进行数据交换和通信&#xff0c;而预先制定的一…

通过docker create与export来分析诊断故障镜像

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

LINUX419 更换仓库(没换成)find命令

NAT模式下虚拟机需与网卡处在同一个网段中吗 和VM1同个网段 会不会影响 这个很重要 是2 改成点2 倒是Ping通了 为啥ping百度 ping到别的地方 4399 倒是ping通了 准备下载httpd包 下不下来 正在替换为新版本仓库 报错 failure: repodata/repomd.xml from local: [Er…

鸿蒙学习笔记(5)-HTTP请求数据

一、Http请求数据 http模块是鸿蒙内置的一个模块&#xff0c;提供了网络请求的能力。不需要再写比较原始的AJAS代码。 ps:在项目中如果要访问网络资源&#xff0c;不管是图片文件还是网络请求&#xff0c;必须给项目开放权限。 &#xff08;1&#xff09;网络连接方式 HTTP数…

Spark-SQL核心编程

Spark-SQL核心编程 数据加载与保存 加载数据 spark.read.load 是加载数据的通用方法。如果读取不同格式的数据&#xff0c;可以对不同的数据格式进行设定 保存数据 df.write.save 是保存数据的通用方法。如果保存不同格式的数据&#xff0c;可以对不同的数据格式进行设定 …

LVGL源码(9):学会控件的使用(自定义弹窗)

LVGL版本&#xff1a;8.3 LVGL的控件各式各样&#xff0c;每种控件都有自己的一些特性&#xff0c;当我们想要使用一个LVGL控件时&#xff0c;我们首先可以通过官网去了解控件的一些基本特性&#xff0c;官网链接如下&#xff1a; LVGL Basics — LVGL documentation&#xf…

8、表单控制:预言水晶球——React 19 复杂表单处理

一、水晶球的预言本质 "每个表单都是时空裂缝中的预言容器&#xff0c;"占卜课教授特里劳妮凝视着水晶球&#xff0c;"React-Hook-Form与Formik的融合&#xff0c;让数据捕获如同捕捉未来碎片&#xff01;" ——以魔法部神秘事务司的预言厅为隐喻&#xf…

8 编程笔记全攻略:Markdown 语法精讲、Typora 编辑器全指南(含安装激活、基础配置、快捷键详解、使用技巧)

1 妙笔在手&#xff0c;编程无忧&#xff01; 1.1 编程为啥要做笔记&#xff1f;这答案绝了&#xff01; 嘿&#xff0c;各位键盘魔法师&#xff01;学编程不记笔记&#xff0c;就像吃火锅不配冰可乐 —— 爽到一半直接噎住&#xff01;你以为自己脑子是顶配 SSD&#xff0c;结…

Linux(autoDL云服务器)mamba-ssm环境安装——一次成功!

1.创建环境选择torch2.0&#xff0c; cuda11.8&#xff0c;python3.8 2.从GitHub官网下载cp38对应的&#xff0c;causl_conv1d&#xff0c;和mamba-ssm2.2.2。下载入下图所示。 3.直接用finalshell 或者xshell连接服务器上传&#xff0c;到根目录下面。 直接用pip install *…

代码审计入门 原生态sql注入篇

前置知识&#xff1a; 漏洞形成的原因&#xff1a; 1、可控的参数 2、函数缺陷 代码审计的步骤&#xff1a; 1、全局使用正则搜索 漏洞函数 &#xff0c;然后根据函数看变量是否可控&#xff0c;再看函数是否有过滤 2、根据web的功能点寻找函数&#xff0c;然后根据函数看…

spring Ai---向量知识库(一)

在一些垂直领域以及公司内部信息相关或者实时性相关的大模型应用&#xff0c;就无法直接使用chatGPT。 这个时候&#xff0c;向量知识库就进入了。 通过坐标向量最接近的即为匹配相关答案。 向量模型定义&#xff1a;将文档向量化&#xff0c;保证内容越相似的文本&#xff0c;…

jmeter利用csv进行参数化和自动断言

1.测试数据 csv测试数据如下&#xff08;以注册接口为例&#xff09; 2.jemer参数化csv设置 打开 jmeter&#xff0c;添加好线程组、HTTP信息头管理器、CSV 数据文件设置、注册请求、响应断言、查看结果树 1&#xff09; CSV 数据文件设置 若 CSV 中数据包含中文&#xff0c;…

数据结构实验7.2:二叉树的基本运算

文章目录 一&#xff0c;实验目的二&#xff0c;问题描述三&#xff0c;基本要求四&#xff0c;实验操作五&#xff0c;示例代码六&#xff0c;运行效果 一&#xff0c;实验目的 深入理解树与二叉树的基本概念&#xff0c;包括节点、度、层次、深度等&#xff0c;清晰区分二叉…

Go-zero框架修改模版进行handler统一响应封装

使用go-zero快速生成接口的时候&#xff0c;发现还是有一些情况不太好处理&#xff0c;比如说&#xff0c;想要自定义响应封装等等。 最开始第一版写api文件的时候&#xff0c;写法是这样的。 type LoginRequest {UserName string json:"userName"Password string …

AI专题(一)----NLP2SQL探索以及解决方案

前面写了很多编码、算法、底层计算机原理等相关的技术专题&#xff0c;由于工作方向调整的缘故&#xff0c;今天开始切入AI人工智能相关介绍。本来按照规划&#xff0c;应该先从大模型的原理开始介绍会比较合适&#xff0c;但是计划赶不上变化&#xff0c;前面通用大模型的工作…

深入理解 React Hooks:简化状态管理与副作用处理

在现代前端开发中&#xff0c;React 已经成为了最受欢迎的 JavaScript 库之一。随着 React 16.8 的发布&#xff0c;React Hooks 的引入彻底改变了开发者编写组件的方式。Hooks 提供了一种更简洁、更直观的方式来管理组件的状态和副作用&#xff0c;使得函数组件能够拥有类组件…

Java 动态代理实现

Java 动态代理实现 一、JDK动态代理二、CGLIB动态代理三、动态代理的应用场景四、JDK代理与CGLIB代理比较 动态代理是Java中一种强大的技术&#xff0c;它允许在运行时创建代理对象&#xff0c;用于拦截对目标对象的方法调用。 一、JDK动态代理 JDK动态代理是Java标准库提供的代…

人脸扫描黑科技:多相机人脸扫描设备,打造你的专属数字分身

随着科技的迅猛发展&#xff0c;人脸扫描这个词已经并不陌生&#xff0c;通过人脸扫描设备制作超写实人脸可以为影视制作打造逼真角色、提升游戏沉浸感&#xff0c;还能助力教育机构等领域生产数字人以丰富教学资源&#xff0c;还在安防、身份识别等领域发挥关键作用&#xff0…

基于Python的中国象棋小游戏的设计与实现

基于Python的中国象棋小游戏的设计与实现 第一章 绪论1.1 研究背景1.2 研究意义 第二章 需求分析2.1 需求分析2.1.1核心功能需求2.1.2 用户体验需求2.1.3 衍生功能需求 2.2 可行性分析2.2.1 技术可行性2.2.2 经济可行性2.2.3 市场可行性2.2.4 法律与合规性 第三章 概要设计3.1 …