1

は私のジオフェンスが正常に動作してそれ以外の場合は、他のすべての動作を停止に変更しました。私は私のジオフェンスを再登録しようとするところ は、ここでは放送受信機の私のコードです。?プロバイダで

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

public class LocationProviderChangedReceiver extends BroadcastReceiver implements GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener,ResultCallback<Status> { 
    int i=0; 
    protected GoogleApiClient mGoogleApiClient; 
    Geofence geofence; 
    Context context; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     i=i++; 
     this.context=context; 
     Toast.makeText(context,"Provider changed ,Geofencing restarted.",Toast.LENGTH_LONG).show(); 
     Log.wtf("senpai","oooooo"+i); 
     LatLng latLng=new LatLng(28.5795613,77.3136267); 

     geofence=new Geofence.Builder() 
       .setRequestId("x").setCircularRegion(latLng.latitude,latLng.longitude, Constants.GEOFENCE_RADIUS_IN_METERS) 
       .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS) 
       .setLoiteringDelay(500) 
       .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT|Geofence.GEOFENCE_TRANSITION_DWELL) 
       .build(); 

     mGoogleApiClient = new GoogleApiClient.Builder(context) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 

    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 
     try { 
      LocationServices.GeofencingApi.removeGeofences(mGoogleApiClient, getGeofencePendingIntent()).setResultCallback(this); // Result processed in onResult(). 
      LocationServices.GeofencingApi.addGeofences(mGoogleApiClient, getGeofencingRequest(), getGeofencePendingIntent()).setResultCallback(this); // Result processed in onResult(). 
     } catch (SecurityException securityException) { 
      // Catch exception generated if the app does not use ACCESS_FINE_LOCATION permission. 
     } 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 

    @Override 
    public void onResult(@NonNull Status status) { 

    } 

    private PendingIntent getGeofencePendingIntent() { 
     Intent intent = new Intent("ACTION_RECEIVE_GEOFENCE"); 
     // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when calling addgeoFences() 
     return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    } 

    private GeofencingRequest getGeofencingRequest() { 
     GeofencingRequest.Builder builder = new GeofencingRequest.Builder(); 
     builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER); 
     builder.addGeofence(geofence); 
     return builder.build(); 
    } 
} 

私の活動では、私は同じことをしました。私はどのように私のジオフェンシングを再開するのですか?実行している地理フェンスを維持するために

答えて

0

、あなたは(a)の場所プロバイダーの変更とも(b)は、デバイスの再起動時に再登録あなたの地理フェンスにあります。ここでは

は私の作業Geofencer例からいくつか抜粋しています、Googleがジオフェンシングを再生テストし、別のライブラリと比較した:

両方のイベントのためのマニフェストの放送受信機登録します(再)再で(あなたのジオフェンシングを開始することレシーバーを作成します

<!-- Listen for the device starting up for re-registration tasks --> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
... 
    <receiver 
     android:name=".geo.GeoRestartReceiver" 
     android:enabled="true" 
     android:exported="true"> 
     <intent-filter> 
      <category android:name="android.intent.category.DEFAULT" /> 

      <action android:name="android.intent.action.BOOT_COMPLETED" /> <!-- android.intent.action.LOCKED_BOOT_COMPLETED would be triggered earlier, in case we don't need access to credential secure storage --> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
      <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" /> 
      <action android:name="android.location.PROVIDERS_CHANGED" /> 
     </intent-filter> 
    </receiver> 

をジオフェンスリクエストを作成する:

public class GeoRestartReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (!GeoLocationUtil.isGpsEnabled(context) || !GeoLocationUtil.hasGpsPermissions(context)) 
      return; 

     GeofenceSettings settings = new GeofenceSettings(context); 
     if (!settings.isGeofencingActive()) { 
      return; 
     } 

     GeofenceProvider geofenceProvider = new PlayGeofenceProvider(context); 
     geofenceProvider.start(homeLocation, enterRadius, exitRadius, 
      initTrigger, usePolling); 
    } 
} 

ほとんどのGoogleジオフェンシングAPIロジックは、私のカスタムクラス内にカプセル化されています。ただ、詳細を見ることがGeofencerレポをチェックしてください。