Android
Google जागरूकता API
खोज…
टिप्पणियों
याद रखें, स्नैपशॉट एपीआई का उपयोग वर्तमान स्थिति का अनुरोध करने के लिए किया जाता है जबकि बाड़ एपीआई एक निर्दिष्ट राज्य के लिए लगातार जांच करता है और जब कोई ऐप चल रहा होता है तो कॉलबैक भेजता है।
कुल मिलाकर, स्नैपशॉट एपीआई या बाड़ एपीआई का उपयोग करने के लिए कुछ बुनियादी कदम हैं:
Google डेवलपर्स कंसोल से एक एपीआई कुंजी प्राप्त करें
प्रकट करने के लिए आवश्यक अनुमतियाँ और API कुंजी जोड़ें:
<!-- Not required for getting current headphone state --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- Only required for actvity recognition --> <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/> <!-- Replace with your actual API key from console --> <meta-data android:name="com.google.android.awareness.API_KEY" android:value="YOUR_API_KEY"/> <!-- Required for Snapshot API only --> <meta-data android:name="com.google.android.geo.API_KEY" android:value="YOUR_API_KEY"/>
GoogleApiClient
कहीं न कहीं, अपनी गतिविधि के ऑनक्रिट () पद्धति में प्राथमिकता दें।GoogleApiClient client = new GoogleApiClient.Builder(context) .addApi(Awareness.API) .build(); client.connect();
अपनी पसंद का एपीआई कॉल करें
परिणाम
उपयोगकर्ता की आवश्यक अनुमति के लिए जाँच करने का एक आसान तरीका इस तरह है:
private boolean isFineLocationGranted() {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
Log.e(getClass().getSimpleName(), "Fine location permission not granted!");
}
}
स्नैपशॉट एपीआई का उपयोग करके वर्तमान उपयोगकर्ता गतिविधि प्राप्त करें
उपयोगकर्ता की शारीरिक गतिविधि के लिए एक बार, गैर-निरंतर अनुरोधों के लिए, स्नैपशॉट API का उपयोग करें:
// Remember to initialize your client as described in the Remarks section
Awareness.SnapshotApi.getDetectedActivity(client)
.setResultCallback(new ResultCallback<DetectedActivityResult>() {
@Override
public void onResult(@NonNull DetectedActivityResult detectedActivityResult) {
if (!detectedActivityResult.getStatus().isSuccess()) {
Log.e(getClass().getSimpleName(), "Could not get the current activity.");
return;
}
ActivityRecognitionResult result = detectedActivityResult
.getActivityRecognitionResult();
DetectedActivity probableActivity = result.getMostProbableActivity();
Log.i(getClass().getSimpleName(), "Activity received : " +
probableActivity.toString());
}
});
स्नैपशॉट एपीआई के साथ हेडफोन राज्य प्राप्त करें
// Remember to initialize your client as described in the Remarks section
Awareness.SnapshotApi.getHeadphoneState(client)
.setResultCallback(new ResultCallback<HeadphoneStateResult>() {
@Override
public void onResult(@NonNull HeadphoneStateResult headphoneStateResult) {
Log.i(TAG, "Headphone state connection state: " +
headphoneStateResult.getHeadphoneState()
.getState() == HeadphoneState.PLUGGED_IN));
}
});
स्नैपशॉट एपीआई का उपयोग करके वर्तमान स्थान प्राप्त करें
// Remember to intialize your client as described in the Remarks section
Awareness.SnapshotApi.getLocation(client)
.setResultCallback(new ResultCallback<LocationResult>() {
@Override
public void onResult(@NonNull LocationResult locationResult) {
Location location = locationResult.getLocation();
Log.i(getClass().getSimpleName(), "Coordinates: "location.getLatitude() + "," +
location.getLongitude() + ", radius : " + location.getAccuracy());
}
});
स्नैपशॉट API का उपयोग करके आस-पास के स्थान प्राप्त करें
// Remember to initialize your client as described in the Remarks section
Awareness.SnapshotApi.getPlaces(client)
.setResultCallback(new ResultCallback<PlacesResult>() {
@Override
public void onResult(@NonNull PlacesResult placesResult) {
List<PlaceLikelihood> likelihoodList = placesResult.getPlaceLikelihoods();
if (likelihoodList == null || likelihoodList.isEmpty()) {
Log.e(getClass().getSimpleName(), "No likely places");
}
}
});
उन स्थानों में डेटा प्राप्त करने के लिए, यहाँ कुछ विकल्प दिए गए हैं:
Place place = placeLikelihood.getPlace();
String likelihood = placeLikelihood.getLikelihood();
Place place = likelihood.getPlace();
String placeName = place.getName();
String placeAddress = place.getAddress();
String placeCoords = place.getLatLng();
String locale = extractFromLocale(place.getLocale()));
स्नैपशॉट एपीआई का उपयोग करके वर्तमान मौसम प्राप्त करें
// Remember to initialize your client as described in the Remarks section
Awareness.SnapshotApi.getWeather(client)
.setResultCallback(new ResultCallback<WeatherResult>() {
@Override
public void onResult(@NonNull WeatherResult weatherResult) {
Weather weather = weatherResult.getWeather();
if (weather == null) {
Log.e(getClass().getSimpleName(), "No weather received");
} else {
Log.i(getClass().getSimpleName(), "Temperature is " +
weather.getTemperature(Weather.CELSIUS) + ", feels like " +
weather.getFeelsLikeTemperature(Weather.CELSIUS) +
", humidity is " + weather.getHumidity());
}
}
});
फेंस एपीआई के साथ उपयोगकर्ता गतिविधि में परिवर्तन प्राप्त करें
यदि आप पता लगाना चाहते हैं कि आपका उपयोगकर्ता किसी गतिविधि को कब शुरू या खत्म करता है, जैसे कि चलना, दौड़ना, या DetectedActivityFence
क्लास की कोई अन्य गतिविधि, तो आप उस गतिविधि के लिए एक बाड़ बना सकते हैं जिसे आप पता लगाना चाहते हैं, और जब आपका उपयोगकर्ता शुरू होता है, तो आपको सूचित किया जाएगा। इस गतिविधि को पूरा करता है। एक BroadcastReceiver
का उपयोग करके, आपको डेटा के साथ एक Intent
मिलेगा जिसमें गतिविधि शामिल है:
// Your own action filter, like the ones used in the Manifest.
private static final String FENCE_RECEIVER_ACTION = BuildConfig.APPLICATION_ID +
"FENCE_RECEIVER_ACTION";
private static final String FENCE_KEY = "walkingFenceKey";
private FenceReceiver mFenceReceiver;
private PendingIntent mPendingIntent;
// Make sure to initialize your client as described in the Remarks section.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// etc.
// The 0 is a standard Activity request code that can be changed to your needs.
mPendingIntent = PendingIntent.getBroadcast(this, 0,
new Intent(FENCE_RECEIVER_ACTION), 0);
registerReceiver(mFenceReceiver, new IntentFilter(FENCE_RECEIVER_ACTION));
// Create the fence.
AwarenessFence fence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
// Register the fence to receive callbacks.
Awareness.FenceApi.updateFences(client, new FenceUpdateRequest.Builder()
.addFence(FENCE_KEY, fence, mPendingIntent)
.build())
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if (status.isSuccess()) {
Log.i(FENCE_KEY, "Successfully registered.");
} else {
Log.e(FENCE_KEY, "Could not be registered: " + status);
}
}
});
}
}
जब आप उपयोगकर्ता गतिविधि को बदलते हैं तो आप कॉलबैक प्राप्त करने के लिए एक BroadcastReceiver
साथ आशय प्राप्त कर सकते हैं:
public class FenceReceiver extends BroadcastReceiver {
private static final String TAG = "FenceReceiver";
@Override
public void onReceive(Context context, Intent intent) {
// Get the fence state
FenceState fenceState = FenceState.extract(intent);
switch (fenceState.getCurrentState()) {
case FenceState.TRUE:
Log.i(TAG, "User is walking");
break;
case FenceState.FALSE:
Log.i(TAG, "User is not walking");
break;
case FenceState.UNKNOWN:
Log.i(TAG, "User is doing something unknown");
break;
}
}
}
बाड़ एपीआई का उपयोग कर एक निश्चित सीमा के भीतर स्थान के लिए परिवर्तन प्राप्त करें
यदि आप यह पता लगाना चाहते हैं कि आपका उपयोगकर्ता किसी विशिष्ट स्थान में कब प्रवेश करता है, तो आप अपने इच्छित त्रिज्या के साथ विशिष्ट स्थान के लिए एक बाड़ बना सकते हैं और जब आपका उपयोगकर्ता स्थान में प्रवेश करता है या छोड़ देता है तो आपको सूचित किया जा सकता है।
// Your own action filter, like the ones used in the Manifest
private static final String FENCE_RECEIVER_ACTION = BuildConfig.APPLICATION_ID +
"FENCE_RECEIVER_ACTION";
private static final String FENCE_KEY = "locationFenceKey";
private FenceReceiver mFenceReceiver;
private PendingIntent mPendingIntent;
// Make sure to initialize your client as described in the Remarks section
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// etc
// The 0 is a standard Activity request code that can be changed for your needs
mPendingIntent = PendingIntent.getBroadcast(this, 0,
new Intent(FENCE_RECEIVER_ACTION), 0);
registerReceiver(mFenceReceiver, new IntentFilter(FENCE_RECEIVER_ACTION));
// Create the fence
AwarenessFence fence = LocationFence.entering(48.136334, 11.581660, 25);
// Register the fence to receive callbacks.
Awareness.FenceApi.updateFences(client, new FenceUpdateRequest.Builder()
.addFence(FENCE_KEY, fence, mPendingIntent)
.build())
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if (status.isSuccess()) {
Log.i(FENCE_KEY, "Successfully registered.");
} else {
Log.e(FENCE_KEY, "Could not be registered: " + status);
}
}
});
}
}
अब उपयोगकर्ता स्थिति में अपडेट प्राप्त करने के लिए एक ब्रॉडकास्टर बनाएँ:
public class FenceReceiver extends BroadcastReceiver {
private static final String TAG = "FenceReceiver";
@Override
public void onReceive(Context context, Intent intent) {
// Get the fence state
FenceState fenceState = FenceState.extract(intent);
switch (fenceState.getCurrentState()) {
case FenceState.TRUE:
Log.i(TAG, "User is in location");
break;
case FenceState.FALSE:
Log.i(TAG, "User is not in location");
break;
case FenceState.UNKNOWN:
Log.i(TAG, "User is doing something unknown");
break;
}
}
}