我有两个执行相同功能的“查看器”活动,但一个是旧查看器,它对旧 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();
}
如果需要,它还会将结果转发出去。这是功能性的,但有点笨拙,因为活动将在一瞬间显示一个空白屏幕。
有没有更好的方法来处理动态选择的两个不同活动的相同意图?