2014-11-04 14 views
11

GPS izleme hizmeti yazarak uygulamanıza GPS izleme işlevi eklemeye çalışıyorum. Google Play Hizmetleri aracılığıyla bunun nasıl yapılacağı konusunda Android Geliştirici materyallerini takip ediyorum, ancak onConnectionFailed yönteminde takılıyorum. Google Play Hizmetleri'nin hatayı işlemesine izin vermek için startResolutionForResult numaralı telefonu aramaya çalışıyorum. Ancak bu yöntem, bir etkinliğin ilk parametre olarak geçmesini gerektirir ve bunu bir Hizmet'ten çağırdığımdan, ne yapmam gerektiğinden emin değilim.Android: Bir hizmetten startResolutionForResult öğesini nasıl arayabilirim?

Bunu yanlış anladığımı ve bunun bir servisle baş etmenin tamamen farklı bir yolu olduğunu varsayalım.

cevap

1

Google Play Hizmetleri için kimlik doğrulama işleminin kullanıcı için UI'yi görüntülemesi gerekebileceğinden dolayı bir etkinliğe ihtiyacı vardır. Hizmetlerin kullanıcı arabirimi olmadığından bağlantıyı kurmak için bir etkinliğe ileti göndermeniz gerekir, ardından hizmet devam edebilir. Bunu yapmanın bir yolunu gösteren iyi bir yanıt var: Example: Communication between Activity and Service using Messaging

+1

Böyle garip bir çözüm. GoogleIO2015'te duyurulduğu gibi, kullanıcı bazı izinleri devre dışı bırakabilir. Hizmet kullanıcı için UI iletişimini nasıl göstermeli ?! Bu garip. – ruX

+0

M'deki yeni işlevler büyük olasılıkla bu davranışı değiştirecektir. Bizi izlemeye devam edin! –

+0

@ClaytonWilkinson Bunu nasıl düzgün yapıyoruz? Etkinliğe bir mesajda 'ConnectionResult' iletisini ve ardından startResolutionForResult' etkinlik çağrısında mı geçmeli? Servis tarafından kullanılan API istemcisini bağlar mı, yoksa daha sonra “connect()” servis çağrısı yapmalıdır. Ayrıca, bu işlemin Hizmet tarafından kullanılan API bağlantısına sızmadığından emin olabilir miyim? – tron

1

Status.getResolution()'ı kullanabilir ve bununla Etkinleştir'i başlatabilirsiniz. Hizmet Aktivite onCreate yılında

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

yılında

: Örneğin:

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

da onActivityResult ekleyin (int requestCode, int ResultCode, Niyet verileri) çözünürlük sonucunu almak için