2014-11-24 65 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(); 
    } 
相關問題