salvador

joined 1 year ago
[–] salvador@lemmy.world -1 points 8 months ago* (last edited 8 months ago) (2 children)

They've just confirmed themselves that the reason that Russia started the war for has been legit and justifiable all along. As well as the words of Russia which has said this dozens of the times.

Better off and easier for Putin, from now on.

 

I have an app which polls a remote server by sending to it its cache GPS location. Sometimes a remote server will ask for live location and an app must send it to it.


object MyLocationManager {
    val providers = listOf(
        LocationManager.GPS_PROVIDER,
        "fused",
        LocationManager.NETWORK_PROVIDER,
        LocationManager.PASSIVE_PROVIDER,
    )


    fun getCached(ctx: Context, locationManager: LocationManager): Location? {
        for (provider in providers) {
            when (provider) {
                "fused" -> {
                    val fusedLocationClient =
                        LocationServices.getFusedLocationProviderClient(ctx)
                    val fusedLocationTask = fusedLocationClient.lastLocation
                    val fusedLocation = getTaskResult(fusedLocationTask)
                    if (fusedLocation != null) {
                        return fusedLocation
                    }
                }
                else -> {
                    if (locationManager.isProviderEnabled(provider)) {
                        val lastKnownLocation = locationManager.getLastKnownLocation(provider)
                        Log.d(
                            TAG,
                            "Provider: $provider, Last Known Location: $lastKnownLocation"
                        )

                        if (lastKnownLocation != null) {
                            return lastKnownLocation
                        }
                    }
                }
            }
        }

        return null
    }

    fun getLive(ctx: Context, locationManager: LocationManager): Location? {
        val locationListener = object : LocationListener {
            override fun onLocationChanged(location: Location) {

                //This works correctly!
                //
                //1) how to save its result? How to save it into cache?
                //2) or how to return it from here?
                Log.d(TAG, "onLocationChanged: ${location.latitude}, ${location.longitude}")

                stopLocationUpdates()
            }

            private fun stopLocationUpdates() {
                val fusedLocationClient = LocationServices.getFusedLocationProviderClient(ctx)

                try {
                    // Stop location updates
                    fusedLocationClient.removeLocationUpdates(locationCallback)
                    Log.d(TAG, "Location updates stopped")
                } catch (e: SecurityException) {
                    Log.e(TAG, "SecurityException while stopping location updates: ${e.message}")
                }
            }

            private val locationCallback = object : LocationCallback() {
                override fun onLocationResult(locationResult: LocationResult) {
                    super.onLocationResult(locationResult)
                    val location = locationResult.lastLocation
                    if (location != null) {
                        onLocationChanged(location)
                    } else {
                        Log.e(TAG, "Received null location in onLocationResult")
                    }
                }
            }
        }

        for (provider in providers) {
            when (provider) {
                LocationManager.GPS_PROVIDER -> {

                    //obsolete, in the last Android versions
                    val _locationRequest = LocationRequest.create()
                        .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                        .setInterval(0)
                        .setFastestInterval(0)

                    val fusedLocationClient = LocationServices.getFusedLocationProviderClient(ctx)
                    val locationResult: Task = fusedLocationClient.getLocationAvailability()

                    if (!Tasks.await(locationResult).isLocationAvailable) {
                        return null
                    }

                    val locationTask: Task = fusedLocationClient.getCurrentLocation(
                        LocationRequest.PRIORITY_HIGH_ACCURACY,
                        null
                    )

                    return Tasks.await(locationTask)
                }

                "fused" -> {
                    val apiAvailability = GoogleApiAvailability.getInstance()
                    val resultCode = apiAvailability.isGooglePlayServicesAvailable(ctx)

                    if (resultCode == ConnectionResult.SUCCESS) {
                        val fusedLocationClient = LocationServices.getFusedLocationProviderClient(ctx)
                        val fusedLocationTask = fusedLocationClient.lastLocation
                        val fusedLocation = getTaskResult(fusedLocationTask)
                        if (fusedLocation != null) {
                            return fusedLocation
                        }
                    } else {
                        Log.w(TAG, " Google Play Services aren't available, can't use fused")
                    }

                }

                else -> {
                    if (locationManager.isProviderEnabled(provider)) {
                        locationManager.requestSingleUpdate(
                            provider,
                            locationListener,
                            Looper.getMainLooper()
                        )

                        val lastKnownLocation = locationManager.getLastKnownLocation(provider)
                        if (lastKnownLocation != null) {
                            return lastKnownLocation
                        }
                    }
                }
            }
        }

        return null
    }
}


An issue is that the code for obtaining GPS location doesn't work properly. Firstly, I don't know whether the approach in the code is correct. Secondly, I don't know how to properly to return the GPS coordinates from a callback -- see the comments. Thirdly, I don't know how to force it to store the latest coordinates that it's obtained into cache.

And there're some functions that's been derprecated in the latest versions of Android, particularly in Android 10.

How to do all of this?

My device is rooted.

[–] salvador@lemmy.world 1 points 9 months ago (1 children)

Do they allow run put and run my service from /system ?

 

I have a rooted Android 10. And I've written a service (off the class Service) which I want to run under too, in background. A service uses a microphone and location. It's written in Kotlin.

I've not found any information of how to run a service on a rooted device under root. I've found some, about running some commands in a service (code) itself under root, though, but it may be only a part of what I need.

How to do it?

Essentially, I want my service to run forever, with elevated preveligies, get itself restarted if it fails, gets killed by Android.


Also, I've tried to copy it into /system and /system/init directories, but I haven't been able to, due to "read-only file system". Nor have I been able to remount it to make it writteable. I've managed to make the / writteable, but it didn't allow me to copy my service in /system nonetheless.

[–] salvador@lemmy.world -2 points 1 year ago* (last edited 1 year ago)

You didn't realize? Now you do.

[–] salvador@lemmy.world 1 points 1 year ago (1 children)

But the mailboxes of MailCow are always encrypted

 

I've set up WireGuard on a VPS.

A client on Linux desktop works with no issues.

The one on an android phone too, but not completely. Namely, TX and RX get updated, "handshake" and "last connected" with a phone on a server gets updated too, as well as on a phone itself. However, I can't open any single website.

However, Telegram, for instance, works well. Another android app too, it appears. But all the rest of the apps don't, not do the Firefox and Chrome.

What's the matter?

 

I have a backup of one of my email accounts in the Maildir format. I made it manually, and it’s not from a Mailcow instance.

How to import such a backup into a Mailcow? Will I also have to create a domains and mailboxes that exist in a backup in Mailcow first?

I’m aware of the 2 import/export bash scripts of Mailcow, however, can they be used in this case?

[–] salvador@lemmy.world 0 points 1 year ago
[–] salvador@lemmy.world 0 points 1 year ago

How have you been able to measure "way better"?

[–] salvador@lemmy.world 0 points 1 year ago* (last edited 1 year ago)

Europe and US like to accuse others of everything. But they, strangely, don't like to be accused themselves in anything

view more: next ›