0

我有两个执行相同功能的“查看器”活动,但一个是旧查看器,它对旧 API 有更好的支持。如果遇到问题,用户可以在设置中切换到旧版查看器。

有两种方法可以打开查看器,或者通过启动器打开画廊活动,或者通过直接进入适当查看器的 VIEW 意图。

由于可以直接从外部应用程序调用查看器,因此需要有逻辑来决定显示哪个查看器。我以“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();
}

如果需要,它还会将结果转发出去。这是功能性的,但有点笨拙,因为活动将在一瞬间显示一个空白屏幕。

有没有更好的方法来处理动态选择的两个不同活动的相同意图?

4

2 回答 2

0

您可以在您的onClick方法或用于启动活动的任何方法中执行此操作:

int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.FROYO){
    // Do something for froyo and above versions
} else{
    // do something for phones running an SDK before froyo
}
于 2013-08-29T11:28:14.733 回答
0

由于您正在使用 Activity 来决定要运行哪个 OTHER Activity,因此您会看到空白屏幕。为什么不尝试为 VIEW 意图注册广播接收器并从那里启动适当的活动。

于 2013-08-29T18:19:11.297 回答