完整版:Android 实现隐私政策提示弹窗,确保用户隐私权的保护

访客 314 0

Android Studio版本:2021.2.1

例程名称:pravicydialog

编辑后的文案如下: 主要功能: 1. 启动应用时,会弹出隐私协议窗口。 2. 屏蔽返回键功能。 3. 再次启动应用时,不再显示隐私协议。

本例程的绝大部分代码源自以下链接,经过本人的修改和功能增强,因此不好意思宣称为完全原创。

下面这个例子展示了“正宗”app隐私协议的实现方法,而且协议内容采用了txt格式文件。据说如果使用html格式文件(webview),各大平台在审核时很可能无法通过。不过,协议内容还应该包含更详细的协议及说明的链接,我目前还没有添加进去,暂时还没学会如何操作。等我学会后再进行修改。

Android 实现隐私政策提示弹窗

感谢原作者!

立即展示代码:

MainActivity.java

/*完成日期:2023年1月28日功能:app协议页1、打开app弹出协议,禁止返回键取消显示。2、再次打开协议页不再弹出。 */package com.example.pravicydialog;import androidx.appcompat.app.AppCompatActivity;import android.app.AlertDialog;import android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.LayoutInflater;import android.view.View;import android.view.WindowManager;import android.widget.TextView;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;public class MainActivity extends AppCompatActivity {    Dialog dialog;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        PravicyCheck();    }    public void onClickAgree(View v)    {        dialog.dismiss();        //下面将已阅读标志写入文件,再次启动的时候判断是否显示。        this.getSharedPreferences("file", Context.MODE_PRIVATE).edit()                .putBoolean("AGREE", true)                .apply();    }    public void onClickDisagree(View v)    {        System.exit(0);//退出软件    }    public void showPrivacy(String privacyFileName){        String str = initAssets(privacyFileName);        final View inflate = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_privacy_show, null);        TextView tv_title = (TextView) inflate.findViewById(R.id.tv_title);        tv_title.setText("隐私政策授权提示");        TextView tv_content = (TextView) inflate.findViewById(R.id.tv_content);        tv_content.setText(str);        dialog = new AlertDialog                .Builder(MainActivity.this)                .setView(inflate)                .show();        // 通过WindowManager获取        DisplayMetrics dm = new DisplayMetrics();        getWindowManager().getDefaultDisplay().getMetrics(dm);        final WindowManager.LayoutParams params = dialog.getWindow().getAttributes();        params.width = dm.widthPixels*4/5;        params.height = dm.heightPixels*1/2;        dialog.setCancelable(false);//屏蔽返回键        dialog.getWindow().setAttributes(params);        dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);    }    /**     * 从assets下的txt文件中读取数据     */    public String initAssets(String fileName) {        String str = null;        try {            InputStream inputStream = getAssets().open(fileName);            str = getString(inputStream);        } catch (IOException e1) {            e1.printStackTrace();        }        return str;    }    public static String getString(InputStream inputStream) {        InputStreamReader inputStreamReader = null;        try {            inputStreamReader = new InputStreamReader(inputStream, "UTF-8");        } catch (UnsupportedEncodingException e1) {            e1.printStackTrace();        }        BufferedReader reader = new BufferedReader(inputStreamReader);        StringBuffer sb = new StringBuffer("");        String line;        try {            while ((line = reader.readLine()) != null) {                sb.append(line);                sb.append("\n");            }        } catch (IOException e) {            e.printStackTrace();        }        return sb.toString();    }    public void PravicyCheck(){        Boolean status =this.getSharedPreferences("file",Context.MODE_PRIVATE)                .getBoolean("AGREE",false);        if (status==true){        }else{            showPrivacy("privacy.txt");//放在assets目录下的隐私政策文本文件        }    }}

说明:

1、dialog.setCancelable(false); 禁用返回键

2、在文件中记录已阅读的标志,以便在下次启动时进行判断并决定是否显示。

分享一个SharedPreferences的工具类,方便保存数据。关于preferences的用法,请参见实现不同原理一样。

以下是改写后的代码块:

```java
SharedPreferences sharedPreferences = this.getSharedPreferences(file, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(AGREE, true);
editor.apply();
```

判断是否是第一次启动代码块。  
public void privacyCheck() {
    // Read flag
    Boolean status = this.getSharedPreferences(file, Context.MODE_PRIVATE)
            .getBoolean(AGREE, false);
    if (status == true) {
        // Your code here
    }
}  
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation==horizontal>

    <TextView
        android:id==@+id/textView2
        android:layout_width==wrap_content
        android:layout_height==w

改写为:

```xml


  
    
    

标签: 隐私 协议 政策 提示

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~