如何询问用户我的应用会收集一些关于他使用情况的数据?

Posted

技术标签:

【中文标题】如何询问用户我的应用会收集一些关于他使用情况的数据?【英文标题】:How to ask user that my app will collect some data about his usage? 【发布时间】:2019-10-17 11:15:12 【问题描述】:

我希望当用户第一次启动应用程序时,会出现一个对话框,告诉用户应用程序将收集一些关于他/她的使用情况的数据,如果他/她按下接受,主要活动就会启动,并且永远不要再询问用户。

【问题讨论】:

使用权限developer.android.com/guide/topics/permissions/overview 【参考方案1】:

让我们将您的问题分解为较小的问题。您将需要以下活动:MainActivity 和 PermissionsActivity(添加一个 id 为“yes”的按钮和一个 id 为“no”的按钮。

A) 只启动一次活动。我们将使用 SharedPreferences 并存储一个布尔值来执行此操作,如果为 true,则表示对话先前已显示,否则表示未显示。

// In MainActivity.class

String MY_PREFS_NAME = "my_prefs"; // can be changed, but it must be done so everywhere
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
Boolean bool = prefs.getBoolean("hasbeenshown", false); 
if (!bool)
    // Go to the request dialogue activity
    Intent myIntent = new Intent(MainActivity.this, PermissionsActivity.class);
    startActivity(myIntent);

// otherwise, if bool = true, activity has been shown and there is no need to redirect

B) 如果用户回答,则重定向到 MainActivity 并存储回答。

// In PermissionsActivity.class

String MY_PREFS_NAME = "my_prefs"; // can be changed, but it must be done so everywhere
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
Button yes = (Button) findViewById(R.id.button1);
yes.setOnClickListener(new OnClickListener() 
    public void onClick(View v) 
        // Do stuff when they accept
        // ...

        // Store the answer
        store(true); // true means that user said yes
    
 );

Button no = (Button) findViewById(R.id.button1);
no.setOnClickListener(new OnClickListener() 
    public void onClick(View v) 
        // Do stuff when they !accept
        // ...

        // Store the answer
        store(false); // false means that user said no
    
);

void store(Boolean answer)
    // Store the answer
    editor.putBoolean("answer", answer);

    // Don't show the message again
    editor.putBoolean("hasbeenshown", true);

    // Store the previous edits
    editor.commit();

    // Redirect to MainActivity
    Intent myIntent = new Intent(PermissionsActivity.this, MainActivity.class);
    startActivity(myIntent);

C) 附录:您始终可以使用以下代码从任何活动中获取用户的回答。

String MY_PREFS_NAME = "my_prefs"; // can be changed, but it must be done so everywhere
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
Boolean yesorno = prefs.getBoolean("answer", false);  // false will be returned if user didn't answer or answered no; true will be returned if user answered yes

【讨论】:

以上是关于如何询问用户我的应用会收集一些关于他使用情况的数据?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法重新询问用户获取他的位置的权限,或者使用带有 javascript 的地理定位 API 删除旧设置?

您如何在没有用户共享/授予权限的情况下使用核心位置?

在不询问用户名和密码的情况下验证 Active Directory 用户

如何使用 useEffect 进行渲染?

如何最好地在 NHibernate 中检索和更新这些对象?

从 Facebook 群组收集数据