В настоящее время я работаю над приложением Flutter для часов с использованием WearOS, поскольку не существует плагина для определения местоположения GPS с помощью часов WearOS, вам нужно сделать это вручную, используя FusedLocationProviderClient из Google Play Services, который вам нужно обработать из ./app/src/main/com/.../.../MainActivity .kt с помощью целый скрипт и система трансляции событий.
С помощью кода, который я сейчас написал, мне удастся получить пассивное положение GPS, зарегистрированное часами , так как лучше, когда вы в данный момент загружаете приложение и потенциально не подключены к Wi-Fi или сотовой связи.
PS D:\Codes\Flutter projects\idfm_wearos> flutter run --release
Launching lib\main.dart on sdk gwear x86 64 in release mode...
Running Gradle task 'assembleRelease'... 75,8s
√ Built build\app\outputs\flutter-apk\app-release.apk (28.4MB)
Installing build\app\outputs\flutter-apk\app-release.apk... 3,1s
Flutter run key commands.
h List all available interactive commands.
c Clear the screen
q Quit (terminate the application on the device).
I/flutter ( 5618): {latitude: 48.808303333333335, longitude: 3.08294}
Однако после того, как эта позиция GPS будет передана системой событий, мне не удастся получить реальную позицию GPS, даже если я подключен или повторное подключение.
Вот код кода MainActivity.kt:
package com.example.idfm_wearos
import android.Manifest
import android.content.pm.PackageManager
import android.location.Location
import android.location.LocationManager
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.MotionEvent
import androidx.annotation.NonNull
import androidx.core.app.ActivityCompat
import com.google.android.gms.location.*
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.EventChannel
import io.flutter.plugin.common.MethodChannel
import java.util.concurrent.TimeUnit
class MainActivity : FlutterActivity() {
private val CHANNEL = "location_permission"
private val LOCATION_CHANNEL = "location_updates"
private val PERMISSION_REQUEST_CODE = 123
private lateinit var fusedLocationClient: FusedLocationProviderClient
private var eventSink: EventChannel.EventSink? = null
private lateinit var locationCallback: LocationCallback
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
.setMethodCallHandler { call, result ->
when (call.method) {
"requestPermission" -> {
requestLocationPermission(result)
}
"checkPermission" -> {
result.success(checkLocationPermission())
}
else -> result.notImplemented()
}
}
EventChannel(flutterEngine.dartExecutor.binaryMessenger, LOCATION_CHANNEL)
.setStreamHandler(object : EventChannel.StreamHandler {
override fun onListen(arguments: Any?, eventSink: EventChannel.EventSink?) {
this@MainActivity.eventSink = eventSink
startLocationUpdates()
}
override fun onCancel(arguments: Any?) {
stopLocationUpdates()
}
})
}
private fun requestLocationPermission(result: MethodChannel.Result) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
) {
result.success(true)
return
}
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
PERMISSION_REQUEST_CODE
)
}
}
private fun checkLocationPermission(): Boolean {
return ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
}
private fun startLocationUpdates() {
if (checkLocationPermission()) {
// Use LocationManager to get last known location from passive provider
val locationManager = getSystemService(LOCATION_SERVICE) as LocationManager
val lastKnownLocation: Location? = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER)
// Check if a valid last known location is available
if (lastKnownLocation != null) {
Log.d("Location", "Last known location: $lastKnownLocation")
eventSink?.success("${lastKnownLocation.latitude}|${lastKnownLocation.longitude}")
} else {
Log.d("Location", "No passive last known location available")
}
// Now request location updates
val locationRequest = getLocationRequest()
locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
for (location in locationResult.locations) {
eventSink?.success("${location.latitude}|${location.longitude}")
}
}
}
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null)
}
}
private fun stopLocationUpdates() {
fusedLocationClient.removeLocationUpdates(locationCallback)
}
private fun getLocationRequest(): LocationRequest {
return LocationRequest.create().apply {
interval = TimeUnit.SECONDS.toMillis(5)
fastestInterval = TimeUnit.SECONDS.toMillis(3)
priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
eventSink?.success(true)
startLocationUpdates() // Start location updates after permission is granted
} else {
eventSink?.success(false)
}
}
}
}
Вот код класса Flutter, который я использую:
import 'package:flutter/services.dart';
class LocationService {
static const MethodChannel _methodChannel = MethodChannel('location_permission');
static const EventChannel _eventChannel = EventChannel('location_updates');
final Map _locationData = {
'latitude': 0.0,
'longitude': 0.0,
};
Future startLocationUpdates() async {
try {
await _methodChannel.invokeMethod('requestPermission');
final bool result = await _methodChannel.invokeMethod('checkPermission');
if (result) {
_eventChannel.receiveBroadcastStream().listen((event) {
// Parse the location data (event is a string)
final List data = event.split('|');
_locationData['latitude'] = double.parse(data[0]);
_locationData['longitude'] = double.parse(data[1]);
print(_locationData);
//print("Coordinates: $event");
});
}
} catch (e) {
print("Failed to start location updates: $e");
}
}
Map getLocationData() {
return _locationData;
}
}
Timer.periodic(Duration(seconds: 5), (timer) async {
Map location = _gpsLocation.getLocationData();
if (location["latitude"] != _locationData["latitude"] || location["longitude"] != _locationData["longitude"]) {
_locationData = location;
await refreshStations();
}
});
Подробнее здесь: https://stackoverflow.com/questions/793 ... omatically
Положение GPS не обновляется автоматически ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1736503798
Anonymous
В настоящее время я работаю над [b]приложением Flutter[/b] для часов с использованием [b]WearOS[/b], поскольку не существует плагина для определения местоположения GPS с помощью часов WearOS, вам нужно сделать это вручную, используя [b]FusedLocationProviderClient[/b] из [b]Google Play Services[/b], который вам нужно обработать из ./app/src/main/com/.../.../MainActivity .kt с помощью целый скрипт и система трансляции событий.
С помощью кода, который я сейчас написал, мне удастся получить [b]пассивное положение GPS[/b], зарегистрированное часами , так как лучше, когда вы в данный момент загружаете приложение и потенциально не подключены к Wi-Fi или сотовой связи.
PS D:\Codes\Flutter projects\idfm_wearos> flutter run --release
Launching lib\main.dart on sdk gwear x86 64 in release mode...
Running Gradle task 'assembleRelease'... 75,8s
√ Built build\app\outputs\flutter-apk\app-release.apk (28.4MB)
Installing build\app\outputs\flutter-apk\app-release.apk... 3,1s
Flutter run key commands.
h List all available interactive commands.
c Clear the screen
q Quit (terminate the application on the device).
I/flutter ( 5618): {latitude: 48.808303333333335, longitude: 3.08294}
Однако после того, как эта позиция GPS будет передана системой событий, мне не удастся получить [b]реальную позицию GPS[/b], даже если я подключен или повторное подключение.
[b]Вот код кода MainActivity.kt:[/b]
package com.example.idfm_wearos
import android.Manifest
import android.content.pm.PackageManager
import android.location.Location
import android.location.LocationManager
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.MotionEvent
import androidx.annotation.NonNull
import androidx.core.app.ActivityCompat
import com.google.android.gms.location.*
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.EventChannel
import io.flutter.plugin.common.MethodChannel
import java.util.concurrent.TimeUnit
class MainActivity : FlutterActivity() {
private val CHANNEL = "location_permission"
private val LOCATION_CHANNEL = "location_updates"
private val PERMISSION_REQUEST_CODE = 123
private lateinit var fusedLocationClient: FusedLocationProviderClient
private var eventSink: EventChannel.EventSink? = null
private lateinit var locationCallback: LocationCallback
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
.setMethodCallHandler { call, result ->
when (call.method) {
"requestPermission" -> {
requestLocationPermission(result)
}
"checkPermission" -> {
result.success(checkLocationPermission())
}
else -> result.notImplemented()
}
}
EventChannel(flutterEngine.dartExecutor.binaryMessenger, LOCATION_CHANNEL)
.setStreamHandler(object : EventChannel.StreamHandler {
override fun onListen(arguments: Any?, eventSink: EventChannel.EventSink?) {
this@MainActivity.eventSink = eventSink
startLocationUpdates()
}
override fun onCancel(arguments: Any?) {
stopLocationUpdates()
}
})
}
private fun requestLocationPermission(result: MethodChannel.Result) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
) {
result.success(true)
return
}
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
PERMISSION_REQUEST_CODE
)
}
}
private fun checkLocationPermission(): Boolean {
return ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
}
private fun startLocationUpdates() {
if (checkLocationPermission()) {
// Use LocationManager to get last known location from passive provider
val locationManager = getSystemService(LOCATION_SERVICE) as LocationManager
val lastKnownLocation: Location? = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER)
// Check if a valid last known location is available
if (lastKnownLocation != null) {
Log.d("Location", "Last known location: $lastKnownLocation")
eventSink?.success("${lastKnownLocation.latitude}|${lastKnownLocation.longitude}")
} else {
Log.d("Location", "No passive last known location available")
}
// Now request location updates
val locationRequest = getLocationRequest()
locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
for (location in locationResult.locations) {
eventSink?.success("${location.latitude}|${location.longitude}")
}
}
}
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null)
}
}
private fun stopLocationUpdates() {
fusedLocationClient.removeLocationUpdates(locationCallback)
}
private fun getLocationRequest(): LocationRequest {
return LocationRequest.create().apply {
interval = TimeUnit.SECONDS.toMillis(5)
fastestInterval = TimeUnit.SECONDS.toMillis(3)
priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
eventSink?.success(true)
startLocationUpdates() // Start location updates after permission is granted
} else {
eventSink?.success(false)
}
}
}
}
[b]Вот код класса Flutter, который я использую:[/b]
import 'package:flutter/services.dart';
class LocationService {
static const MethodChannel _methodChannel = MethodChannel('location_permission');
static const EventChannel _eventChannel = EventChannel('location_updates');
final Map _locationData = {
'latitude': 0.0,
'longitude': 0.0,
};
Future startLocationUpdates() async {
try {
await _methodChannel.invokeMethod('requestPermission');
final bool result = await _methodChannel.invokeMethod('checkPermission');
if (result) {
_eventChannel.receiveBroadcastStream().listen((event) {
// Parse the location data (event is a string)
final List data = event.split('|');
_locationData['latitude'] = double.parse(data[0]);
_locationData['longitude'] = double.parse(data[1]);
print(_locationData);
//print("Coordinates: $event");
});
}
} catch (e) {
print("Failed to start location updates: $e");
}
}
Map getLocationData() {
return _locationData;
}
}
Timer.periodic(Duration(seconds: 5), (timer) async {
Map location = _gpsLocation.getLocationData();
if (location["latitude"] != _locationData["latitude"] || location["longitude"] != _locationData["longitude"]) {
_locationData = location;
await refreshStations();
}
});
Подробнее здесь: [url]https://stackoverflow.com/questions/79345323/gps-position-not-refreshed-automatically[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия