gpt4 book ai didi

android - 无法使用 Chooser 使 startActivity() 每个应用只询问一次

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:56:27 33 4
gpt4 key购买 nike

当您使用选择器执行 startActivity() 时,Android 会列出所有有权处理您的 Intent 的应用,以及将此分配设置为永久或一次性(开启ICS 它的 AlwaysJust once 操作按钮,在 2.x 上它是一个复选框)。但是对于这段代码:

public class Redirector {
public static void showActivityWithChooser( Context context, int chooserLabelTitleId, Intent intent ) {
try {
context.startActivity( Intent.createChooser( intent,
context.getResources().getString( chooserLabelTitleId )) );
} catch( Exception e ) {
e.printStackTrace();
}
}

public static void viewInExternalApplication( Context context, String url ) {
Intent intent = new Intent( Intent.ACTION_VIEW );
intent.setData( Uri.parse( url ) );
intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET );
showActivityWithChooser( context, R.string.open_chooser_title, intent );
}
}

我看不到总是|只有一次 按钮,不能使我的选择永久化。我忽略了哪些基本要素导致 Android 无法让用户选择持久化?

看图片:左边的对话框是我想看到的,右边的是我现在得到的(两个对话框中不同数量的应用程序无关紧要):

enter image description here

最佳答案

郑重声明 - 这是(我的)错误的过度解释类型。我使用的选择器正是右侧图像中可以看到的。它一直出现,因为...我一直在调用它。我错误地认为选择器提供 Always | Just once 功能,如果用户点击“Always”则不会显示(如果他/她使用 Just once 则会显示)。但这是错误的。选择器将始终出现,因为这是它的作用 - 让用户选择。

总是| Just once 功能是不同的东西 -> 它是 startActivity()(和 startActivityForResult() 等)Android 框架的一个功能,它会显示出来在需要时自动(当有多个应用程序,或者准确地说,多个应用程序 list 中声明的​​匹配 intent-filter 匹配特定 Intent 时)。如果你只有一个(或者如果用户已经选择了Always),它就不会出现。

因此,作为开发人员,您无需关心或以任何特殊方式处理该案例。为了解决这个问题,我只是将我的 viewInExternalApplication() 代码更改为只调用 startActivity():

try {
context.startActivity( intent );
} catch (.... )

让框架完成剩下的工作。

关于android - 无法使用 Chooser 使 startActivity() 每个应用只询问一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12780820/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com