2012-07-08 33 views
2

我正在爲Android編寫基於GPS的應用程序。我想要一個按鈕來退出應用程序,這將關閉GPS,但我不想回到家裏或關閉這個程序。退出Android應用程序按鈕 - 真的

我已閱讀This線程和許多其他人做了很好的解釋爲什麼我不想做我想做的事情。問題是,有後臺進程,如果我只是退出應用程序的箭頭,GPS仍在運行。我明白我可以用OnStop()或OnPause()來關閉它們,但是我不想要後退箭頭或回家來停止任何操作。我希望所有的GPS和處理程序繼續運行,無論用戶做什麼,除非他在我的主屏幕上點擊EXIT,然後將他帶到另一個確認退出並進行清理的屏幕。這樣,用戶可以將箭頭從退出屏幕退出,而不會在實際退出時被誤操作。

請注意,此應用程序將用於帶有手套的惡劣條件下的明亮陽光下。讀取任何東西非常困難,所以我使用高對比度的高對比度字體100。除非用戶真的希望它停止,否則它不能停下來。但讓它運行會殺死電池。我對系統的行爲沒有任何問題,如果我只是讓它運行,只是想到電池將耗盡,並且我不希望任何簡單的按鈕按下(這可能是偶然的),以停止服務。我希望它很難殺死這個應用程序後臺進程,因爲它是關閉手機,但我希望能夠做到這一點。

我試過完成(),這只是一個後退箭頭,以及我在過去三個小時的Google搜索中看到的其他所有方法。我曾考慮將我的EXIT按鈕更改爲關閉GPS按鈕,但如果用戶使用後退箭頭退出,他會進入主頁面並重新打開GPS。

只是要清楚。我的應用程序有一個基於菜單的主屏幕。如果後退箭頭被擊中,任何有用的頁面將返回到該菜單。其中一個菜單項是EXIT。點擊該菜單項會將您帶到一個退出屏幕,該屏幕上有一個顯示EXIT的按鈕。如果用戶偶然來到這裏,他可以退回到菜單。如果他點擊退出頁面上的EXIT按鈕,我可以關閉所有處理程序和GPS,然後進入手機或平板電腦主屏幕。至少這是我想要的,不知道該怎麼做。

我已經使用類似的應用程序,使用OnStop()或OnPause()來關閉GPS,他們是一個痛苦。這不是我想要的。請不要告訴我這就是我想要做的。我知道該怎麼做。這不是我所要求的。

謝謝。

UPDATE:

感謝Chris我幾乎解決了這一點。我可以把我的處理程序和GPS了與我的退出按鈕,然後運行該代碼

 Intent startMain = new Intent(Intent.ACTION_MAIN); 
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(startMain); 

更新#2 ,我只是在進一步的測試中發現的問題是,應用程序返回到屏幕上的退出時,它是要求第二次。

UPDATE#3 Adding finish();在startActivity(startMain)後似乎工作。完成後向後進入主菜單。希望一旦我安裝了所有的代碼,它仍然可以工作。我刪除了第三線之上所以我現在是這樣的:

 Intent startMain = new Intent(Intent.ACTION_MAIN); 
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startActivity(startMain); 
    finish(); 
+1

使用'onStop'和'onPause' ...大聲笑jk – 2012-07-08 17:09:04

+0

請看看我的答案。我認爲這比你一直在玩的解決方案簡單得多。 – 2012-07-08 19:53:19

回答

0

我曾經想過改變我的退出按鈕,將打開的GPS關閉按鈕,但隨後如果用戶使用後退箭頭退出他得到主頁面,然後打開GPS。

這是比嘗試「退出」過程更合適的解決方案的根源 - 您只需要處理意外重新激活。

  • 您可以在禁用GPS後自動發送HOME意圖。

  • 你可以覆蓋後面的按鈕,併發送一個HOME意圖,而不是(如果GPS關閉)。

  • 當你關掉GPS,以表明它應該是掉,然後檢查,在任何地方的活動,否則你將自動打開它,你可以在設置共享偏好的標誌。如果你發現GPS應該是關閉的,而不是你通常的選擇,只是顯示一個對話框,關閉GPS,詢問他們是否想要打開它,或者「退出」(即意圖到主屏幕)。

+0

我正要回答這個問題,但這非常覆蓋它。只是想補充一點,OP可能會發現導航應用作爲實現此行爲的有用指南。 – 2012-07-08 17:22:46

+0

那很簡單。很明顯,我的退出按鈕可以關閉GPS和處理程序,之後我使用此代碼跟隨HOME意圖。 '代碼'\t \t Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); – 2012-07-08 17:23:28

+0

@AllenEdwards和最後一件事......如果您退出應用程序的主要活動,「後退按鈕」將結束任務......所以我真的認爲,如果您希望應用的導航與其他Android應用保持一致,你應該讓它禁用GPS(即在你的主要活動的'onDestroy'方法中禁用GPS)。您可以通過重寫'onBackPressed'來提供確認對話框,以便用戶知道該任務將被終止。再次,您可以查看導航應用程序的指導。 – 2012-07-08 17:29:33

1

有一個非常簡單的方法來解決這個問題。如果用戶想退出,你的主要問題是你需要EXIT活動不能返回MAIN活動(即:用戶退出後,活動棧應該是空的)。

使用startActivityForResult()讓MAIN活動調用EXIT活動。如果用戶真的想退出,EXIT活動可以返回RESULT_OK,如果用戶使用BACK按鈕返回,它將返回RESULT_CANCELED

然後MAIN活動在onActivityResult()中得到結果,如果用戶真的想要退出,或者只是在用戶取消退出時不做任何事情,則可以調用finish()

如果用戶想要退出,這將導致活動堆棧被完全清除,以便下次用戶啓動應用程序時,它將進入MAIN活動。

相關問題