0

同じ機能を実行する 2 つの「ビューアー」アクティビティがありますが、1 つの従来のビューアーは、古い API をより適切にサポートしています。問題が発生した場合、ユーザーは設定で従来のビューアに切り替えることができます。

ビューアーを開くには、ギャラリー アクティビティを開くランチャーを使用する方法と、適切なビューアーに直接移動する VIEW インテントを使用する方法の 2 つがあります。

ビューアは外部アプリから直接呼び出すことができるため、表示するビューアを決定するロジックが必要です。「ViewerChooser」アクティビティの形でこれを行いました。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent viewer = new Intent();
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
    if (!settings.contains(FullSettingsActivity.KEY_UseLegacyViewer))
    {
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean(FullSettingsActivity.KEY_UseLegacyViewer, !Util.hasHoneycomb());
    }

    if(settings.getBoolean(FullSettingsActivity.KEY_UseLegacyViewer, false))
    {
        viewer.setClass(this, LegacyViewerActivity.class);
    }
    else
    {
        viewer.setClass(this, ImageViewerActivity.class);
    }

    viewer.setData(getIntent().getData());
    startActivityForResult(viewer, REQUEST_VIEWER);
}

/**
 * Simply forward on the result
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    setResult(resultCode, data);
    finish();
}

また、必要に応じて結果を転送します。これは機能しますが、アクティビティが一瞬空白の画面を表示するという点で少し不格好です。

動的に選択された 2 つの異なるアクティビティで同じ意図を処理するより良い方法はありますか?

4

2 に答える 2

0

アクティビティを使用して実行するその他のアクティビティを決定しているため、空白の画面が表示されます。VIEW インテント用のブロードキャスト レシーバーを登録して、そこから適切なアクティビティを起動してみませんか。

于 2013-08-29T18:19:11.297 に答える