Browse Source

-Define google api client service for send request location

ilhamitubagoes 4 years ago
parent
commit
669bccba48
1 changed files with 125 additions and 12 deletions
  1. 125 12
      app/src/main/java/com/fusi24/rfid/ui/ScanActivity.java

+ 125 - 12
app/src/main/java/com/fusi24/rfid/ui/ScanActivity.java

@@ -2,12 +2,16 @@ package com.fusi24.rfid.ui;
2
 
2
 
3
 import android.Manifest;
3
 import android.Manifest;
4
 import android.content.Intent;
4
 import android.content.Intent;
5
+import android.content.IntentSender;
5
 import android.content.pm.PackageManager;
6
 import android.content.pm.PackageManager;
7
+import android.location.Location;
6
 import android.os.Bundle;
8
 import android.os.Bundle;
7
 import android.view.View;
9
 import android.view.View;
8
 import android.widget.TextView;
10
 import android.widget.TextView;
9
 import android.widget.Toast;
11
 import android.widget.Toast;
10
 
12
 
13
+import androidx.annotation.NonNull;
14
+import androidx.annotation.Nullable;
11
 import androidx.appcompat.widget.Toolbar;
15
 import androidx.appcompat.widget.Toolbar;
12
 import androidx.core.app.ActivityCompat;
16
 import androidx.core.app.ActivityCompat;
13
 
17
 
@@ -16,12 +20,18 @@ import com.fusi24.rfid.config.Constant;
16
 import com.fusi24.rfid.databinding.ActivityScanBinding;
20
 import com.fusi24.rfid.databinding.ActivityScanBinding;
17
 import com.fusi24.rfid.ui.scanresult.ScanResultActivity;
21
 import com.fusi24.rfid.ui.scanresult.ScanResultActivity;
18
 import com.fusi24.rfid.util.LFScanProcessing;
22
 import com.fusi24.rfid.util.LFScanProcessing;
23
+import com.google.android.gms.common.ConnectionResult;
24
+import com.google.android.gms.common.api.GoogleApiClient;
19
 import com.google.android.gms.location.FusedLocationProviderClient;
25
 import com.google.android.gms.location.FusedLocationProviderClient;
26
+import com.google.android.gms.location.LocationListener;
27
+import com.google.android.gms.location.LocationRequest;
20
 import com.google.android.gms.location.LocationServices;
28
 import com.google.android.gms.location.LocationServices;
21
 
29
 
22
 import timber.log.Timber;
30
 import timber.log.Timber;
23
 
31
 
24
-public class ScanActivity extends LFScanProcessing {
32
+public class ScanActivity extends LFScanProcessing implements GoogleApiClient.ConnectionCallbacks,
33
+        GoogleApiClient.OnConnectionFailedListener,
34
+        LocationListener {
25
 
35
 
26
     public static final String ID_PERMIT = "id_permit";
36
     public static final String ID_PERMIT = "id_permit";
27
     public static final String ID_DEVICE = "id_device";
37
     public static final String ID_DEVICE = "id_device";
@@ -32,6 +42,13 @@ public class ScanActivity extends LFScanProcessing {
32
     private ActivityScanBinding binding;
42
     private ActivityScanBinding binding;
33
     private FusedLocationProviderClient locationClient;
43
     private FusedLocationProviderClient locationClient;
34
 
44
 
45
+    //Define a request code to send to Google Play services
46
+    private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
47
+    private GoogleApiClient mGoogleApiClient;
48
+    private LocationRequest mLocationRequest;
49
+    private double currentLatitude;
50
+    private double currentLongitude;
51
+
35
     @Override
52
     @Override
36
     protected void onCreate(Bundle savedInstanceState) {
53
     protected void onCreate(Bundle savedInstanceState) {
37
         super.onCreate(savedInstanceState);
54
         super.onCreate(savedInstanceState);
@@ -42,21 +59,35 @@ public class ScanActivity extends LFScanProcessing {
42
         Toolbar toolbar = findViewById(R.id.toolbar);
59
         Toolbar toolbar = findViewById(R.id.toolbar);
43
         TextView toolbarTitle = findViewById(R.id.toolbar_text);
60
         TextView toolbarTitle = findViewById(R.id.toolbar_text);
44
 
61
 
45
-        if(toolbarTitle !=null && toolbar !=null) {
62
+        if (toolbarTitle != null && toolbar != null) {
46
             toolbarTitle.setText(getString(R.string.app_name));
63
             toolbarTitle.setText(getString(R.string.app_name));
47
             setSupportActionBar(toolbar);
64
             setSupportActionBar(toolbar);
48
         }
65
         }
49
 
66
 
50
-        if (getSupportActionBar() != null){
67
+        if (getSupportActionBar() != null) {
51
             getSupportActionBar().setDisplayShowTitleEnabled(false);
68
             getSupportActionBar().setDisplayShowTitleEnabled(false);
52
         }
69
         }
53
 
70
 
71
+        mGoogleApiClient = new GoogleApiClient.Builder(this)
72
+                // The next two lines tell the new client that “this” current class will handle connection stuff
73
+                .addConnectionCallbacks(this)
74
+                .addOnConnectionFailedListener(this)
75
+                //fourth line adds the LocationServices API endpoint from GooglePlayServices
76
+                .addApi(LocationServices.API)
77
+                .build();
78
+
79
+        // Create the LocationRequest object
80
+        mLocationRequest = LocationRequest.create()
81
+                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
82
+                .setInterval(10 * 1000)        // 10 seconds, in milliseconds
83
+                .setFastestInterval(1000); // 1 second, in milliseconds
84
+
54
         initView();
85
         initView();
55
         initSound();
86
         initSound();
56
     }
87
     }
57
 
88
 
58
     private void initView() {
89
     private void initView() {
59
-        if (getIntent().getExtras() != null){
90
+        if (getIntent().getExtras() != null) {
60
             idPermit = getIntent().getExtras().getString(ID_PERMIT);
91
             idPermit = getIntent().getExtras().getString(ID_PERMIT);
61
             idDevice = getIntent().getExtras().getString(ID_DEVICE);
92
             idDevice = getIntent().getExtras().getString(ID_DEVICE);
62
             idCheckType = String.valueOf(getIntent().getExtras().getInt(ID_CHECK_TYPE));
93
             idCheckType = String.valueOf(getIntent().getExtras().getInt(ID_CHECK_TYPE));
@@ -69,12 +100,29 @@ public class ScanActivity extends LFScanProcessing {
69
         binding.toggleScan.setOnCheckedChangeListener((buttonView, isChecked) -> statusScanner());
100
         binding.toggleScan.setOnCheckedChangeListener((buttonView, isChecked) -> statusScanner());
70
     }
101
     }
71
 
102
 
72
-    private void setStatusScan(){
73
-        switch (Integer.parseInt(idCheckType)){
74
-            case 649 :
103
+    @Override
104
+    protected void onResume() {
105
+        super.onResume();
106
+        //Now lets connect to the API
107
+        mGoogleApiClient.connect();
108
+    }
109
+
110
+    @Override
111
+    protected void onPause() {
112
+        super.onPause();
113
+        //Disconnect from API onPause()
114
+        if (mGoogleApiClient.isConnected()) {
115
+            LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
116
+            mGoogleApiClient.disconnect();
117
+        }
118
+    }
119
+
120
+    private void setStatusScan() {
121
+        switch (Integer.parseInt(idCheckType)) {
122
+            case 649:
75
                 binding.tvStatusScan.setBackground(getDrawable(R.drawable.bg_green));
123
                 binding.tvStatusScan.setBackground(getDrawable(R.drawable.bg_green));
76
                 break;
124
                 break;
77
-            case 650 :
125
+            case 650:
78
             default:
126
             default:
79
                 binding.tvStatusScan.setBackground(getDrawable(R.drawable.bg_blue));
127
                 binding.tvStatusScan.setBackground(getDrawable(R.drawable.bg_blue));
80
                 break;
128
                 break;
@@ -82,14 +130,14 @@ public class ScanActivity extends LFScanProcessing {
82
         binding.tvStatusScan.setText(checkTypeName);
130
         binding.tvStatusScan.setText(checkTypeName);
83
     }
131
     }
84
 
132
 
85
-    private void statusScanner(){
86
-        if(binding.toggleScan.isChecked()){
133
+    private void statusScanner() {
134
+        if (binding.toggleScan.isChecked()) {
87
             onStart();
135
             onStart();
88
         } else
136
         } else
89
             onStop();
137
             onStop();
90
     }
138
     }
91
 
139
 
92
-    void startInstance(String rfidCardNumber){
140
+    void startInstance(String rfidCardNumber) {
93
         Intent intent = new Intent(this, ScanResultActivity.class);
141
         Intent intent = new Intent(this, ScanResultActivity.class);
94
         intent.putExtra(ScanResultActivity.RFID_CARD_NUMBER, rfidCardNumber);
142
         intent.putExtra(ScanResultActivity.RFID_CARD_NUMBER, rfidCardNumber);
95
         intent.putExtra(ScanResultActivity.ID_PERMIT, idPermit);
143
         intent.putExtra(ScanResultActivity.ID_PERMIT, idPermit);
@@ -131,7 +179,7 @@ public class ScanActivity extends LFScanProcessing {
131
             return;
179
             return;
132
         }
180
         }
133
         locationClient.getLastLocation().addOnSuccessListener(this, location -> {
181
         locationClient.getLastLocation().addOnSuccessListener(this, location -> {
134
-            if (location != null){
182
+            if (location != null) {
135
                 double latitude = location.getLatitude();
183
                 double latitude = location.getLatitude();
136
                 double longitude = location.getLongitude();
184
                 double longitude = location.getLongitude();
137
                 longLat = longitude + "," + latitude;
185
                 longLat = longitude + "," + latitude;
@@ -147,4 +195,69 @@ public class ScanActivity extends LFScanProcessing {
147
         super.onDestroy();
195
         super.onDestroy();
148
         binding = null;
196
         binding = null;
149
     }
197
     }
198
+
199
+    @Override
200
+    public void onConnected(@Nullable Bundle bundle) {
201
+        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
202
+            ActivityCompat.requestPermissions(this, Constant.PERMISSIONS_RFID, 1000);
203
+            return;
204
+        }
205
+        Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
206
+
207
+        if (location == null) {
208
+            LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
209
+
210
+        } else {
211
+            //If everything went fine lets get latitude and longitude
212
+            currentLatitude = location.getLatitude();
213
+            currentLongitude = location.getLongitude();
214
+
215
+            longLat = currentLongitude + "," + currentLatitude;
216
+
217
+            Toast.makeText(this, "Latitude : " + currentLatitude + ", Longitude : " + currentLongitude, Toast.LENGTH_LONG).show();
218
+        }
219
+    }
220
+
221
+    @Override
222
+    public void onConnectionSuspended(int i) {
223
+
224
+    }
225
+
226
+    @Override
227
+    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
228
+        /*
229
+         * Google Play services can resolve some errors it detects.
230
+         * If the error has a resolution, try sending an Intent to
231
+         * start a Google Play services activity that can resolve
232
+         * error.
233
+         */
234
+        if (connectionResult.hasResolution()) {
235
+            try {
236
+                // Start an Activity that tries to resolve the error
237
+                connectionResult.startResolutionForResult(this, CONNECTION_FAILURE_RESOLUTION_REQUEST);
238
+                /*
239
+                 * Thrown if Google Play services canceled the original
240
+                 * PendingIntent
241
+                 */
242
+            } catch (IntentSender.SendIntentException e) {
243
+                // Log the error
244
+                e.printStackTrace();
245
+            }
246
+        } else {
247
+            /*
248
+             * If no resolution is available, display a dialog to the
249
+             * user with the error.
250
+             */
251
+            Timber.tag("Error").e("Location services connection failed with code %s", connectionResult.getErrorCode());
252
+        }
253
+    }
254
+
255
+    @Override
256
+    public void onLocationChanged(Location location) {
257
+        currentLatitude = location.getLatitude();
258
+        currentLongitude = location.getLongitude();
259
+
260
+        longLat = currentLongitude + "," + currentLatitude;
261
+        Toast.makeText(this, "Latitude : " + currentLatitude + ", Longitude : " + currentLongitude, Toast.LENGTH_LONG).show();
262
+    }
150
 }
263
 }