Geo*_*cks 11 android android-navigation android-settings
由于 android 从 Android 设置导航回来的方式,我的用户体验不一致。
在我的应用程序中,用户需要授予我的应用程序访问权限ACTION_USAGE_ACCESS_SETTINGS,我通过以下方式访问:
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
在为我的应用程序将设置切换为打开后,我需要用户返回到我的应用程序。据我所知,这样做的唯一方法是让他们按下手机上的后退按钮(很想知道是否可以在切换设置后自动返回!!!?!)。
现在将发生两件事之一:
1) 用户最近没有使用android设置,所以它没有打开(即在打开的应用程序抽屉中打开)。第一次按下后退按钮将根据需要将它们带到我的应用程序。
2) 用户最近使用过安卓设置。因此设置已经在应用程序抽屉中打开。现在,当用户按下返回键时,Android 会将他们带回他们最近使用过的每个设置页面(即后退按钮带他们查看他们在 android 设置页面中的历史记录)。可能需要按 2、3 或 4 次后退按钮才能离开 Android 设置并返回到我的应用程序。这显然是糟糕的 UI/UX,我想知道是否有更好的方法?
我注意到在安装 Google 应用程序时,将设置切换为 ON 后,它会自动退出并返回到调用该设置的应用程序。能够做到这一点是理想的,但我无法解决。
谢谢!
好吧,在尝试了数百万件事之后,我想出了 3 种不同的方法来改善我的问题。
1)由@CommonsWare提供,通过删除FLAG_ACTIVITY_NEW_TASK,它可以防止所需的后退次数不一致,并且意味着每次用户只需按后退两次。
2)经过对标志的进一步研究,我发现结合使用三个:
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
将所需的后推次数减少为 1 次后推。这简单合理,用户友好。
3) 在设置意图触发后,使用处理程序持续检查所需的权限。这看起来有点像黑客,我不敢相信没有更好的方法来做到这一点,但它的工作原理与使用 Google 应用程序时的工作原理完全相同。即,一旦您将开关切换到打开位置,它就会退出 Android 设置页面,并返回到您上次中断的应用程序。我在用:
Handler handler = new Handler();
Runnable checkSettingOn = new Runnable() {
@Override
//@TargetApi(23)
public void run() {
Log.d(TAG, "run: 1");
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
Log.d(TAG, "run: 2");
return;
}
if (isAccessGranted()) {
Log.d(TAG, "run: 3");
//You have the permission, re-launch MainActivity
Intent i = new Intent(MainActivity.this, MainActivity.class);
Log.d(TAG, "run: 4");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
return;
}
handler.postDelayed(this, 200);
}
};
Run Code Online (Sandbox Code Playgroud)
然后,当您触发意图进入 Android 设置页面时,请确保启动处理程序:
handler.postDelayed(checkSettingOn, 1000);
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助其他遇到类似问题的人。
| 归档时间: |
|
| 查看次数: |
5419 次 |
| 最近记录: |