我有两个执行相同功能的“查看器”活动,但其中一个(旧版查看器)对旧版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();
}
如果需要,它还会将结果转发回去。这是功能性的,但有点笨拙,因为活动将瞬间显示一个空白屏幕。
有没有更好的方法来完成动态选择的两个不同活动处理相同的意图?
答案 0 :(得分: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
}
答案 1 :(得分:0)
您将获得空白屏幕,因为您正在使用“活动”来决定要运行哪个“其他活动”。为什么不尝试为VIEW意图注册广播接收器并从那里启动相应的活动。