在 BroadcastReceiver 中使用 GeofencingApi 和 .setResultCallback()
Using GeofencingApi and .setResultCallback() in BroadcastReceiver
假设我的 Main Activity 中有一个 BroadcastReceiver,它实现了 GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,ResultCallback<Status>
.
现在,我想通过以下方式添加我的地理围栏:
LocationServices.GeofencingApi.addGeofences(mGoogleApiClient, getGeofencingRequest(),getGeofencePendingIntent()).setResultCallback(this);
但是,我得到一个错误,我不能在.setResultCallback
中使用this
,这可能与它在Broadcastreceiver中被调用有关。
由于正在 onResult()
中处理结果,我如何在 .setResultCallback
中获取 onResult()
?
我的广播接收器:
WakefulBroadcastReceiver mMessageReceiver = new WakefulBroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences mahprefs = PreferenceManager.getDefaultSharedPreferences(getApplication());
Integer radius = mahprefs.getInt("radiusnumber",500);
String lat = (String) intent.getExtras().get("Latitude");
String longi = (String) intent.getExtras().get("Longitude");
Double alt = intent.getDoubleExtra("Altitude", 0);
Boolean geofenceexists = mahprefs.getBoolean("geofenceexists",false);
Boolean scharf = mahprefs.getBoolean("scharf",false);
Float accuracys = intent.getFloatExtra("Accuracy", 0);
String providertype = intent.getStringExtra("Provider");
Number speed = intent.getFloatExtra("Speed", 0);
latText.setText(lat);
longText.setText(longi);
altitude.setText(String.valueOf(alt)+getString(R.string.meter));
accuracy.setText(String.valueOf(accuracys)+getString(R.string.meter));
lcprovidertype.setText(String.valueOf(providertype));
Float bearing = intent.getFloatExtra("Bearing", 0);
Log.v("INTENTgetextra", lat);
Log.v("INTENTgetextra", longi);
SharedPreferences.Editor editor = mahprefs.edit();
editor.putString("latitude", lat);
editor.putString("longitude", longi);
editor.putString("altitude", String.valueOf(alt));
editor.putString("speed", String.valueOf(speed));
editor.putString("bearing", String.valueOf(bearing));
editor.apply();
//Geofence Managment
if(scharf){
if(!geofenceexists){
mGeofenceList.add(new Geofence.Builder().setRequestId("alarmgeofence").setCircularRegion(Double.parseDouble(lat), Double.parseDouble(longi), radius)
.setExpirationDuration(Geofence.NEVER_EXPIRE)
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT)
.build());
LocationServices.GeofencingApi.addGeofences(mGoogleApiClient, getGeofencingRequest(),getGeofencePendingIntent()).setResultCallback(this);
Log.v("GEOFENCES",mGeofenceList.toString());
editor.putBoolean("geofenceexists",true);
editor.apply();
}
} else{
try {
mGeofenceList.removeAll(mGeofenceList);
LocationServices.GeofencingApi.removeGeofences(mGoogleApiClient, getGeofencePendingIntent()).setResultCallback(onResult(Status null); // Result processed in onResult().
editor.putBoolean("geofenceexists",false);
editor.apply();
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
在 activity onCreate:
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
我的 Activity:public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,ResultCallback<Status>
(是的,所有必要的方法都已导入)
我的进口商品:
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.Geofence;
import com.google.android.gms.location.GeofencingRequest;
import com.google.android.gms.location.LocationServices;
我了解到您的 MainActivity
实现了 ResultCallback
,因此您的代码应如下所示:
LocationServices.GeofencingApi.addGeofences(mGoogleApiClient, getGeofencingRequest(),getGeofencePendingIntent()).setResultCallback(MainActivity.this);
假设我的 Main Activity 中有一个 BroadcastReceiver,它实现了 GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,ResultCallback<Status>
.
现在,我想通过以下方式添加我的地理围栏:
LocationServices.GeofencingApi.addGeofences(mGoogleApiClient, getGeofencingRequest(),getGeofencePendingIntent()).setResultCallback(this);
但是,我得到一个错误,我不能在.setResultCallback
中使用this
,这可能与它在Broadcastreceiver中被调用有关。
由于正在 onResult()
中处理结果,我如何在 .setResultCallback
中获取 onResult()
?
我的广播接收器:
WakefulBroadcastReceiver mMessageReceiver = new WakefulBroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences mahprefs = PreferenceManager.getDefaultSharedPreferences(getApplication());
Integer radius = mahprefs.getInt("radiusnumber",500);
String lat = (String) intent.getExtras().get("Latitude");
String longi = (String) intent.getExtras().get("Longitude");
Double alt = intent.getDoubleExtra("Altitude", 0);
Boolean geofenceexists = mahprefs.getBoolean("geofenceexists",false);
Boolean scharf = mahprefs.getBoolean("scharf",false);
Float accuracys = intent.getFloatExtra("Accuracy", 0);
String providertype = intent.getStringExtra("Provider");
Number speed = intent.getFloatExtra("Speed", 0);
latText.setText(lat);
longText.setText(longi);
altitude.setText(String.valueOf(alt)+getString(R.string.meter));
accuracy.setText(String.valueOf(accuracys)+getString(R.string.meter));
lcprovidertype.setText(String.valueOf(providertype));
Float bearing = intent.getFloatExtra("Bearing", 0);
Log.v("INTENTgetextra", lat);
Log.v("INTENTgetextra", longi);
SharedPreferences.Editor editor = mahprefs.edit();
editor.putString("latitude", lat);
editor.putString("longitude", longi);
editor.putString("altitude", String.valueOf(alt));
editor.putString("speed", String.valueOf(speed));
editor.putString("bearing", String.valueOf(bearing));
editor.apply();
//Geofence Managment
if(scharf){
if(!geofenceexists){
mGeofenceList.add(new Geofence.Builder().setRequestId("alarmgeofence").setCircularRegion(Double.parseDouble(lat), Double.parseDouble(longi), radius)
.setExpirationDuration(Geofence.NEVER_EXPIRE)
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT)
.build());
LocationServices.GeofencingApi.addGeofences(mGoogleApiClient, getGeofencingRequest(),getGeofencePendingIntent()).setResultCallback(this);
Log.v("GEOFENCES",mGeofenceList.toString());
editor.putBoolean("geofenceexists",true);
editor.apply();
}
} else{
try {
mGeofenceList.removeAll(mGeofenceList);
LocationServices.GeofencingApi.removeGeofences(mGoogleApiClient, getGeofencePendingIntent()).setResultCallback(onResult(Status null); // Result processed in onResult().
editor.putBoolean("geofenceexists",false);
editor.apply();
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
在 activity onCreate:
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
我的 Activity:public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,ResultCallback<Status>
(是的,所有必要的方法都已导入)
我的进口商品:
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.Geofence;
import com.google.android.gms.location.GeofencingRequest;
import com.google.android.gms.location.LocationServices;
我了解到您的 MainActivity
实现了 ResultCallback
,因此您的代码应如下所示:
LocationServices.GeofencingApi.addGeofences(mGoogleApiClient, getGeofencingRequest(),getGeofencePendingIntent()).setResultCallback(MainActivity.this);