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
还木有评论哦,快来抢沙发吧~