java - 如何仅在某些情况下设置 Activity 无历史参数?

标签 java android themes

我有以下配置,我有一个应用程序是主应用程序,另一个应用程序被视为第一个应用程序的主题。如果没有第一个应用程序,第二个应用程序将无法运行。

现在,我必须处理两种情况:

用户安装了第二个应用程序,而他已经安装了第一个主应用程序

用户安装了第二个应用,但他没有第一个主应用

  1. 在第一种情况下,当用户运行second app (Theme)时,我想将他重定向到first app (Main),因为它已经安装。在这种情况下,我想从堆栈中删除第二个应用程序(主题) 的 Activity 。因此,如果用户按回键,它将返回到 android 桌面,而不是第二个(主题)应用。在这种情况下,用户应该不知道中间有一个 Activity 。

  2. 在第二种情况下,我想运行第二个应用(主题) 的 Activity 。此 Activity 有一个按钮,可将用户重定向到 Google Play 并安装第一个应用(主要)。在这种情况下,如果用户决定按下后退按钮,他将从 google play 返回到第二个应用程序(主题) 的 Activity ,因此在这种情况下,我希望用户看到此 Activity 并且它应该位于堆栈中,而不是第一种情况。

这是我当前的 Activity 代码:

public class MainActivity extends Activity {

private Context mContext;
private RelativeLayout rlShareAndWin;
private TextView tvInPrizeTitle, tvPrizeDesc;
private boolean isCorrespondingKiboAppInstalled;
private String kiboAppPackageName;

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

    initControllers();

    initControllerListeners();
}

@Override
protected void onResume() {
    super.onResume();
    String themePackageName = getPackageName();
    kiboAppPackageName = themePackageName.substring(0, ( themePackageName.indexOf(getResources().getString(R.string.theme_away_suffix_string))));
    boolean isCorrespondingKiboAppInstalled = isKiboAppInstalledOrNot(kiboAppPackageName);
    if (isCorrespondingKiboAppInstalled) {
        Intent launchIntent = getPackageManager().getLaunchIntentForPackage(kiboAppPackageName);
        //launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        //launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(launchIntent);
    }
}

private void initControllers() {
    mContext = this;
    Typeface typeface = Typeface.createFromAsset(getAssets(), "Helvetica LT 97 Black Condensed Oblique_0.ttf");

    setContentView(R.layout.layout_activity_main);

    rlShareAndWin = (RelativeLayout) findViewById(R.id.rlShareAndWin);
    tvInPrizeTitle = (TextView) findViewById(R.id.tvInPrizeTitle);
    tvPrizeDesc = (TextView) findViewById(R.id.tvPrizeDesc);

    tvInPrizeTitle.setTypeface(typeface);
    tvPrizeDesc.setTypeface(typeface);
}

private void initControllerListeners() {
    rlShareAndWin.setOnClickListener(OnClickShareAndWin);
}

private View.OnClickListener OnClickShareAndWin = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        goToPlayStoreToInstallKiboApp(kiboAppPackageName);
    }
};

private void goToPlayStoreToInstallKiboApp(String aKiboAppPackageName) {
    launchGooglePlayWithPackage(mContext, aKiboAppPackageName);
}

public void launchGooglePlayWithPackage(Context aContext, String packageName) {
    try {
        aContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)));
    } catch (android.content.ActivityNotFoundException anfe) {
        aContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageName)));
    }
}

private boolean isKiboAppInstalledOrNot(String uri) {
    PackageManager pm = getPackageManager();
    boolean appInstalled = false;
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        appInstalled = true;
    }
    catch (PackageManager.NameNotFoundException e) {
        appInstalled = false;
    }
    return appInstalled ;
}
}

你可以看到我尝试设置:

launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);,

launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

为了在安装主应用程序时启动主应用程序。但这些都不能帮助我实现我想要的。

最佳答案

在执行 startActivity() 之后调用 finish() 以从堆栈中删除之前的 Activity 。

像这样:

 if (isCorrespondingKiboAppInstalled) {
        Intent launchIntent = getPackageManager().getLaunchIntentForPackage(kiboAppPackageName);
        startActivity(launchIntent);
        finish();
    }

关于java - 如何仅在某些情况下设置 Activity 无历史参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27102679/

相关文章:

jQuery 对话框主题和样式

java - 是否可以从 ImmutableMultimap.keys() 中删除方括号

java - 如何使用 selenium webdriver 检查 webtable 中的 webelements 按字母顺序排序?

Android mask 图像

android - ListView 问题 - 如何将图像从 drawable 放入 listView

android - 从 Proximity IntentReceiver 发送短信

java - 什么是 .lck 文件?为什么我无法使用缓冲读取器读取它?

java - 当我尝试关闭 MySQL 连接时出错

css - Joomla 中的单个页面与其他页面具有不同的站点 Logo

themes - 如何在新的未保存窗口上更改 Notepad++ 丑陋的背景颜色