2012-09-12 36 views
1

考慮以下代碼片段,提示用戶評級市場上的應用:無法啓動的市場活動與CLEAR_TOP標誌

private void backToMainActivity() { 
    Intent i = new Intent(mActivity, MainActivity.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    mActivity.startActivity(i); 

    mActivity.finish(); 
} 

... 

if (mRateToast.leftClicked(x, y)) { 
    setRate(true); 

    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + GameGlobals.PACKAGE_NAME)); 
    i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_NEW_TASK); 
    mActivity.startActivity(i); 

    backToMainActivity(); 
} else if (mRateToast.rightClicked(x, y)) { 
    setRate(false); 
    backToMainActivity(); 
} 

這樣做是檢測按下(速率或更高版本)什麼按鈕,設置一個相應地標記並在需要時運行市場應用程序。無論按下哪個按鈕,我都想回到主菜單(這是一項遊戲活動,遠離主菜單活動的一項活動)。

在Android 4.1上,這個工作正常 - 市場打開應用程序的頁面,並從市場返回,我在主菜單上。在Android < = 2.3,市場不開放,我只是直接返回到主菜單。但是,如果我在backToMainActivity方法中評論i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);,則會打開。這會導致其他問題,例如後退按鈕會返回到錯誤的活動狀態,而不是退出應用程序,所以不是解決方案。

如何運行市場,返回主菜單並讓主菜單活動位於活動堆棧頂部?

注意:我還沒有嘗試過,但刪除finish也不是一個真正的選擇。我的遊戲活動也可以直接由外部應用程序啓動,在這種情況下,如果我刪除finish呼叫,出於某種原因CLEAR_TOP將不起作用,並且按主菜單活動上的後退按鈕將返回到遊戲活動,而不是退出應用程序。

回答

0

我通過刪除Intent.FLAG_ACTIVITY_NEW_TASK和使用startActivityForResult作爲他的答案通過MoshErsan描述的解決了這個。顯然,作爲一項新任務開始市場並不適用於Android < = 2.3中的CLEAR_TOP

如果有人能解釋爲什麼原始方法不起作用或提供更好的解決方案,我會在一兩天內接受答案,如果不是,我會接受我的答案。

0

試試這個

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + GameGlobals.PACKAGE_NAME)); 
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_NEW_TASK); 
mActivity.startActivityForResult(i,1552); 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode==1552){ 
     backToMainActivity(); 
    } 
} 
+0

不幸的是:它回到主菜單,但市場並未打開。 2.1:'09-13 20:04:19.983:WARN/ActivityManager(2233):HistoryRecord的重複結束請求{47eba9f0 my.app.package/.GameActivity}' – IVlad

+0

remove'mActivity.finish ();'from'backToMainActivity();' –

+0

我在OP的最後解釋了爲什麼我不能這麼做。這不是一種選擇,除非當遊戲活動直接從外部應用程序啓動時,您可以建議替代「CLEAR_TOP」。 – IVlad