2014-11-04 51 views
11

我正試圖通過編寫一個GPS跟蹤服務將GPS跟蹤功能添加到我的應用程序。我一直在關注如何通過Google Play服務完成此操作的Android開發者材料,但我堅持使用onConnectionFailed方法。我正在嘗試撥打startResolutionForResult讓Google Play服務處理該錯誤。然而,這種方法要求一個活動作爲第一個參數傳入,並且由於我從服務中調用它,所以我不確定我該怎麼做。Android:我如何從服務調用startResolutionForResult?

我假設我正在談論這一切都是錯誤的,並且存在一種完全不同的方式來處理服務。

回答

1

Google Play服務的身份驗證過程需要一個活動,因爲它可能需要向用戶顯示UI。由於服務沒有UI,因此您需要向活動發送消息以建立連接,然後服務才能繼續。有一個很好的答案可以說明一種方法:Example: Communication between Activity and Service using Messaging

+1

這種奇怪的解決方案。正如它在googleIO2015上宣佈的那樣,用戶可以禁用某些權限。以及服務應該如何爲用戶顯示UI對話框?有點奇怪。 – ruX 2015-06-02 14:16:25

+0

M中的新功能很可能會改變這種行爲。敬請關注! – 2015-06-02 17:42:50

+0

@ClaytonWilkinson如何正確地做到這一點?我應該只是將消息中的'ConnectionResult'傳遞給活動,然後將活動調用'startResolutionForResult'?是否會連接服務使用的API客戶端,或者服務是否應該在以後調用'connect()'。另外,我可以確定這不會將Activity泄漏到服務使用的API連接? – tron 2015-12-23 19:33:02

1

您可以使用Status.getResolution()並使用它啓動Activity。例如:

在服務

PendingIntent pI = status.getResolution(); 
mGoogleApiClient.getContext().startActivity(new Intent(mGoogleApiClient.getContext(), SomeActivity.class) 
.putExtra("resolution", pI).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); 

在活動的onCreate:

PendingIntent pI = (PendingIntent) (getIntent().getParcelableExtra("resolution")); 
startIntentSenderForResult(pI.getIntentSender(),1,null,0,0,0); 

還添加onActivityResult(INT requestCode,INT發送resultCode,意圖數據)接收分辨率的結果