地理围栏转换后,我该如何在主 Activity 上做些什么?
After geofence transition how do i do something on main Activity?
当有人进入我的地理围栏之一时,我想在我的地图上显示一个布局并开始播放一些音频。
我一直在关注一些教程,我知道如何在它们进入时进行推送通知,但这一切都发生在另一个 IntentService class.
也许这就是 onResult 的用途?我不确定如何从结果参数中获取地理围栏信息
LocationServices.GeofencingApi.addGeofences(
gApiClient,
getGeofencingRequest(),
getGeofencePendingIntent()
).setResultCallback(this);
@Override
public void onResult(Result result) {
}
这是我的 intentService class
public class GeofenceTransitionsIntentService extends IntentService {
private final String TAG = "Geofence_transitions";
public GeofenceTransitionsIntentService() {
super("geo-service");
}
@Override
protected void onHandleIntent(Intent intent) {
GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
if (geofencingEvent.hasError()) {
String errorMessage = geofencingEvent.getErrorCode()+"";
Log.e(TAG, errorMessage);
return;
}
// Get the transition type.
int geofenceTransition = geofencingEvent.getGeofenceTransition();
// Test that the reported transition was of interest.
if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER ||geofenceTransition == Geofence.GEOFENCE_TRANSITION_DWELL ||
geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) {
// Get the geofences that were triggered. A single event can trigger
// multiple geofences.
ArrayList<Geofence> triggeringGeofences = (ArrayList<Geofence>) geofencingEvent.getTriggeringGeofences();
// Get the transition details as a String.
String geofenceTransitionDetails = getGeofenceTransitionDetails(
this,
geofenceTransition,
triggeringGeofences
);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_media_play)
.setContentTitle("Geofence!")
.setContentText(geofenceTransitionDetails);
mBuilder.setStyle(new NotificationCompat.BigTextStyle(mBuilder).bigText(geofenceTransitionDetails).setBigContentTitle("Big title")
.setSummaryText(geofenceTransitionDetails));
// Send notification and log the transition details.
int mNotificationId = 001;
NotificationManager mNotifyMgr =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(mNotificationId, mBuilder.build());
} else {
// Log the error.
Log.e(TAG, getString(R.string.geofence_transition_invalid_type,
geofenceTransition));
}
}
人们通常如何获取触发地理围栏的信息并在主线程上执行某些操作?
使用LocalBroadcastManager向任何必须监听事件的上下文发送广播。这是您应该在 Activity:
中执行的示例
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceBundle);
//Your code here
LocalBroadcastManager lbc = LocalBroadcastManager.getInstance(this);
GoogleReceiver googleReceiver = new GoogleReceiver(this);
lbc.registerReceiver(googleReceiver, new IntentFilter("googlegeofence"));
//Anything with this intent will be sent to this receiver
}
static class GoogleReceiver extends BroadcastReceiver{
MyActivity mActivity;
public GoogleReceiver(Activity activity){
mActivity = (MyActivity)activity;
}
@Override
public void onReceive(Context context, Intent intent) {
//Handle the intent here
}
}
}
这是您应该为您的 intentservice 写下的内容:
public class GeofenceTransitionsIntentService extends IntentService {
//Any stuff you need to do here
@Override
protected void onHandleIntent(Intent intent) {
GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
//Collect all the stuff you want to send to activity here
Intent lbcIntent = new Intent("googlegeofence"); //Send to any reciever listening for this
lbcIntent.putExtra("Key", Value); //Put whatever it is you want the activity to handle
LocalBroadcastManager.getInstance(this).sendBroadcast(lbcIntent); //Send the intent
}
当有人进入我的地理围栏之一时,我想在我的地图上显示一个布局并开始播放一些音频。 我一直在关注一些教程,我知道如何在它们进入时进行推送通知,但这一切都发生在另一个 IntentService class.
也许这就是 onResult 的用途?我不确定如何从结果参数中获取地理围栏信息
LocationServices.GeofencingApi.addGeofences(
gApiClient,
getGeofencingRequest(),
getGeofencePendingIntent()
).setResultCallback(this);
@Override
public void onResult(Result result) {
}
这是我的 intentService class
public class GeofenceTransitionsIntentService extends IntentService {
private final String TAG = "Geofence_transitions";
public GeofenceTransitionsIntentService() {
super("geo-service");
}
@Override
protected void onHandleIntent(Intent intent) {
GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
if (geofencingEvent.hasError()) {
String errorMessage = geofencingEvent.getErrorCode()+"";
Log.e(TAG, errorMessage);
return;
}
// Get the transition type.
int geofenceTransition = geofencingEvent.getGeofenceTransition();
// Test that the reported transition was of interest.
if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER ||geofenceTransition == Geofence.GEOFENCE_TRANSITION_DWELL ||
geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) {
// Get the geofences that were triggered. A single event can trigger
// multiple geofences.
ArrayList<Geofence> triggeringGeofences = (ArrayList<Geofence>) geofencingEvent.getTriggeringGeofences();
// Get the transition details as a String.
String geofenceTransitionDetails = getGeofenceTransitionDetails(
this,
geofenceTransition,
triggeringGeofences
);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_media_play)
.setContentTitle("Geofence!")
.setContentText(geofenceTransitionDetails);
mBuilder.setStyle(new NotificationCompat.BigTextStyle(mBuilder).bigText(geofenceTransitionDetails).setBigContentTitle("Big title")
.setSummaryText(geofenceTransitionDetails));
// Send notification and log the transition details.
int mNotificationId = 001;
NotificationManager mNotifyMgr =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(mNotificationId, mBuilder.build());
} else {
// Log the error.
Log.e(TAG, getString(R.string.geofence_transition_invalid_type,
geofenceTransition));
}
}
人们通常如何获取触发地理围栏的信息并在主线程上执行某些操作?
使用LocalBroadcastManager向任何必须监听事件的上下文发送广播。这是您应该在 Activity:
中执行的示例public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceBundle);
//Your code here
LocalBroadcastManager lbc = LocalBroadcastManager.getInstance(this);
GoogleReceiver googleReceiver = new GoogleReceiver(this);
lbc.registerReceiver(googleReceiver, new IntentFilter("googlegeofence"));
//Anything with this intent will be sent to this receiver
}
static class GoogleReceiver extends BroadcastReceiver{
MyActivity mActivity;
public GoogleReceiver(Activity activity){
mActivity = (MyActivity)activity;
}
@Override
public void onReceive(Context context, Intent intent) {
//Handle the intent here
}
}
}
这是您应该为您的 intentservice 写下的内容:
public class GeofenceTransitionsIntentService extends IntentService {
//Any stuff you need to do here
@Override
protected void onHandleIntent(Intent intent) {
GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
//Collect all the stuff you want to send to activity here
Intent lbcIntent = new Intent("googlegeofence"); //Send to any reciever listening for this
lbcIntent.putExtra("Key", Value); //Put whatever it is you want the activity to handle
LocalBroadcastManager.getInstance(this).sendBroadcast(lbcIntent); //Send the intent
}