2016-07-28 13 views
2

GoogleApiClientを使用して、ブート時に開始されるサービス上の位置をAndroid BroadcastReceiverから聞き、android.intent.action.BOOT_COMPLETEDを待ちます。私が使用するサービスでサービスで接続されていないGoogleApiClientが起動時に起動しました

@Override 
    public void onReceive(Context context, Intent intent) { 
     Intent serviceA = new Intent(context, ServiceA.class); 
     startWakefulService(context, serviceA); 
    } 

mGoogleApiClient = new GoogleApiClient.Builder(ServiceB.this) 
     .addConnectionCallbacks(mConnectionCallbacks) 
     .addOnConnectionFailedListener(mOnConnectionFailedListener) 
     .addApi(LocationServices.API).build(); 
    mGoogleApiClient.connect(); 

サービスがブート時に起動しますが、私の問題はmConnectionCallbacksもmOnConnectionFailedListenerでもないが、これまでと呼ばれているということです。

私がやっていることに何か問題がありますか? GoogleApiClientを呼び出すこの方法は、アクティビティで開始するときや、アクティビティで開始したサービスでうまく動作します。

答えて

0
import com.google.android.gms.common.ConnectionResult; 

import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.location.LocationServices; 

public class YourActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

protected GoogleApiClient mGoogleApiClient; 

@Override 
public void onCreate() { 
mGoogleApiClient = new GoogleApiClient.Builder(this) 
.addConnectionCallbacks(this) 
.addOnConnectionFailedListener(this) 
.addApi(LocationServices.API) 
.build(); 
} 


@Override 
protected void onStart() { 
super.onStart(); 


ConnectivityManager cm = 
(ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 

NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
boolean isConnected = activeNetwork != null && 
activeNetwork.isConnectedOrConnecting(); 


if (isConnected) { 


mGoogleApiClient.connect(); 

} 

} 


/** 
* Runs when a GoogleApiClient object successfully connects. 
*/ 
@Override 
public void onConnected(Bundle connectionHint) { 
//do your works here. it is connected now 
} 


@Override 
public void onConnectionSuspended(int cause) { 
    // The connection to Google Play services was lost for some reason. We call connect() to 
    // attempt to re-establish the connection. 


    mGoogleApiClient.connect(); 
} 


@Override 
public void onConnectionFailed(ConnectionResult result) { 
    // Refer to the javadoc for ConnectionResult to see what error codes might be returned in 
    // onConnectionFailed. 


} 
+0

がNetworkInfoにも依存の場所に関連する方法はありますか?ありがとうこれはオフラインでも機能しますか? – buzoherbert

+0

@buzoherbertこのメソッドは、アンドロイドによって正式に推奨されています。https://github.com/googlesamples/android-play-location/tree/master/BasicLocationSampleこれはGoogleのプレイサービスに基づいています。私はインターネット接続が生きているかどうかをチェックするためだけにネットワーク情報を使用しました。あなたはそれを無視することができます...ありがとう –

+0

ありがとう、しかし、これは私の質問に対処していません。私は同じ実装を持っていますが、起動時に起動するサービス上にあります。それがうまくいかない場所です。 – buzoherbert

関連する問題