13

セレクターを使用すると、Android は、この割り当てを永続的または一度だけ設定するオプションと共に、startActivity()処理する資格のあるすべてのアプリを一覧表示します(ICSではアクション ボタン、2.x ではチェックボックス)。ただし、このコードの場合:IntentAlwaysJust once

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()(など)のAndroidフレームワークの機能であり、必要に応じて自動的に表示されます(アプリマニフェストで複数のアプリが宣言されてstartActivityForResult()いる場合、正確には、一致する複数の一致が宣言されている場合)intent-filterあるIntent)。1 つしか取得していない場合 (またはユーザーが既に を選択している場合Always) は表示されません。

したがって、開発者として、特別な方法でケースを気にしたり処理したりする必要はありません。この問題を解決するために、viewInExternalApplication()コードを単に呼び出すように変更しましたstartActivity():

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

残りはフレームワークに任せます。

于 2012-10-08T11:52:28.477 に答える