Чтобы объявить забор, вы можете использовать FenceApi в google.
Хотя этот подход кажется хорошим, я столкнулся с тем фактом, что этот api иногда не говорил мне, когда пользователь запускает/заканчивает вождение, и иногда это заняло много времени после того, как я начал водить машину, это событие.
a. включают зависимость от файла build.gradle вашего приложения:
compile 'com.google.android.gms:play-services-location:+'
compile 'com.google.android.gms:play-services-contextmanager:+'
b. Manifest определения:
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.awareness.API_KEY"
android:value="PUT_YOUR_AWARENESS_KEY_HERE" />
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
PUT_YOUR_AWARENESS_KEY_HERE: Вам нужно сгенерировать ключ here.
c. Ваш MainActivity класс - пояснения, присоединенные к коду:
public class MainActivity extends Activity {
private GoogleApiClient mGoogleApiClient;
private PendingIntent mPendingIntent;
private FenceReceiver mFenceReceiver;
// The intent action which will be fired when your fence is triggered.
private final String FENCE_RECEIVER_ACTION = BuildConfig.APPLICATION_ID + "FENCE_RECEIVER_ACTION";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGoogleApiClient = new GoogleApiClient.Builder(this).addApi(Awareness.API).build();
mGoogleApiClient.connect();
// Set up the PendingIntent that will be fired when the fence is triggered.
mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(FENCE_RECEIVER_ACTION), 0);
// The broadcast receiver that will receive intents when a fence is triggered.
mFenceReceiver = new FenceReceiver();
registerReceiver(mFenceReceiver, new IntentFilter(FENCE_RECEIVER_ACTION));
createFence(DetectedActivityFence.IN_VEHICLE, "InVehicleFence");
}
@Override
public void onDestroy() {
try {
unregisterReceiver(mFenceReceiver); //Don't forget to unregister the receiver
} catch (Exception e) {
e.printStackTrace();
}
super.onDestroy();
}
private void createFence(int detectedActivityFence, final String fenceKey) {
AwarenessFence fence = DetectedActivityFence.during(detectedActivityFence);
// Register the fence to receive callbacks.
Awareness.FenceApi.updateFences(
mGoogleApiClient, new FenceUpdateRequest.Builder().addFence(fenceKey, fence, mPendingIntent)
.build()).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if (status.isSuccess()) {
Log.i(getClass().getSimpleName(), "Successfully registered.");
} else {
Log.e(getClass().getSimpleName(), "Could not be registered: " + status);
}
}
});
}
// Handle the callback on the Intent.
public class FenceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
FenceState fenceState = FenceState.extract(intent);
switch (fenceState.getCurrentState()) {
case FenceState.TRUE:
Log.i(fenceState.getFenceKey(), "Driving");
break;
case FenceState.FALSE:
Log.i(fenceState.getFenceKey(), "Not driving");
break;
}
}
}
}
вы можете использовать акселерометр –
Вы упомянули, что вы пытались «узнавания активность API» и он не работает, как ожидалось. Вы имеете в виду, что вы использовали API местоположения сервисов Google Play, и это не сработало? Вы установили его для получения периодических обновлений местоположения? Какой параметр интервала вы установили? Вы проверяли уровень достоверности каждого вида деятельности? Пожалуйста, добавьте дополнительную информацию, чтобы мы могли вам помочь. –
Matan ... да я сделал все tat – Aneef