13

当您startActivity()使用选择器时,Android 会列出所有有权处理您的应用程序Intent以及将此分配设置为永久或一次性的选项(在 ICSAlwaysJust 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 );
    }
}

我看不到任何Always | Just once按钮,也无法使我的选择永久化。我忽略了什么使 Android 无法让用户选择持久化?

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

在此处输入图像描述

4

1 回答 1

21

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

功能是不同的Always | Just once东西->它是startActivity()startActivityForResult()等)的Android框架的一项功能,它会在需要时自动显示(当有多个应用程序,或者确切地说,intent-filter应用程序清单中声明的​​多个匹配项时,匹配一定Intent)。如果您只有一个(或者如果用户已经选择Always),它将不会显示。

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

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

让框架完成其余的工作。

于 2012-10-08T11:52:28.477 回答