Created
January 11, 2021 08:43
-
-
Save edward1986/da86b8d401d698efc9ad9f3459683f45 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apply plugin: 'com.android.application' | |
android { | |
compileSdkVersion 29 | |
buildToolsVersion "29.0.3" | |
defaultConfig { | |
applicationId "com.example.geofencing" | |
minSdkVersion 16 | |
targetSdkVersion 29 | |
versionCode 1 | |
versionName "1.0" | |
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | |
multiDexEnabled true | |
} | |
buildTypes { | |
release { | |
minifyEnabled false | |
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' | |
} | |
} | |
} | |
dependencies { | |
implementation 'com.android.support:multidex:1.0.3' | |
implementation fileTree(dir: 'libs', include: ['*.jar']) | |
implementation 'androidx.appcompat:appcompat:1.2.0' | |
implementation 'androidx.constraintlayout:constraintlayout:2.0.4' | |
testImplementation 'junit:junit:4.12' | |
androidTestImplementation 'androidx.test.ext:junit:1.1.2' | |
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' | |
implementation 'com.google.android.gms:play-services:12.0.1' | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.geofencing; | |
import android.app.IntentService; | |
import android.content.Intent; | |
import android.widget.Toast; | |
import com.google.android.gms.location.Geofence; | |
import com.google.android.gms.location.GeofencingEvent; | |
public class GeofenceIntentService extends IntentService { | |
public GeofenceIntentService() { | |
super("GeofenceIntentService"); | |
} | |
@Override | |
protected void onHandleIntent(Intent intent) { | |
GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent); | |
if (geofencingEvent.hasError()) { | |
Toast.makeText(getApplicationContext(), "Geofence error code= " | |
+ geofencingEvent.getErrorCode(), Toast.LENGTH_SHORT).show(); | |
return; | |
} | |
int geofenceTransition = geofencingEvent.getGeofenceTransition(); | |
if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_DWELL) { | |
Toast.makeText(getApplicationContext(), "GEOFENCE_TRANSITION_DWELL", | |
Toast.LENGTH_SHORT).show(); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.geofencing; | |
import androidx.annotation.NonNull; | |
import androidx.appcompat.app.AppCompatActivity; | |
import androidx.core.app.ActivityCompat; | |
import android.app.PendingIntent; | |
import android.content.Intent; | |
import android.content.pm.PackageManager; | |
import android.os.Bundle; | |
import android.widget.Toast; | |
import com.google.android.gms.location.Geofence; | |
import com.google.android.gms.location.GeofencingClient; | |
import com.google.android.gms.location.GeofencingRequest; | |
import com.google.android.gms.location.LocationServices; | |
import com.google.android.gms.tasks.OnFailureListener; | |
import com.google.android.gms.tasks.OnSuccessListener; | |
import java.util.ArrayList; | |
import java.util.List; | |
public class MainActivity extends AppCompatActivity { | |
private final int MINIMUM_RECOMENDED_RADIUS = 100; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { | |
GeofencingClient geofencingClient = LocationServices.getGeofencingClient(this); | |
geofencingClient.addGeofences(createGeofencingRequest(), createGeofencePendingIntent()) | |
.addOnSuccessListener(this, new OnSuccessListener<Void>() { | |
@Override | |
public void onSuccess(Void aVoid) { | |
Toast.makeText(MainActivity.this, "onSuccess()", Toast.LENGTH_SHORT).show(); | |
} | |
}) | |
.addOnFailureListener(this, new OnFailureListener() { | |
@Override | |
public void onFailure(@NonNull Exception e) { | |
Toast.makeText(MainActivity.this, | |
"onFailure(): " + e.getMessage(), Toast.LENGTH_SHORT).show(); | |
} | |
}); | |
} else { | |
ActivityCompat.requestPermissions(this, | |
new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1); | |
} | |
} | |
private PendingIntent createGeofencePendingIntent() { | |
Intent intent = new Intent(this, GeofenceIntentService.class); | |
return PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); | |
} | |
private List createGeofenceList() { | |
List<Geofence> geofenceList = new ArrayList<>(); | |
geofenceList.add(new Geofence.Builder() | |
.setRequestId("GeofenceLocation") | |
.setCircularRegion( | |
47.6062, //Latitude | |
122.3321, //Longitude | |
MINIMUM_RECOMENDED_RADIUS) | |
.setLoiteringDelay(30000) | |
.setExpirationDuration(Geofence.NEVER_EXPIRE) | |
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_DWELL) | |
.build()); | |
return geofenceList; | |
} | |
private GeofencingRequest createGeofencingRequest() { | |
GeofencingRequest.Builder builder = new GeofencingRequest.Builder(); | |
builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_DWELL); | |
builder.addGeofences(createGeofenceList()); | |
return builder.build(); | |
} | |
@Override | |
protected void onStop() { | |
super.onStop(); | |
GeofencingClient geofencingClient = LocationServices.getGeofencingClient(this); | |
geofencingClient.removeGeofences(createGeofencePendingIntent()) | |
.addOnSuccessListener(this, new OnSuccessListener<Void>() { | |
@Override | |
public void onSuccess(Void aVoid) { | |
//Success | |
} | |
}) | |
.addOnFailureListener(this, new OnFailureListener() { | |
@Override | |
public void onFailure(@NonNull Exception e) { | |
//Failure | |
} | |
}); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | |
package="com.example.geofencing"> | |
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> | |
<application | |
android:allowBackup="true" | |
android:icon="@mipmap/ic_launcher" | |
android:label="@string/app_name" | |
android:roundIcon="@mipmap/ic_launcher_round" | |
android:supportsRtl="true" | |
android:theme="@style/AppTheme"> | |
<service android:name=".GeofenceIntentService"/> | |
<activity android:name=".MainActivity"> | |
<intent-filter> | |
<action android:name="android.intent.action.MAIN" /> | |
<category android:name="android.intent.category.LAUNCHER" /> | |
</intent-filter> | |
</activity> | |
</application> | |
</manifest> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment