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

时间:2012-10-08 11:28:28

标签: android android-intent

当您使用选择器执行startActivity()时,Android会列出所有有权处理您Intent的应用以及将此分配设置为永久或一次性的选项(在ICS上为“始终”和“只是”一旦“动作按钮,在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 );
    }
}

我看不到“Always | Just once”按钮,并且无法使我的选择永久化(我只列出了应用程序,并且可以通过点击它来解雇)。我忽略了什么基本原因让Android无法让用户选择持久?

请参阅图片:左边的对话框是我想看到的,但正确的是我现在得到的(两个对话框中不同数量的应用程序无关):

enter image description here

1 个答案:

答案 0 :(得分:16)

对于记录 - 它是过度解释类型的bug(我的)。我正在使用的选择器正是在右侧图像上可以看到的。它一直出现,因为......我一直在呼唤它。我错误地认为选择器提供“Always | Just once”功能,如果用户点击“Always”(并且将显示他/她是否使用“Just once”),则不会显示。但这是错误的。 Chooser将始终显示,因为它的作用是让用户选择。 “Always | Just once”功能是不同的 - 它是startActivity()startActivityForResult()调用的Android框架的功能,并且会在需要时自动显示 - 如果有多个应用程序(或精确地) ,可以处理某些Intent的多个匹配intent-filter)。如果您只有一个(或用户之前点击“始终”),它将不会显示。你,作为开发人员不需要关心。

为了解决这个问题,我刚刚更改了我的viewInExternalApplication()代码,只需拨打startActivity()

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

让框架完成剩下的工作。