2014-11-24 55 views
2

我有以下配置,我有一个应用程序,它是主应用程序,另一个应用程序被认为是第一个应用程序的主题。没有第一个应用程序,第二个应用程序无法运行。现在如何仅在某些情况下设置活动无历史参数?

,我不得不面对两种情况:

用户安装第二应用,而他已经拥有了第一主要应用

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

  1. 在第一种情况下,当用户运行第二应用(主题),我想,因为它已经安装到他重定向到第一应用(主)。在这种情况下,我想从堆栈中删除第二个应用(主题)的活动。因此,如果用户按回来,它会返回到Android桌面而不是秒(主题)应用。在这种情况下,用户不应该意识到中间有一个活动。

  2. 在第二种情况下,我想运行第二个应用(主题)的活动。这项活动有一个按钮,重定向用户去谷歌播放和安装第一个应用程序(主)。在这种情况下,如果用户决定按后退按钮,他将从谷歌播放,回到第二个应用程序(主题)的活动,所以在这种情况下,我希望用户看到这个活动,它应该位于该堆栈与第一种情况相反。

这是我目前活动代码:

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); 

要启动的主要意图它的安装情况下的应用程序。但这些都不能帮助我实现我想要的。

+0

即使我很纳闷,呼吁结束,而你从App B就开始应用在一个第一种情况下不能正常工作? – Darpan 2014-11-24 11:21:30

+0

它的作品,由于某种原因,在我第一次尝试我得到了一些意外的行为.. – 2014-11-24 11:22:22

回答

3

呼叫finish()startActivity()后从堆栈中删除以前的活动。

像这样:

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