如何避免点击Android快捷方式创建新的应用程序实例并杀死旧的

时间:2013-08-29 13:30:07

标签: android shortcut launchmode

我通过以下代码创建了一个android快捷方式


    Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");                    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,getString(R.string.app_name));  
    Intent shortcutIntent = new Intent();
    shortcutIntent.setClassName(this,MainActivity.class.getName());
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    shortcut.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shortcut.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

    ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher);
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);
    sendBroadcast(shortcut);

当我打开我的应用程序,最后在某些活动中,如BActivity,然后我切换到主屏幕并单击快捷方式,应用程序来到MainActivity作为上面的代码,我是否有机会避免这种情况,只需让应用程序如果它已经创建,它会进入前景吗?

2 个答案:

答案 0 :(得分:3)

最后我找到了正确的方法来做到这一点,一句话这是android中的一个错误,可能会有一个解决方法

if(!isTaskRoot()){
    finish();
    return;
}

在LaucherClass的onCreate

中添加上面的代码

答案 1 :(得分:0)

您可以使用“共享首选项”执行此操作。

因此,在您想要自动重新启动的每项活动中:

@Override
protected void onPause() {
  super.onPause();
  SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
  Editor editor = prefs.edit();
  editor.putString("lastActivity", getClass().getName());
  editor.commit();

}

以及类似于以下内容的Dispatcher活动:

public class Dispatcher extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Class<?> activityClass;

    try {
        SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
        activityClass = Class.forName(
            prefs.getString("lastActivity", Activity1.class.getName()));
    } catch(ClassNotFoundException ex) {
        activityClass = Activity1.class;
    }

    startActivity(new Intent(this, activityClass));
}

}