Сравнить коммиты

...
101 Коммитов
Автор SHA1 Сообщение Дата
Anton Tananaev 3afcfa17d0 Update version number 2021-07-20 23:12:26 -07:00
Anton Tananaev 02263d5fd9 Fix crash 2021-07-20 23:12:04 -07:00
Anton Tananaev a884b2f3d7 Reorder dependencies 2021-07-19 20:26:42 -07:00
Anton Tananaev 6910790fa7 Specify location services version 2021-07-19 20:17:53 -07:00
Anton Tananaev 6cab1a0b36 Update Firebase 2021-07-19 20:14:15 -07:00
Anton Tananaev edd4f670fe Remove unused 2021-07-19 20:03:06 -07:00
Anton Tananaev 298d7becb5 Update localization 2021-07-17 22:02:57 -07:00
Anton Tananaev 9a2e3f9126 Update app version 2021-07-17 21:57:48 -07:00
Anton Tananaev d3f7ee0c8b Convert project to Kotlin 2021-07-17 19:14:15 -07:00
Anton Tananaev 8ae486dbc8 Rename .java to .kt 2021-07-17 19:14:15 -07:00
Anton Tananaev 02295f5fcf Convert project to Kotlin 2021-07-17 19:11:29 -07:00
Anton Tananaev 958eb77c51 Rename .java to .kt 2021-07-17 19:11:29 -07:00
Anton Tananaev 0a3a8381a5 Add Kotlin support 2021-07-17 16:56:49 -07:00
Anton Tananaev 6009dba342 Update project 2021-07-17 16:51:10 -07:00
Anton Tananaev 59085f668c Remove disclosure 2020-12-16 20:50:40 -08:00
Anton Tananaev 1cb5326e07 Update app version 2020-12-14 21:21:04 -08:00
Anton Tananaev 28befc6180 Remove background location 2020-12-14 21:20:41 -08:00
Anton Tananaev e83ef80fa3 Add target SDK 2020-12-13 22:24:53 -08:00
Anton Tananaev b26a1bd133 Update app version 2020-12-13 22:21:24 -08:00
Anton Tananaev 0bbee716a6 Add background location disclosure 2020-12-13 22:00:44 -08:00
Anton Tananaev 52e3b839ae Update dependencies 2020-12-13 21:45:35 -08:00
Anton Tananaev cfe04eb0a6 Update tools 2020-12-13 21:38:17 -08:00
Anton Tananaev c243912c55 Update app version 2020-10-08 22:33:09 -07:00
Anton Tananaev 914a157afc Implement rating flow 2020-10-08 22:32:43 -07:00
Anton Tananaev 454ce6be21 Disable jetifier 2020-09-28 21:36:25 -07:00
Anton Tananaev e8a1e015d4 Enable multidex 2020-09-28 21:21:16 -07:00
Anton Tananaev ceb15c1378 Update version number 2020-09-28 21:07:42 -07:00
Anton Tananaev d25c745013 Update crashlytics 2020-09-28 21:07:17 -07:00
Anton Tananaev c24df5b246 Update notification priority 2020-09-20 11:16:41 -07:00
Anton Tananaev 283d0467b4 Add option to disable wakelock 2020-09-20 11:08:10 -07:00
Anton Tananaev 83bf1daa84 Use different method 2020-09-20 11:01:03 -07:00
Anton Tananaev 96d61c4c66 Update libraries 2020-09-20 10:50:21 -07:00
Anton Tananaev 3978a3d8d6 Update path 2020-09-06 15:05:41 -07:00
Anton Tananaev 78018c3038 Update templates 2020-07-05 11:05:41 -07:00
Anton Tananaev 19b7c4da21 Minor project file update 2020-06-19 22:28:02 -07:00
Anton Tananaev a3d43294ce Update project and tests 2020-06-10 21:14:19 -07:00
Anton Tananaev 330dc27f0f Update version number 2020-04-22 22:30:03 -07:00
Anton Tananaev f052be83c3 Update libraries 2020-04-22 22:29:27 -07:00
Anton Tananaev c77d4b477b Update localization files 2020-04-22 22:24:43 -07:00
Anton Tananaev eb7de9eb98 Fix numeric input type 2020-02-03 21:50:28 -08:00
Anton Tananaev 3a786b14b7 Option to disable buffering (fix #411) 2020-02-02 20:55:12 -08:00
Anton Tananaev 6bad9786ec Set default flavor 2020-01-26 22:33:40 -08:00
Anton Tananaev 259aaf2000 Update Play Store icon 2019-11-30 12:52:15 -08:00
Anton Tananaev aa00a33f5b Fix build issue 2019-11-24 21:32:05 -08:00
Anton Tananaev ab86076b9b Update version number 2019-11-24 11:01:57 -08:00
Anton Tananaev fed2a73999 Implement dark theme support 2019-11-24 11:00:32 -08:00
Anton Tananaev 42c210763c Update localization 2019-11-24 10:34:11 -08:00
Anton Tananaev faa05dea5a Update app version 2019-11-17 13:08:25 -08:00
Anton Tananaev 453edfa97e Temporary downgrade libraries 2019-11-17 12:56:15 -08:00
Anton Tananaev 4c6c79b6a2 Remove about screen 2019-11-11 23:51:04 -08:00
Anton Tananaev 93456bf7fb Target Android 10 2019-09-26 00:04:21 -07:00
Anton Tananaev a2ff7fcb38 Update version number 2019-05-04 14:25:00 -07:00
Anton Tananaev 7015f75edb Update project files 2019-05-04 14:23:37 -07:00
Anton Tananaev 636ceaf027 Keep wake lock for service 2019-05-04 14:13:12 -07:00
Anton Tananaev 350b800184 Update app version 2019-01-26 20:36:35 -08:00
Anton Tananaev 7ecba2cffd Update translations (fix #393) 2019-01-26 20:33:59 -08:00
Anton Tananaev 5d8f0dfb83 Update app version 2019-01-06 14:49:43 -08:00
Anton Tananaev f42ecf9f09 Use fused location provider 2019-01-06 14:48:47 -08:00
Anton Tananaev 556856ab5c Update copyright notice 2019-01-06 14:23:45 -08:00
Anton Tananaev f9f37ead08 Split position provider implementation 2019-01-06 14:22:19 -08:00
Anton Tananaev b3ee99140e Fix unit tests 2019-01-06 12:12:51 -08:00
Anton Tananaev 85f1e09308 Fix compilation issue 2019-01-06 12:03:38 -08:00
Anton Tananaev 20fd20f425 Migrate to AndroidX libraries 2019-01-06 11:56:36 -08:00
Anton Tananaev 1ae7b27683 Use app compat classes 2019-01-06 11:44:08 -08:00
Anton Tananaev f5b12b9e74 Update project files 2019-01-06 11:41:08 -08:00
Anton Tananaev d2f653034d Update app version 2018-11-06 20:58:48 +13:00
Anton Tananaev ab5aec9721 Improvements in permissions handling 2018-11-06 20:57:17 +13:00
Anton Tananaev 1b0559c98a Update version number 2018-10-18 16:05:48 +13:00
Anton Tananaev 2e0e7ea453 Fix merge issues 2018-10-18 15:44:58 +13:00
Anton Tananaev ac6d677ff4 Explicitly select location providers 2018-10-18 15:43:07 +13:00
Anton Tananaev cbfe90757d Disable advertising id collection 2018-09-22 08:51:41 +12:00
Anton Tananaev a9f4390ae4 Update app version 2018-09-15 08:54:32 +12:00
Anton Tananaev 8a938701c8 Improve service handling 2018-09-15 08:54:09 +12:00
Anton Tananaev 2319834c5b Handle runtime exceptions 2018-09-15 08:48:37 +12:00
Anton Tananaev 1b93619e64 Update app version 2018-09-13 12:08:05 +12:00
Anton Tananaev 2a36e1aa6d Remove Lost library 2018-09-12 13:55:30 +12:00
Anton Tananaev 64687b26c2 Merge pull request #357 from oliv3/bug_350
Gracefully handle package downgrade (fix #350)
2018-09-06 08:17:42 +12:00
Olivier Girondel dcb60ab75e Gracefully handle package downgrade (fix #350) 2018-09-04 14:30:09 +02:00
Anton Tananaev 0b4c4cccc6 Merge pull request #347 from oliv3/statusSeconds
Display seconds in the status activity
2018-08-28 08:40:57 +12:00
Olivier Girondel ef5bfff70a Display seconds in the status activity 2018-08-25 15:11:57 +02:00
Anton Tananaev 855efc7acb Merge pull request #345 from oliv3/distance
Remove DistanceCalculator class
2018-08-21 08:46:33 +12:00
Olivier Girondel 0ae47e65d4 Remove DistanceCalculator class 2018-08-20 15:57:01 +02:00
Anton Tananaev e8d5e5c99b Update robolectric library 2018-08-09 14:46:02 +12:00
Anton Tananaev c3980780d8 Update project and dependencies 2018-08-09 14:33:05 +12:00
Anton Tananaev 3c11216334 Check API version 2018-05-06 16:44:56 -07:00
Anton Tananaev bcde8388d6 Update database version 2018-05-01 10:01:57 +12:00
Anton Tananaev 7f18915514 Merge pull request #327 from oliv3/mock_locations
Report mock locations
2018-04-30 13:54:15 +12:00
Olivier Girondel 42ad669fca Tell if a location is a mock 2018-04-30 02:16:10 +02:00
Anton Tananaev 3e2b508ea7 Update version number 2018-03-19 22:23:05 +13:00
Anton Tananaev fd4d616812 Check permissions in service 2018-03-19 22:22:45 +13:00
Anton Tananaev 4f6571e572 Update app version number 2018-03-18 21:28:11 +13:00
Anton Tananaev d3025b437b Replace firebase old crash reporting 2018-03-18 21:27:27 +13:00
Anton Tananaev 1e861ef0ac Fix hidden app URL open issue (fix #321) 2018-02-19 09:49:50 +13:00
Anton Tananaev 43afc57114 Merge pull request #318 from garyvdm/online_status
Show online/offline in connection changed status messages
2018-02-15 23:03:55 +13:00
Gary van der Merwe d47783808f Show online/offline in connection changed status messages. 2018-02-15 12:03:09 +02:00
Anton Tananaev 3ef2272227 Merge pull request #320 from garyvdm/revert-301-vector
Revert "Use vector icons"
2018-02-15 22:24:54 +13:00
Gary van der Merwe 3625ee42db Revert "Use vector icons." 2018-02-15 11:04:38 +02:00
Anton Tananaev 385826c3c1 Merge pull request #301 from garyvdm/vector
Use vector icons
2018-02-14 09:42:29 +13:00
Gary van der Merwe 1426926c8e Use vector icons. 2018-02-13 18:33:01 +02:00
Anton Tananaev 4f680d33c9 Merge pull request #311 from Bubu/patch-1
Add google maven repo
2018-01-23 08:20:51 +13:00
Marcus Hoffmann 2dad912da5 Add google() repo
This is required to build the app outside of Android Studio.

Fixes:
 > Could not find com.android.tools.build:gradle:3.0.1.
     Searched in the following locations:
         https://jcenter.bintray.com/com/android/tools/build/gradle/3.0.1/gradle-3.0.1.pom
         https://jcenter.bintray.com/com/android/tools/build/gradle/3.0.1/gradle-3.0.1.jar
2018-01-22 20:15:20 +01:00
119 изменённых файлов: 2863 добавлений и 2481 удалений
+1
Просмотреть файл
@@ -0,0 +1 @@
custom: https://www.traccar.org/donate/
-7
Просмотреть файл
@@ -1,7 +0,0 @@
<!--
Do you want to ask a question? Traccar official forum is the best place for getting support:
https://www.traccar.org/forums/
-->
+38
Просмотреть файл
@@ -0,0 +1,38 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
+20
Просмотреть файл
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
+47 -20
Просмотреть файл
@@ -1,47 +1,74 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
android { android {
compileSdkVersion 27 compileSdkVersion 30
buildToolsVersion '27.0.3'
defaultConfig { defaultConfig {
applicationId "org.traccar.client" applicationId 'org.traccar.client'
buildConfigField "boolean", "HIDDEN_APP", "false" buildConfigField 'boolean', 'HIDDEN_APP', 'false'
minSdkVersion 15 minSdkVersion 16
targetSdkVersion 27 targetSdkVersion 30
versionCode 45 versionCode 71
versionName '5.8' versionName '6.10'
multiDexEnabled true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
} }
lintOptions { lintOptions {
checkReleaseBuilds false checkReleaseBuilds false
} }
flavorDimensions "default" flavorDimensions 'default'
productFlavors { productFlavors {
regular regular {
isDefault = true
}
google google
hidden { hidden {
applicationId "org.traccar.client.hidden" applicationId 'org.traccar.client.hidden'
buildConfigField "boolean", "HIDDEN_APP", "true" buildConfigField 'boolean', 'HIDDEN_APP', 'true'
}
}
testOptions {
unitTests {
includeAndroidResources = true
} }
} }
} }
dependencies { dependencies {
compile 'com.android.support:design:27.0.2' implementation 'com.google.android.material:material:1.5.0-alpha01'
compile 'com.mapzen.android:lost:3.0.4' implementation 'androidx.multidex:multidex:2.0.1'
testCompile 'junit:junit:4.12' implementation 'androidx.preference:preference-ktx:1.1.1'
testCompile 'org.robolectric:robolectric:3.6.1' implementation 'androidx.test:core-ktx:1.4.0'
googleCompile 'com.google.firebase:firebase-core:11.8.0' implementation "androidx.core:core-ktx:1.6.0"
googleCompile 'com.google.firebase:firebase-crash:11.8.0' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.robolectric:robolectric:4.1'
googleImplementation platform('com.google.firebase:firebase-bom:28.2.1')
googleImplementation 'com.google.firebase:firebase-core'
googleImplementation 'com.google.firebase:firebase-analytics'
googleImplementation 'com.google.firebase:firebase-crashlytics'
googleImplementation 'com.google.android.gms:play-services-location:18.0.0'
googleImplementation 'com.google.android.play:core:1.10.0'
} }
if (getGradle().getStartParameter().getTaskRequests().toString().contains("Google")) { if (getGradle().getStartParameter().getTaskRequests().toString().contains('Google')) {
apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
task copyJson(type: Copy) { task copyJson(type: Copy) {
from '../../traccar-shared/google-services' from '../../environment/google-services'
into '.' into '.'
include 'traccar-client-android.json' include 'traccar-client-android.json'
rename('traccar-client-android.json', 'google-services.json') rename('traccar-client-android.json', 'google-services.json')
+2 -1
Просмотреть файл
@@ -5,7 +5,8 @@
<application <application
android:name="org.traccar.client.GoogleMainApplication" android:name="org.traccar.client.GoogleMainApplication"
tools:replace="android:name"> tools:replace="android:name"
tools:ignore="GoogleAppIndexingWarning">
</application> </application>
+61
Просмотреть файл
@@ -0,0 +1,61 @@
/*
* Copyright 2017 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.app.Activity
import android.content.IntentFilter
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.preference.PreferenceManager
import com.google.android.play.core.review.ReviewInfo
import com.google.android.play.core.review.ReviewManagerFactory
import com.google.android.play.core.tasks.Task
import com.google.firebase.analytics.FirebaseAnalytics
class GoogleMainApplication : MainApplication() {
private var firebaseAnalytics: FirebaseAnalytics? = null
override fun onCreate() {
super.onCreate()
firebaseAnalytics = FirebaseAnalytics.getInstance(this)
val filter = IntentFilter()
filter.addAction(TrackingService.ACTION_STARTED)
filter.addAction(TrackingService.ACTION_STOPPED)
registerReceiver(ServiceReceiver(), filter)
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
override fun handleRatingFlow(activity: Activity) {
val preferences = PreferenceManager.getDefaultSharedPreferences(this)
val ratingShown = preferences.getBoolean(KEY_RATING_SHOWN, false)
val totalDuration = preferences.getLong(ServiceReceiver.KEY_DURATION, 0)
if (!ratingShown && totalDuration > RATING_THRESHOLD) {
val reviewManager = ReviewManagerFactory.create(activity)
reviewManager.requestReviewFlow().addOnCompleteListener { infoTask: Task<ReviewInfo?> ->
if (infoTask.isSuccessful) {
val flow = reviewManager.launchReviewFlow(activity, infoTask.result)
flow.addOnCompleteListener { preferences.edit().putBoolean(KEY_RATING_SHOWN, true).apply() }
}
}
}
}
companion object {
private const val KEY_RATING_SHOWN = "ratingShown"
private const val RATING_THRESHOLD = -24 * 60 * 60 * 1000L
}
}
+66
Просмотреть файл
@@ -0,0 +1,66 @@
/*
* Copyright 2019 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.annotation.SuppressLint
import android.content.Context
import android.os.Looper
import com.google.android.gms.location.LocationCallback
import com.google.android.gms.location.LocationRequest
import com.google.android.gms.location.LocationResult
import com.google.android.gms.location.LocationServices
class GooglePositionProvider(context: Context, listener: PositionListener) : PositionProvider(context, listener) {
private val fusedLocationClient = LocationServices.getFusedLocationProviderClient(context)
@Suppress("DEPRECATION", "MissingPermission")
override fun startUpdates() {
val locationRequest = LocationRequest()
locationRequest.priority = getPriority(preferences.getString(MainFragment.KEY_ACCURACY,"medium"))
locationRequest.interval = if (distance > 0 || angle > 0) MINIMUM_INTERVAL else interval
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())
}
override fun stopUpdates() {
fusedLocationClient.removeLocationUpdates(locationCallback)
}
@SuppressLint("MissingPermission")
override fun requestSingleLocation() {
fusedLocationClient.lastLocation.addOnSuccessListener { location ->
if (location != null) {
listener.onPositionUpdate(Position(deviceId, location, getBatteryLevel(context)))
}
}
}
private val locationCallback: LocationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
for (location in locationResult.locations) {
processLocation(location)
}
}
}
private fun getPriority(accuracy: String?): Int {
return when (accuracy) {
"high" -> LocationRequest.PRIORITY_HIGH_ACCURACY
"low" -> LocationRequest.PRIORITY_LOW_POWER
else -> LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY
}
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright 2017 Anton Tananaev (anton.tananaev@gmail.com) * Copyright 2019 - 2021 Anton Tananaev (anton@traccar.org)
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -13,20 +13,14 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.traccar.client; package org.traccar.client
import android.os.Bundle; import android.content.Context
import android.support.annotation.Nullable; import org.traccar.client.PositionProvider.PositionListener
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity { object PositionProviderFactory {
@Override fun create(context: Context, listener: PositionListener): PositionProvider {
protected void onCreate(@Nullable Bundle savedInstanceState) { return GooglePositionProvider(context, listener)
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction().replace(android.R.id.content, new MainFragment()).commit();
} }
}
} }
+44
Просмотреть файл
@@ -0,0 +1,44 @@
/*
* Copyright 2020 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import androidx.preference.PreferenceManager
class ServiceReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (TrackingService.ACTION_STARTED == intent.action) {
startTime = System.currentTimeMillis()
} else if (startTime > 0) {
updateTime(context, System.currentTimeMillis() - startTime)
startTime = 0
}
}
private fun updateTime(context: Context, duration: Long) {
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
val totalDuration = preferences.getLong(KEY_DURATION, 0)
preferences.edit().putLong(KEY_DURATION, totalDuration + duration).apply()
}
companion object {
const val KEY_DURATION = "serviceTime"
private var startTime: Long = 0
}
}
+1 -1
Просмотреть файл
@@ -9,7 +9,7 @@
tools:replace="android:label"> tools:replace="android:label">
<activity <activity
android:name=".MainActivity"> android:name="org.traccar.client.MainActivity">
<intent-filter android:label="@string/app_name"> <intent-filter android:label="@string/app_name">
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
+26
Просмотреть файл
@@ -0,0 +1,26 @@
/*
* Copyright 2019 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.content.Context
import org.traccar.client.PositionProvider.PositionListener
object PositionProviderFactory {
fun create(context: Context, listener: PositionListener): PositionProvider {
return AndroidPositionProvider(context, listener)
}
}
+1 -1
Просмотреть файл
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/white"/> <background android:drawable="@color/light"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/> <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon> </adaptive-icon>
+1 -1
Просмотреть файл
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/white"/> <background android:drawable="@color/light"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/> <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon> </adaptive-icon>
+17 -5
Просмотреть файл
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest <manifest
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.traccar.client"> package="org.traccar.client">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
@@ -9,14 +10,24 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-feature android:name="android.hardware.location.network" />
<uses-feature android:name="android.hardware.location.gps" />
<application <application
android:allowBackup="true" android:allowBackup="true"
android:networkSecurityConfig="@xml/network_security_config"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/AppTheme" android:theme="@style/AppTheme"
android:name=".MainApplication"> android:name=".MainApplication"
tools:ignore="GoogleAppIndexingWarning">
<meta-data
android:name="google_analytics_adid_collection_enabled"
android:value="false" />
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
@@ -36,8 +47,6 @@
<activity android:name=".StatusActivity"/> <activity android:name=".StatusActivity"/>
<activity android:name=".AboutActivity"/>
<activity <activity
android:name=".ShortcutActivity" android:name=".ShortcutActivity"
android:label="@string/menu_shortcuts"> android:label="@string/menu_shortcuts">
@@ -47,9 +56,12 @@
</intent-filter> </intent-filter>
</activity> </activity>
<service android:name=".TrackingService" /> <service
android:name=".TrackingService"
android:foregroundServiceType="location" />
<service android:name=".TrackingService$HideNotificationService" /> <service
android:name=".TrackingService$HideNotificationService" />
<receiver android:name=".AutostartReceiver"> <receiver android:name=".AutostartReceiver">
<intent-filter> <intent-filter>
Двоичные данные
Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 48 KiB

После

Ширина:  |  Высота:  |  Размер: 26 KiB

-39
Просмотреть файл
@@ -1,39 +0,0 @@
/*
* Copyright 2012 - 2017 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;
public class AboutActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
TextView title = findViewById(R.id.title);
try {
title.setText(title.getText() + " " + getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName);
} catch (NameNotFoundException e) {
Log.w(AboutActivity.class.getSimpleName(), e);
}
}
}
+83
Просмотреть файл
@@ -0,0 +1,83 @@
/*
* Copyright 2019 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.annotation.SuppressLint
import android.content.Context
import android.location.Location
import android.location.LocationListener
import android.location.LocationManager
import android.os.Bundle
import android.os.Looper
class AndroidPositionProvider(context: Context, listener: PositionListener) : PositionProvider(context, listener), LocationListener {
private val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
private val provider = getProvider(preferences.getString(MainFragment.KEY_ACCURACY, "medium"))
@SuppressLint("MissingPermission")
override fun startUpdates() {
try {
locationManager.requestLocationUpdates(
provider, if (distance > 0 || angle > 0) MINIMUM_INTERVAL else interval, 0f, this)
} catch (e: RuntimeException) {
listener.onPositionError(e)
}
}
override fun stopUpdates() {
locationManager.removeUpdates(this)
}
@Suppress("DEPRECATION", "MissingPermission")
override fun requestSingleLocation() {
try {
val location = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER)
if (location != null) {
listener.onPositionUpdate(Position(deviceId, location, getBatteryLevel(context)))
} else {
locationManager.requestSingleUpdate(provider, object : LocationListener {
override fun onLocationChanged(location: Location) {
listener.onPositionUpdate(Position(deviceId, location, getBatteryLevel(context)))
}
override fun onStatusChanged(provider: String, status: Int, extras: Bundle) {}
override fun onProviderEnabled(provider: String) {}
override fun onProviderDisabled(provider: String) {}
}, Looper.myLooper())
}
} catch (e: RuntimeException) {
listener.onPositionError(e)
}
}
override fun onLocationChanged(location: Location) {
processLocation(location)
}
override fun onStatusChanged(provider: String, status: Int, extras: Bundle) {}
override fun onProviderEnabled(provider: String) {}
override fun onProviderDisabled(provider: String) {}
private fun getProvider(accuracy: String?): String {
return when (accuracy) {
"high" -> LocationManager.GPS_PROVIDER
"low" -> LocationManager.PASSIVE_PROVIDER
else -> LocationManager.NETWORK_PROVIDER
}
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright 2013 - 2017 Anton Tananaev (anton.tananaev@gmail.com) * Copyright 2013 - 2021 Anton Tananaev (anton@traccar.org)
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -13,20 +13,19 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.traccar.client; package org.traccar.client
import android.content.Context; import android.content.Context
import android.content.Intent; import android.content.Intent
import android.content.SharedPreferences; import androidx.preference.PreferenceManager
import android.preference.PreferenceManager;
public class AutostartReceiver extends WakefulBroadcastReceiver { class AutostartReceiver : WakefulBroadcastReceiver() {
@Override @Suppress("UnsafeProtectedBroadcastReceiver")
public void onReceive(Context context, Intent intent) { override fun onReceive(context: Context, intent: Intent) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
if (sharedPreferences.getBoolean(MainFragment.KEY_STATUS, false)) { if (sharedPreferences.getBoolean(MainFragment.KEY_STATUS, false)) {
startWakefulForegroundService(context, new Intent(context, TrackingService.class)); startWakefulForegroundService(context, Intent(context, TrackingService::class.java))
} }
} }
-172
Просмотреть файл
@@ -1,172 +0,0 @@
/*
* Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.AsyncTask;
import java.util.Date;
public class DatabaseHelper extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 2;
public static final String DATABASE_NAME = "traccar.db";
public interface DatabaseHandler<T> {
void onComplete(boolean success, T result);
}
private static abstract class DatabaseAsyncTask<T> extends AsyncTask<Void, Void, T> {
private DatabaseHandler<T> handler;
private RuntimeException error;
public DatabaseAsyncTask(DatabaseHandler<T> handler) {
this.handler = handler;
}
@Override
protected T doInBackground(Void... params) {
try {
return executeMethod();
} catch (RuntimeException error) {
this.error = error;
return null;
}
}
protected abstract T executeMethod();
@Override
protected void onPostExecute(T result) {
handler.onComplete(error == null, result);
}
}
private SQLiteDatabase db;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
db = getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE position (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"deviceId TEXT," +
"time INTEGER," +
"latitude REAL," +
"longitude REAL," +
"altitude REAL," +
"speed REAL," +
"course REAL," +
"accuracy REAL," +
"battery REAL)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS position;");
onCreate(db);
}
public void insertPosition(Position position) {
ContentValues values = new ContentValues();
values.put("deviceId", position.getDeviceId());
values.put("time", position.getTime().getTime());
values.put("latitude", position.getLatitude());
values.put("longitude", position.getLongitude());
values.put("altitude", position.getAltitude());
values.put("speed", position.getSpeed());
values.put("course", position.getCourse());
values.put("accuracy", position.getAccuracy());
values.put("battery", position.getBattery());
db.insertOrThrow("position", null, values);
}
public void insertPositionAsync(final Position position, DatabaseHandler<Void> handler) {
new DatabaseAsyncTask<Void>(handler) {
@Override
protected Void executeMethod() {
insertPosition(position);
return null;
}
}.execute();
}
public Position selectPosition() {
Position position = new Position();
Cursor cursor = db.rawQuery("SELECT * FROM position ORDER BY id LIMIT 1", null);
try {
if (cursor.getCount() > 0) {
cursor.moveToFirst();
position.setId(cursor.getLong(cursor.getColumnIndex("id")));
position.setDeviceId(cursor.getString(cursor.getColumnIndex("deviceId")));
position.setTime(new Date(cursor.getLong(cursor.getColumnIndex("time"))));
position.setLatitude(cursor.getDouble(cursor.getColumnIndex("latitude")));
position.setLongitude(cursor.getDouble(cursor.getColumnIndex("longitude")));
position.setAltitude(cursor.getDouble(cursor.getColumnIndex("altitude")));
position.setSpeed(cursor.getDouble(cursor.getColumnIndex("speed")));
position.setCourse(cursor.getDouble(cursor.getColumnIndex("course")));
position.setAccuracy(cursor.getDouble(cursor.getColumnIndex("accuracy")));
position.setBattery(cursor.getDouble(cursor.getColumnIndex("battery")));
} else {
return null;
}
} finally {
cursor.close();
}
return position;
}
public void selectPositionAsync(DatabaseHandler<Position> handler) {
new DatabaseAsyncTask<Position>(handler) {
@Override
protected Position executeMethod() {
return selectPosition();
}
}.execute();
}
public void deletePosition(long id) {
if (db.delete("position", "id = ?", new String[] { String.valueOf(id) }) != 1) {
throw new SQLException();
}
}
public void deletePositionAsync(final long id, DatabaseHandler<Void> handler) {
new DatabaseAsyncTask<Void>(handler) {
@Override
protected Void executeMethod() {
deletePosition(id);
return null;
}
}.execute();
}
}
+154
Просмотреть файл
@@ -0,0 +1,154 @@
/*
* Copyright 2015 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@file:Suppress("DEPRECATION", "StaticFieldLeak")
package org.traccar.client
import android.content.ContentValues
import android.content.Context
import android.database.SQLException
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import android.os.AsyncTask
import java.sql.Date
class DatabaseHelper(context: Context?) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
interface DatabaseHandler<T> {
fun onComplete(success: Boolean, result: T)
}
private abstract class DatabaseAsyncTask<T>(val handler: DatabaseHandler<T>) : AsyncTask<Unit, Unit, T?>() {
private var error: RuntimeException? = null
override fun doInBackground(vararg params: Unit): T? {
return try {
executeMethod()
} catch (error: RuntimeException) {
this.error = error
null
}
}
protected abstract fun executeMethod(): T
override fun onPostExecute(result: T?) {
result?.let { handler.onComplete(error == null, result) }
}
}
private val db: SQLiteDatabase = writableDatabase
override fun onCreate(db: SQLiteDatabase) {
db.execSQL(
"CREATE TABLE position (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"deviceId TEXT," +
"time INTEGER," +
"latitude REAL," +
"longitude REAL," +
"altitude REAL," +
"speed REAL," +
"course REAL," +
"accuracy REAL," +
"battery REAL," +
"mock INTEGER)"
)
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
db.execSQL("DROP TABLE IF EXISTS position;")
onCreate(db)
}
override fun onDowngrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
db.execSQL("DROP TABLE IF EXISTS position;")
onCreate(db)
}
fun insertPosition(position: Position) {
val values = ContentValues()
values.put("deviceId", position.deviceId)
values.put("time", position.time.time)
values.put("latitude", position.latitude)
values.put("longitude", position.longitude)
values.put("altitude", position.altitude)
values.put("speed", position.speed)
values.put("course", position.course)
values.put("accuracy", position.accuracy)
values.put("battery", position.battery)
values.put("mock", if (position.mock) 1 else 0)
db.insertOrThrow("position", null, values)
}
fun insertPositionAsync(position: Position, handler: DatabaseHandler<Unit>) {
object : DatabaseAsyncTask<Unit>(handler) {
override fun executeMethod() {
insertPosition(position)
}
}.execute()
}
fun selectPosition(): Position? {
db.rawQuery("SELECT * FROM position ORDER BY id LIMIT 1", null).use { cursor ->
if (cursor.count > 0) {
cursor.moveToFirst()
return Position(
id = cursor.getLong(cursor.getColumnIndex("id")),
deviceId = cursor.getString(cursor.getColumnIndex("deviceId")),
time = Date(cursor.getLong(cursor.getColumnIndex("time"))),
latitude = cursor.getDouble(cursor.getColumnIndex("latitude")),
longitude = cursor.getDouble(cursor.getColumnIndex("longitude")),
altitude = cursor.getDouble(cursor.getColumnIndex("altitude")),
speed = cursor.getDouble(cursor.getColumnIndex("speed")),
course = cursor.getDouble(cursor.getColumnIndex("course")),
accuracy = cursor.getDouble(cursor.getColumnIndex("accuracy")),
battery = cursor.getDouble(cursor.getColumnIndex("battery")),
mock = cursor.getInt(cursor.getColumnIndex("mock")) > 0,
)
}
}
return null
}
fun selectPositionAsync(handler: DatabaseHandler<Position?>) {
object : DatabaseAsyncTask<Position?>(handler) {
override fun executeMethod(): Position? {
return selectPosition()
}
}.execute()
}
fun deletePosition(id: Long) {
if (db.delete("position", "id = ?", arrayOf(id.toString())) != 1) {
throw SQLException()
}
}
fun deletePositionAsync(id: Long, handler: DatabaseHandler<Unit>) {
object : DatabaseAsyncTask<Unit>(handler) {
override fun executeMethod() {
deletePosition(id)
}
}.execute()
}
companion object {
const val DATABASE_VERSION = 3
const val DATABASE_NAME = "traccar.db"
}
}
-37
Просмотреть файл
@@ -1,37 +0,0 @@
/*
* Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class DialLaunchReceiver extends BroadcastReceiver {
private static final String LAUNCHER_NUMBER = "8722227"; // TRACCAR
@Override
public void onReceive(Context context, Intent intent) {
String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
if (phoneNumber.equals(LAUNCHER_NUMBER)) {
setResultData(null);
Intent appIntent = new Intent(context, MainActivity.class);
appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(appIntent);
}
}
}
+38
Просмотреть файл
@@ -0,0 +1,38 @@
/*
* Copyright 2015 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
class DialLaunchReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER)
if (phoneNumber == LAUNCHER_NUMBER) {
resultData = null
val appIntent = Intent(context, MainActivity::class.java)
appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(appIntent)
}
}
companion object {
private const val LAUNCHER_NUMBER = "8722227" // TRACCAR
}
}
-33
Просмотреть файл
@@ -1,33 +0,0 @@
/*
* Copyright 2017 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
public final class DistanceCalculator {
private static final double EQUATORIAL_EARTH_RADIUS = 6378.1370;
private static final double DEG_TO_RAD = Math.PI / 180;
public static double distance(double lat1, double lon1, double lat2, double lon2) {
double dlong = (lon2 - lon1) * DEG_TO_RAD;
double dlat = (lat2 - lat1) * DEG_TO_RAD;
double a = Math.pow(Math.sin(dlat / 2), 2)
+ Math.cos(lat1 * DEG_TO_RAD) * Math.cos(lat2 * DEG_TO_RAD) * Math.pow(Math.sin(dlong / 2), 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double d = EQUATORIAL_EARTH_RADIUS * c;
return d * 1000;
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright 2017 Anton Tananaev (anton.tananaev@gmail.com) * Copyright 2017 - 2021 Anton Tananaev (anton@traccar.org)
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -13,18 +13,16 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.traccar.client; package org.traccar.client
import com.google.firebase.analytics.FirebaseAnalytics; import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
public class GoogleMainApplication extends MainApplication { class MainActivity : AppCompatActivity() {
private FirebaseAnalytics firebaseAnalytics; override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@Override setContentView(R.layout.main)
public void onCreate() {
super.onCreate();
firebaseAnalytics = FirebaseAnalytics.getInstance(this);
} }
} }
-73
Просмотреть файл
@@ -1,73 +0,0 @@
/*
* Copyright 2016 - 2017 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.annotation.TargetApi;
import android.app.Application;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.preference.PreferenceManager;
public class MainApplication extends Application {
public static final String PRIMARY_CHANNEL = "default";
@Override
public void onCreate() {
super.onCreate();
System.setProperty("http.keepAliveDuration", String.valueOf(30 * 60 * 1000));
migrateLegacyPreferences(PreferenceManager.getDefaultSharedPreferences(this));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
registerChannel();
}
}
@TargetApi(Build.VERSION_CODES.O)
private void registerChannel() {
NotificationChannel channel = new NotificationChannel(
PRIMARY_CHANNEL, getString(R.string.channel_default), NotificationManager.IMPORTANCE_MIN);
channel.setLightColor(Color.GREEN);
channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
}
private void migrateLegacyPreferences(SharedPreferences preferences) {
String port = preferences.getString("port", null);
if (port != null) {
String host = preferences.getString("address", getString(R.string.settings_url_default_value));
String scheme = preferences.getBoolean("secure", false) ? "https" : "http";
Uri.Builder builder = new Uri.Builder();
builder.scheme(scheme).encodedAuthority(host + ":" + port).build();
SharedPreferences.Editor editor = preferences.edit();
editor.putString(MainFragment.KEY_URL, builder.toString());
editor.remove("port");
editor.remove("address");
editor.remove("secure");
editor.apply();
}
}
}
+53
Просмотреть файл
@@ -0,0 +1,53 @@
/*
* Copyright 2016 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import androidx.multidex.MultiDexApplication
import android.annotation.TargetApi
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.Notification
import android.graphics.Color
import android.os.Build
import android.app.Activity
open class MainApplication : MultiDexApplication() {
override fun onCreate() {
super.onCreate()
System.setProperty("http.keepAliveDuration", (30 * 60 * 1000).toString())
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
registerChannel()
}
}
@TargetApi(Build.VERSION_CODES.O)
private fun registerChannel() {
val channel = NotificationChannel(
PRIMARY_CHANNEL, getString(R.string.channel_default), NotificationManager.IMPORTANCE_LOW
)
channel.lightColor = Color.GREEN
channel.lockscreenVisibility = Notification.VISIBILITY_SECRET
(getSystemService(NOTIFICATION_SERVICE) as NotificationManager).createNotificationChannel(channel)
}
open fun handleRatingFlow(activity: Activity) {}
companion object {
const val PRIMARY_CHANNEL = "default"
}
}
-285
Просмотреть файл
@@ -1,285 +0,0 @@
/*
* Copyright 2012 - 2017 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.Manifest;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.TwoStatePreference;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.webkit.URLUtil;
import android.widget.Toast;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class MainFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
private static final String TAG = MainFragment.class.getSimpleName();
private static final int ALARM_MANAGER_INTERVAL = 15000;
public static final String KEY_DEVICE = "id";
public static final String KEY_URL = "url";
public static final String KEY_INTERVAL = "interval";
public static final String KEY_DISTANCE = "distance";
public static final String KEY_ANGLE = "angle";
public static final String KEY_ACCURACY = "accuracy";
public static final String KEY_STATUS = "status";
private static final int PERMISSIONS_REQUEST_LOCATION = 2;
private SharedPreferences sharedPreferences;
private AlarmManager alarmManager;
private PendingIntent alarmIntent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (BuildConfig.HIDDEN_APP) {
removeLauncherIcon();
}
setHasOptionsMenu(true);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
addPreferencesFromResource(R.xml.preferences);
initPreferences();
findPreference(KEY_DEVICE).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
return newValue != null && !newValue.equals("");
}
});
findPreference(KEY_URL).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
return (newValue != null) && validateServerURL(newValue.toString());
}
});
findPreference(KEY_INTERVAL).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null) {
try {
int value = Integer.parseInt((String) newValue);
return value > 0;
} catch (NumberFormatException e) {
Log.w(TAG, e);
}
}
return false;
}
});
Preference.OnPreferenceChangeListener numberValidationListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null) {
try {
int value = Integer.parseInt((String) newValue);
return value >= 0;
} catch (NumberFormatException e) {
Log.w(TAG, e);
}
}
return false;
}
};
findPreference(KEY_DISTANCE).setOnPreferenceChangeListener(numberValidationListener);
findPreference(KEY_ANGLE).setOnPreferenceChangeListener(numberValidationListener);
alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
alarmIntent = PendingIntent.getBroadcast(getActivity(), 0, new Intent(getActivity(), AutostartReceiver.class), 0);
if (sharedPreferences.getBoolean(KEY_STATUS, false)) {
startTrackingService(true, false);
}
}
private void removeLauncherIcon() {
String className = MainActivity.class.getCanonicalName().replace(".MainActivity", ".Launcher");
ComponentName componentName = new ComponentName(getActivity().getPackageName(), className);
PackageManager packageManager = getActivity().getPackageManager();
if (packageManager.getComponentEnabledSetting(componentName) != PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
packageManager.setComponentEnabledSetting(
componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setMessage(getString(R.string.hidden_alert));
builder.setPositiveButton(android.R.string.ok, null);
builder.show();
}
}
private boolean hasPermission(String permission) {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
return true;
}
return ContextCompat.checkSelfPermission(getActivity(), permission) == PackageManager.PERMISSION_GRANTED;
}
@Override
public void onResume() {
super.onResume();
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
}
private void setPreferencesEnabled(boolean enabled) {
findPreference(KEY_DEVICE).setEnabled(enabled);
findPreference(KEY_URL).setEnabled(enabled);
findPreference(KEY_INTERVAL).setEnabled(enabled);
findPreference(KEY_DISTANCE).setEnabled(enabled);
findPreference(KEY_ANGLE).setEnabled(enabled);
findPreference(KEY_ACCURACY).setEnabled(enabled);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(KEY_STATUS)) {
if (sharedPreferences.getBoolean(KEY_STATUS, false)) {
startTrackingService(true, false);
} else {
stopTrackingService();
}
} else if (key.equals(KEY_DEVICE)) {
findPreference(KEY_DEVICE).setSummary(sharedPreferences.getString(KEY_DEVICE, null));
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.main, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.status) {
startActivity(new Intent(getActivity(), StatusActivity.class));
return true;
} else if (item.getItemId() == R.id.about) {
startActivity(new Intent(getActivity(), AboutActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
private void initPreferences() {
PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
if (!sharedPreferences.contains(KEY_DEVICE)) {
String id = String.valueOf(new Random().nextInt(900000) + 100000);
sharedPreferences.edit().putString(KEY_DEVICE, id).apply();
((EditTextPreference) findPreference(KEY_DEVICE)).setText(id);
}
findPreference(KEY_DEVICE).setSummary(sharedPreferences.getString(KEY_DEVICE, null));
}
private void startTrackingService(boolean checkPermission, boolean permission) {
if (checkPermission) {
Set<String> missingPermissions = new HashSet<>();
if (!hasPermission(Manifest.permission.ACCESS_FINE_LOCATION)) {
missingPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (!hasPermission(Manifest.permission.ACCESS_COARSE_LOCATION)) {
missingPermissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
}
if (missingPermissions.isEmpty()) {
permission = true;
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(missingPermissions.toArray(new String[missingPermissions.size()]),
PERMISSIONS_REQUEST_LOCATION);
}
return;
}
}
if (permission) {
setPreferencesEnabled(false);
ContextCompat.startForegroundService(getActivity(), new Intent(getActivity(), TrackingService.class));
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
ALARM_MANAGER_INTERVAL, ALARM_MANAGER_INTERVAL, alarmIntent);
} else {
sharedPreferences.edit().putBoolean(KEY_STATUS, false).apply();
TwoStatePreference preference = (TwoStatePreference) findPreference(KEY_STATUS);
preference.setChecked(false);
}
}
private void stopTrackingService() {
alarmManager.cancel(alarmIntent);
getActivity().stopService(new Intent(getActivity(), TrackingService.class));
setPreferencesEnabled(true);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSIONS_REQUEST_LOCATION) {
boolean granted = true;
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
granted = false;
break;
}
}
startTrackingService(false, granted);
}
}
private boolean validateServerURL(String userUrl) {
int port = Uri.parse(userUrl).getPort();
if (URLUtil.isValidUrl(userUrl) && (port == -1 || (port > 0 && port <= 65535))
&& (URLUtil.isHttpUrl(userUrl) || URLUtil.isHttpsUrl(userUrl))) {
return true;
}
Toast.makeText(getActivity(), R.string.error_msg_invalid_url, Toast.LENGTH_LONG).show();
return false;
}
}
+283
Просмотреть файл
@@ -0,0 +1,283 @@
/*
* Copyright 2012 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.Manifest
import android.annotation.SuppressLint
import android.app.AlarmManager
import android.app.PendingIntent
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.text.InputType
import android.util.Log
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.webkit.URLUtil
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import androidx.preference.EditTextPreference
import androidx.preference.EditTextPreferenceDialogFragmentCompat
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager
import androidx.preference.TwoStatePreference
import java.util.*
import kotlin.collections.HashSet
class MainFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeListener {
private lateinit var sharedPreferences: SharedPreferences
private lateinit var alarmManager: AlarmManager
private lateinit var alarmIntent: PendingIntent
@SuppressLint("UnspecifiedImmutableFlag")
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
if (BuildConfig.HIDDEN_APP && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
removeLauncherIcon()
}
setHasOptionsMenu(true)
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
setPreferencesFromResource(R.xml.preferences, rootKey)
initPreferences()
findPreference<Preference>(KEY_DEVICE)?.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
newValue != null && newValue != ""
}
findPreference<Preference>(KEY_URL)?.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
newValue != null && validateServerURL(newValue.toString())
}
findPreference<Preference>(KEY_INTERVAL)?.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
try {
newValue != null && (newValue as String).toInt() > 0
} catch (e: NumberFormatException) {
Log.w(TAG, e)
false
}
}
val numberValidationListener = Preference.OnPreferenceChangeListener { _, newValue ->
try {
newValue != null && (newValue as String).toInt() >= 0
} catch (e: NumberFormatException) {
Log.w(TAG, e)
false
}
}
findPreference<Preference>(KEY_DISTANCE)?.onPreferenceChangeListener = numberValidationListener
findPreference<Preference>(KEY_ANGLE)?.onPreferenceChangeListener = numberValidationListener
alarmManager = requireActivity().getSystemService(Context.ALARM_SERVICE) as AlarmManager
alarmIntent = PendingIntent.getBroadcast(activity, 0, Intent(activity, AutostartReceiver::class.java), 0)
if (sharedPreferences.getBoolean(KEY_STATUS, false)) {
startTrackingService(checkPermission = true, initialPermission = false)
}
}
class NumericEditTextPreferenceDialogFragment : EditTextPreferenceDialogFragmentCompat() {
override fun onBindDialogView(view: View) {
val editText = view.findViewById<EditText>(android.R.id.edit)
editText.inputType = InputType.TYPE_CLASS_NUMBER
super.onBindDialogView(view)
}
companion object {
fun newInstance(key: String?): NumericEditTextPreferenceDialogFragment {
val fragment = NumericEditTextPreferenceDialogFragment()
val bundle = Bundle()
bundle.putString(ARG_KEY, key)
fragment.arguments = bundle
return fragment
}
}
}
override fun onDisplayPreferenceDialog(preference: Preference) {
if (listOf(KEY_INTERVAL, KEY_DISTANCE, KEY_ANGLE).contains(preference.key)) {
val f: EditTextPreferenceDialogFragmentCompat =
NumericEditTextPreferenceDialogFragment.newInstance(preference.key)
f.setTargetFragment(this, 0)
f.show(requireFragmentManager(), "androidx.preference.PreferenceFragment.DIALOG")
} else {
super.onDisplayPreferenceDialog(preference)
}
}
private fun removeLauncherIcon() {
val className = MainActivity::class.java.canonicalName!!.replace(".MainActivity", ".Launcher")
val componentName = ComponentName(requireActivity().packageName, className)
val packageManager = requireActivity().packageManager
if (packageManager.getComponentEnabledSetting(componentName) != PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
packageManager.setComponentEnabledSetting(
componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP
)
val builder = AlertDialog.Builder(requireActivity())
builder.setIcon(android.R.drawable.ic_dialog_alert)
builder.setMessage(getString(R.string.hidden_alert))
builder.setPositiveButton(android.R.string.ok, null)
builder.show()
}
}
override fun onResume() {
super.onResume()
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
}
override fun onPause() {
super.onPause()
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
}
private fun setPreferencesEnabled(enabled: Boolean) {
findPreference<Preference>(KEY_DEVICE)?.isEnabled = enabled
findPreference<Preference>(KEY_URL)?.isEnabled = enabled
findPreference<Preference>(KEY_INTERVAL)?.isEnabled = enabled
findPreference<Preference>(KEY_DISTANCE)?.isEnabled = enabled
findPreference<Preference>(KEY_ANGLE)?.isEnabled = enabled
findPreference<Preference>(KEY_ACCURACY)?.isEnabled = enabled
findPreference<Preference>(KEY_BUFFER)?.isEnabled = enabled
findPreference<Preference>(KEY_WAKELOCK)?.isEnabled = enabled
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
if (key == KEY_STATUS) {
if (sharedPreferences.getBoolean(KEY_STATUS, false)) {
startTrackingService(checkPermission = true, initialPermission = false)
} else {
stopTrackingService()
}
(requireActivity().application as MainApplication).handleRatingFlow(requireActivity())
} else if (key == KEY_DEVICE) {
findPreference<Preference>(KEY_DEVICE)?.summary = sharedPreferences.getString(KEY_DEVICE, null)
}
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.main, menu)
super.onCreateOptionsMenu(menu, inflater)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.status) {
startActivity(Intent(activity, StatusActivity::class.java))
return true
}
return super.onOptionsItemSelected(item)
}
private fun initPreferences() {
PreferenceManager.setDefaultValues(activity, R.xml.preferences, false)
if (!sharedPreferences.contains(KEY_DEVICE)) {
val id = (Random().nextInt(900000) + 100000).toString()
sharedPreferences.edit().putString(KEY_DEVICE, id).apply()
findPreference<EditTextPreference>(KEY_DEVICE)?.text = id
}
findPreference<Preference>(KEY_DEVICE)?.summary = sharedPreferences.getString(KEY_DEVICE, null)
}
private fun startTrackingService(checkPermission: Boolean, initialPermission: Boolean) {
var permission = initialPermission
if (checkPermission) {
val requiredPermissions: MutableSet<String> = HashSet()
if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requiredPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION)
}
permission = requiredPermissions.isEmpty()
if (!permission) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(
requiredPermissions.toTypedArray(),
PERMISSIONS_REQUEST_LOCATION
)
}
return
}
}
if (permission) {
setPreferencesEnabled(false)
ContextCompat.startForegroundService(requireContext(), Intent(activity, TrackingService::class.java))
alarmManager.setInexactRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
ALARM_MANAGER_INTERVAL.toLong(), ALARM_MANAGER_INTERVAL.toLong(), alarmIntent
)
} else {
sharedPreferences.edit().putBoolean(KEY_STATUS, false).apply()
val preference = findPreference<TwoStatePreference>(KEY_STATUS)
preference?.isChecked = false
}
}
private fun stopTrackingService() {
alarmManager.cancel(alarmIntent)
requireActivity().stopService(Intent(activity, TrackingService::class.java))
setPreferencesEnabled(true)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
if (requestCode == PERMISSIONS_REQUEST_LOCATION) {
var granted = true
for (result in grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
granted = false
break
}
}
startTrackingService(false, granted)
}
}
private fun validateServerURL(userUrl: String): Boolean {
val port = Uri.parse(userUrl).port
if (
URLUtil.isValidUrl(userUrl) &&
(port == -1 || port in 1..65535) &&
(URLUtil.isHttpUrl(userUrl) || URLUtil.isHttpsUrl(userUrl))
) {
return true
}
Toast.makeText(activity, R.string.error_msg_invalid_url, Toast.LENGTH_LONG).show()
return false
}
companion object {
private val TAG = MainFragment::class.java.simpleName
private const val ALARM_MANAGER_INTERVAL = 15000
const val KEY_DEVICE = "id"
const val KEY_URL = "url"
const val KEY_INTERVAL = "interval"
const val KEY_DISTANCE = "distance"
const val KEY_ANGLE = "angle"
const val KEY_ACCURACY = "accuracy"
const val KEY_STATUS = "status"
const val KEY_BUFFER = "buffer"
const val KEY_WAKELOCK = "wakelock"
private const val PERMISSIONS_REQUEST_LOCATION = 2
}
}
-68
Просмотреть файл
@@ -1,68 +0,0 @@
/*
* Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
public class NetworkManager extends BroadcastReceiver {
private static final String TAG = NetworkManager.class.getSimpleName();
private Context context;
private NetworkHandler handler;
private ConnectivityManager connectivityManager;
public NetworkManager(Context context, NetworkHandler handler) {
this.context = context;
this.handler = handler;
connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
}
public interface NetworkHandler {
void onNetworkUpdate(boolean isOnline);
}
public boolean isOnline() {
NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
}
public void start() {
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
context.registerReceiver(this, filter);
}
public void stop() {
context.unregisterReceiver(this);
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION) && handler != null) {
boolean isOnline = isOnline();
Log.i(TAG, "network " + (isOnline ? "on" : "off"));
handler.onNetworkUpdate(isOnline);
}
}
}
+62
Просмотреть файл
@@ -0,0 +1,62 @@
/*
* Copyright 2015 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@file:Suppress("DEPRECATION")
package org.traccar.client
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.ConnectivityManager
import android.util.Log
class NetworkManager(private val context: Context, private val handler: NetworkHandler?) : BroadcastReceiver() {
private val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
interface NetworkHandler {
fun onNetworkUpdate(isOnline: Boolean)
}
val isOnline: Boolean
get() {
val activeNetwork = connectivityManager.activeNetworkInfo
return activeNetwork != null && activeNetwork.isConnectedOrConnecting
}
fun start() {
val filter = IntentFilter()
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION)
context.registerReceiver(this, filter)
}
fun stop() {
context.unregisterReceiver(this)
}
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == ConnectivityManager.CONNECTIVITY_ACTION && handler != null) {
val isOnline = isOnline
Log.i(TAG, "network " + if (isOnline) "on" else "off")
handler.onNetworkUpdate(isOnline)
}
}
companion object {
private val TAG = NetworkManager::class.java.simpleName
}
}
-142
Просмотреть файл
@@ -1,142 +0,0 @@
/*
* Copyright 2015 - 2017 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.location.Location;
import android.location.LocationManager;
import java.util.Date;
public class Position {
public Position() {
}
public Position(String deviceId, Location location, double battery) {
this.deviceId = deviceId;
time = new Date(location.getTime());
latitude = location.getLatitude();
longitude = location.getLongitude();
altitude = location.getAltitude();
speed = location.getSpeed() * 1.943844; // speed in knots
course = location.getBearing();
if (location.getProvider() != null && !location.getProvider().equals(LocationManager.GPS_PROVIDER)) {
accuracy = location.getAccuracy();
}
this.battery = battery;
}
private long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
private String deviceId;
public String getDeviceId() {
return deviceId;
}
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
private Date time;
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
private double latitude;
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
private double longitude;
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
private double altitude;
public double getAltitude() {
return altitude;
}
public void setAltitude(double altitude) {
this.altitude = altitude;
}
private double speed;
public double getSpeed() {
return speed;
}
public void setSpeed(double speed) {
this.speed = speed;
}
private double course;
public double getCourse() {
return course;
}
public void setCourse(double course) {
this.course = course;
}
private double accuracy;
public double getAccuracy() {
return accuracy;
}
public void setAccuracy(double accuracy) {
this.accuracy = accuracy;
}
private double battery;
public double getBattery() {
return battery;
}
public void setBattery(double battery) {
this.battery = battery;
}
}
+49
Просмотреть файл
@@ -0,0 +1,49 @@
/*
* Copyright 2015 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.location.Location
import android.location.LocationManager
import android.os.Build
import java.util.*
data class Position(
val id: Long = 0,
val deviceId: String,
val time: Date,
val latitude: Double = 0.0,
val longitude: Double = 0.0,
val altitude: Double = 0.0,
val speed: Double = 0.0,
val course: Double = 0.0,
val accuracy: Double = 0.0,
val battery: Double = 0.0,
val mock: Boolean = false,
) {
constructor(deviceId: String, location: Location, battery: Double) : this(
deviceId = deviceId,
time = Date(location.time),
latitude = location.latitude,
longitude = location.longitude,
altitude = location.altitude,
speed = location.speed * 1.943844, // speed in knots
course = location.bearing.toDouble(),
accuracy = if (location.provider != null && location.provider != LocationManager.GPS_PROVIDER) location.accuracy.toDouble() else 0.0,
battery = battery,
mock = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) location.isFromMockProvider else false,
)
}
-137
Просмотреть файл
@@ -1,137 +0,0 @@
/*
* Copyright 2013 - 2017 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.location.Location;
import android.os.BatteryManager;
import android.preference.PreferenceManager;
import android.util.Log;
import com.mapzen.android.lost.api.LocationListener;
import com.mapzen.android.lost.api.LocationRequest;
import com.mapzen.android.lost.api.LocationServices;
import com.mapzen.android.lost.api.LostApiClient;
public class PositionProvider implements LostApiClient.ConnectionCallbacks, LocationListener {
private static final String TAG = PositionProvider.class.getSimpleName();
private static final int MINIMUM_INTERVAL = 1000;
public interface PositionListener {
void onPositionUpdate(Position position);
}
private final PositionListener listener;
private final Context context;
private SharedPreferences preferences;
private LostApiClient apiClient;
private String deviceId;
private long interval;
private double distance;
private double angle;
private Location lastLocation;
private boolean started;
public PositionProvider(Context context, PositionListener listener) {
this.context = context;
this.listener = listener;
preferences = PreferenceManager.getDefaultSharedPreferences(context);
deviceId = preferences.getString(MainFragment.KEY_DEVICE, "undefined");
interval = Long.parseLong(preferences.getString(MainFragment.KEY_INTERVAL, "600")) * 1000;
distance = Integer.parseInt(preferences.getString(MainFragment.KEY_DISTANCE, "0"));
angle = Integer.parseInt(preferences.getString(MainFragment.KEY_ANGLE, "0"));
}
public void startUpdates() {
started = true;
apiClient = new LostApiClient.Builder(context).addConnectionCallbacks(this).build();
apiClient.connect();
}
private int getPriority(String accuracy) {
switch (accuracy) {
case "high":
return LocationRequest.PRIORITY_HIGH_ACCURACY;
case "low":
return LocationRequest.PRIORITY_LOW_POWER;
default:
return LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY;
}
}
@SuppressLint("MissingPermission")
@Override
public void onConnected() {
if (started) {
LocationRequest request = LocationRequest.create()
.setPriority(getPriority(preferences.getString(MainFragment.KEY_ACCURACY, "medium")))
.setInterval(distance > 0 || angle > 0 ? MINIMUM_INTERVAL : interval);
LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, request, this);
} else {
apiClient.disconnect();
}
}
@Override
public void onLocationChanged(Location location) {
if (location != null && (lastLocation == null
|| location.getTime() - lastLocation.getTime() >= interval
|| distance > 0 && DistanceCalculator.distance(location.getLatitude(), location.getLongitude(), lastLocation.getLatitude(), lastLocation.getLongitude()) >= distance
|| angle > 0 && Math.abs(location.getBearing() - lastLocation.getBearing()) >= angle)) {
Log.i(TAG, "location new");
lastLocation = location;
listener.onPositionUpdate(new Position(deviceId, location, getBatteryLevel(context)));
} else {
Log.i(TAG, location != null ? "location ignored" : "location nil");
}
}
@Override
public void onConnectionSuspended() {
Log.i(TAG, "lost client suspended");
}
public void stopUpdates() {
if (apiClient.isConnected()) {
LocationServices.FusedLocationApi.removeLocationUpdates(apiClient, this);
apiClient.disconnect();
}
started = false;
}
public static double getBatteryLevel(Context context) {
Intent batteryIntent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
if (batteryIntent != null) {
int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, 1);
return (level * 100.0) / scale;
}
return 0;
}
}
+78
Просмотреть файл
@@ -0,0 +1,78 @@
/*
* Copyright 2013 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.SharedPreferences
import android.location.Location
import android.os.BatteryManager
import androidx.preference.PreferenceManager
import android.util.Log
import kotlin.math.abs
abstract class PositionProvider(
protected val context: Context,
protected val listener: PositionListener,
) {
interface PositionListener {
fun onPositionUpdate(position: Position)
fun onPositionError(error: Throwable)
}
protected var preferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
protected var deviceId = preferences.getString(MainFragment.KEY_DEVICE, "undefined")!!
protected var interval = preferences.getString(MainFragment.KEY_INTERVAL, "600")!!.toLong() * 1000
protected var distance: Double = preferences.getString(MainFragment.KEY_DISTANCE, "0")!!.toInt().toDouble()
protected var angle: Double = preferences.getString(MainFragment.KEY_ANGLE, "0")!!.toInt().toDouble()
private var lastLocation: Location? = null
abstract fun startUpdates()
abstract fun stopUpdates()
abstract fun requestSingleLocation()
protected fun processLocation(location: Location?) {
if (location != null &&
(lastLocation == null || location.time - lastLocation!!.time >= interval || distance > 0
&& location.distanceTo(lastLocation) >= distance || angle > 0
&& abs(location.bearing - lastLocation!!.bearing) >= angle)
) {
Log.i(TAG, "location new")
lastLocation = location
listener.onPositionUpdate(Position(deviceId, location, getBatteryLevel(context)))
} else {
Log.i(TAG, if (location != null) "location ignored" else "location nil")
}
}
protected fun getBatteryLevel(context: Context): Double {
val batteryIntent = context.registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
if (batteryIntent != null) {
val level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)
val scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, 1)
return level * 100.0 / scale
}
return 0.0
}
companion object {
private val TAG = PositionProvider::class.java.simpleName
const val MINIMUM_INTERVAL: Long = 1000
}
}
-45
Просмотреть файл
@@ -1,45 +0,0 @@
/*
* Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.net.Uri;
public class ProtocolFormatter {
public static String formatRequest(String url, Position position) {
return formatRequest(url, position, null);
}
public static String formatRequest(String url, Position position, String alarm) {
Uri serverUrl = Uri.parse(url);
Uri.Builder builder = serverUrl.buildUpon()
.appendQueryParameter("id", position.getDeviceId())
.appendQueryParameter("timestamp", String.valueOf(position.getTime().getTime() / 1000))
.appendQueryParameter("lat", String.valueOf(position.getLatitude()))
.appendQueryParameter("lon", String.valueOf(position.getLongitude()))
.appendQueryParameter("speed", String.valueOf(position.getSpeed()))
.appendQueryParameter("bearing", String.valueOf(position.getCourse()))
.appendQueryParameter("altitude", String.valueOf(position.getAltitude()))
.appendQueryParameter("accuracy", String.valueOf(position.getAccuracy()))
.appendQueryParameter("batt", String.valueOf(position.getBattery()));
if (alarm != null) {
builder.appendQueryParameter("alarm", alarm);
}
return builder.build().toString();
}
}
+42
Просмотреть файл
@@ -0,0 +1,42 @@
/*
* Copyright 2012 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.net.Uri
object ProtocolFormatter {
fun formatRequest(url: String, position: Position, alarm: String? = null): String {
val serverUrl = Uri.parse(url)
val builder = serverUrl.buildUpon()
.appendQueryParameter("id", position.deviceId)
.appendQueryParameter("timestamp", (position.time.time / 1000).toString())
.appendQueryParameter("lat", position.latitude.toString())
.appendQueryParameter("lon", position.longitude.toString())
.appendQueryParameter("speed", position.speed.toString())
.appendQueryParameter("bearing", position.course.toString())
.appendQueryParameter("altitude", position.altitude.toString())
.appendQueryParameter("accuracy", position.accuracy.toString())
.appendQueryParameter("batt", position.battery.toString())
if (position.mock) {
builder.appendQueryParameter("mock", position.mock.toString())
}
if (alarm != null) {
builder.appendQueryParameter("alarm", alarm)
}
return builder.build().toString()
}
}
-83
Просмотреть файл
@@ -1,83 +0,0 @@
/*
* Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.os.AsyncTask;
import android.util.Log;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class RequestManager {
private static final int TIMEOUT = 15 * 1000;
public interface RequestHandler {
void onComplete(boolean success);
}
private static class RequestAsyncTask extends AsyncTask<String, Void, Boolean> {
private RequestHandler handler;
public RequestAsyncTask(RequestHandler handler) {
this.handler = handler;
}
@Override
protected Boolean doInBackground(String... request) {
return sendRequest(request[0]);
}
@Override
protected void onPostExecute(Boolean result) {
handler.onComplete(result);
}
}
public static boolean sendRequest(String request) {
InputStream inputStream = null;
try {
URL url = new URL(request);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setReadTimeout(TIMEOUT);
connection.setConnectTimeout(TIMEOUT);
connection.setRequestMethod("POST");
connection.connect();
inputStream = connection.getInputStream();
while (inputStream.read() != -1);
return true;
} catch (IOException error) {
return false;
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException secondError) {
Log.w(RequestManager.class.getSimpleName(), secondError);
}
}
}
public static void sendRequestAsync(String request, RequestHandler handler) {
RequestAsyncTask task = new RequestAsyncTask(handler);
task.execute(request);
}
}
+71
Просмотреть файл
@@ -0,0 +1,71 @@
/*
* Copyright 2015 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@file:Suppress("DEPRECATION")
package org.traccar.client
import android.os.AsyncTask
import android.util.Log
import java.io.IOException
import java.io.InputStream
import java.net.HttpURLConnection
import java.net.URL
object RequestManager {
private const val TIMEOUT = 15 * 1000
fun sendRequest(request: String?): Boolean {
var inputStream: InputStream? = null
return try {
val url = URL(request)
val connection = url.openConnection() as HttpURLConnection
connection.readTimeout = TIMEOUT
connection.connectTimeout = TIMEOUT
connection.requestMethod = "POST"
connection.connect()
inputStream = connection.inputStream
while (inputStream.read() != -1) {}
true
} catch (error: IOException) {
false
} finally {
try {
inputStream?.close()
} catch (secondError: IOException) {
Log.w(RequestManager::class.java.simpleName, secondError)
}
}
}
fun sendRequestAsync(request: String, handler: RequestHandler) {
RequestAsyncTask(handler).execute(request)
}
interface RequestHandler {
fun onComplete(success: Boolean)
}
private class RequestAsyncTask(private val handler: RequestHandler) : AsyncTask<String, Unit, Boolean>() {
override fun doInBackground(vararg request: String): Boolean {
return sendRequest(request[0])
}
override fun onPostExecute(result: Boolean) {
handler.onComplete(result)
}
}
}
-179
Просмотреть файл
@@ -1,179 +0,0 @@
/*
* Copyright 2016 - 2017 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Location;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.DrawableRes;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.pm.ShortcutInfoCompat;
import android.support.v4.content.pm.ShortcutManagerCompat;
import android.support.v4.graphics.drawable.IconCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import com.mapzen.android.lost.api.LocationServices;
import com.mapzen.android.lost.api.LostApiClient;
public class ShortcutActivity extends AppCompatActivity implements LostApiClient.ConnectionCallbacks {
public static final String EXTRA_ACTION = "action";
public static final String ACTION_START = "start";
public static final String ACTION_STOP = "stop";
public static final String ACTION_SOS = "sos";
private static final String ALARM_SOS = "sos";
private LostApiClient apiClient;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!executeAction(getIntent())) {
setContentView(R.layout.list);
final String[] items = new String[] {
getString(R.string.shortcut_start),
getString(R.string.shortcut_stop),
getString(R.string.shortcut_sos)
};
ListView listView = findViewById(android.R.id.list);
listView.setAdapter(new ArrayAdapter<>(
this, android.R.layout.simple_list_item_1, items));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
setShortcutResult(items[position], R.mipmap.ic_start, ACTION_START);
break;
case 1:
setShortcutResult(items[position], R.mipmap.ic_stop, ACTION_STOP);
break;
case 2:
setShortcutResult(items[position], R.mipmap.ic_sos, ACTION_SOS);
break;
}
finish();
}
});
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
executeAction(intent);
}
private void setShortcutResult(String label, @DrawableRes int iconResId, String action) {
Intent intent = new Intent(Intent.ACTION_DEFAULT, null, this, ShortcutActivity.class);
intent.putExtra(EXTRA_ACTION, action);
ShortcutInfoCompat shortcut = new ShortcutInfoCompat.Builder(this, action)
.setShortLabel(label)
.setIcon(IconCompat.createWithResource(this, iconResId))
.setIntent(intent)
.build();
setResult(RESULT_OK, ShortcutManagerCompat.createShortcutResultIntent(this, shortcut));
}
private void sendAlarm() {
apiClient = new LostApiClient.Builder(this).addConnectionCallbacks(this).build();
apiClient.connect();
}
@SuppressWarnings("MissingPermission")
@Override
public void onConnected() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Location location = LocationServices.FusedLocationApi.getLastLocation(apiClient);
if (location != null) {
Position position = new Position(
preferences.getString(MainFragment.KEY_DEVICE, null),
location, PositionProvider.getBatteryLevel(this));
String request = ProtocolFormatter.formatRequest(
preferences.getString(MainFragment.KEY_URL, null), position, ALARM_SOS);
RequestManager.sendRequestAsync(request, new RequestManager.RequestHandler() {
@Override
public void onComplete(boolean success) {
if (success) {
Toast.makeText(ShortcutActivity.this, R.string.status_send_success, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(ShortcutActivity.this, R.string.status_send_fail, Toast.LENGTH_SHORT).show();
}
}
});
} else {
Toast.makeText(this, R.string.status_send_fail, Toast.LENGTH_SHORT).show();
}
apiClient.disconnect();
}
@Override
public void onConnectionSuspended() {
}
private boolean executeAction(Intent intent) {
String action;
if (intent.hasExtra("shortcutAction")) {
action = intent.getBooleanExtra("shortcutAction", false)
? ACTION_START : ACTION_STOP;
} else {
action = intent.getStringExtra(EXTRA_ACTION);
}
if (action != null) {
switch (action) {
case ACTION_START:
PreferenceManager.getDefaultSharedPreferences(this)
.edit().putBoolean(MainFragment.KEY_STATUS, true).apply();
ContextCompat.startForegroundService(this, new Intent(this, TrackingService.class));
Toast.makeText(this, R.string.status_service_create, Toast.LENGTH_SHORT).show();
break;
case ACTION_STOP:
PreferenceManager.getDefaultSharedPreferences(this)
.edit().putBoolean(MainFragment.KEY_STATUS, false).apply();
stopService(new Intent(this, TrackingService.class));
Toast.makeText(this, R.string.status_service_destroy, Toast.LENGTH_SHORT).show();
break;
case ACTION_SOS:
sendAlarm();
break;
}
finish();
}
return action != null;
}
}
+138
Просмотреть файл
@@ -0,0 +1,138 @@
/*
* Copyright 2016 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.widget.AdapterView.OnItemClickListener
import android.widget.ArrayAdapter
import android.widget.ListView
import android.widget.Toast
import androidx.annotation.DrawableRes
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.core.content.pm.ShortcutInfoCompat
import androidx.core.content.pm.ShortcutManagerCompat
import androidx.core.graphics.drawable.IconCompat
import androidx.preference.PreferenceManager
import org.traccar.client.PositionProvider.PositionListener
import org.traccar.client.ProtocolFormatter.formatRequest
import org.traccar.client.RequestManager.RequestHandler
import org.traccar.client.RequestManager.sendRequestAsync
class ShortcutActivity : AppCompatActivity() {
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (!executeAction(intent)) {
setContentView(R.layout.list)
val items = arrayOf(
getString(R.string.shortcut_start),
getString(R.string.shortcut_stop),
getString(R.string.shortcut_sos)
)
val listView = findViewById<ListView>(android.R.id.list)
listView.adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items)
listView.onItemClickListener = OnItemClickListener { _, _, position, _ ->
when (position) {
0 -> setShortcutResult(items[position], R.mipmap.ic_start, ACTION_START)
1 -> setShortcutResult(items[position], R.mipmap.ic_stop, ACTION_STOP)
2 -> setShortcutResult(items[position], R.mipmap.ic_sos, ACTION_SOS)
}
finish()
}
}
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
executeAction(intent)
}
private fun setShortcutResult(label: String, @DrawableRes iconResId: Int, action: String) {
val intent = Intent(Intent.ACTION_DEFAULT, null, this, ShortcutActivity::class.java)
intent.putExtra(EXTRA_ACTION, action)
val shortcut = ShortcutInfoCompat.Builder(this, action)
.setShortLabel(label)
.setIcon(IconCompat.createWithResource(this, iconResId))
.setIntent(intent)
.build()
setResult(RESULT_OK, ShortcutManagerCompat.createShortcutResultIntent(this, shortcut))
}
private fun sendAlarm() {
PositionProviderFactory.create(this, object : PositionListener {
override fun onPositionUpdate(position: Position) {
val preferences = PreferenceManager.getDefaultSharedPreferences(this@ShortcutActivity)
val request = formatRequest(preferences.getString(MainFragment.KEY_URL, null)!!, position, ALARM_SOS)
sendRequestAsync(request, object : RequestHandler {
override fun onComplete(success: Boolean) {
if (success) {
Toast.makeText(this@ShortcutActivity, R.string.status_send_success, Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@ShortcutActivity, R.string.status_send_fail, Toast.LENGTH_SHORT).show()
}
}
})
}
override fun onPositionError(error: Throwable) {
Toast.makeText(this@ShortcutActivity, error.message, Toast.LENGTH_LONG).show()
}
}).requestSingleLocation()
}
private fun executeAction(intent: Intent): Boolean {
val action: String? = if (intent.hasExtra("shortcutAction")) {
if (intent.getBooleanExtra("shortcutAction", false)) ACTION_START else ACTION_STOP
} else {
intent.getStringExtra(EXTRA_ACTION)
}
if (action != null) {
when (action) {
ACTION_START -> {
PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean(MainFragment.KEY_STATUS, true).apply()
ContextCompat.startForegroundService(this, Intent(this, TrackingService::class.java))
Toast.makeText(this, R.string.status_service_create, Toast.LENGTH_SHORT).show()
}
ACTION_STOP -> {
PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean(MainFragment.KEY_STATUS, false).apply()
stopService(Intent(this, TrackingService::class.java))
Toast.makeText(this, R.string.status_service_destroy, Toast.LENGTH_SHORT).show()
}
ACTION_SOS -> {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
sendAlarm()
} else {
Toast.makeText(this, R.string.status_send_fail, Toast.LENGTH_SHORT).show()
}
}
}
finish()
}
return action != null
}
companion object {
const val EXTRA_ACTION = "action"
const val ACTION_START = "start"
const val ACTION_STOP = "stop"
const val ACTION_SOS = "sos"
private const val ALARM_SOS = "sos"
}
}
-94
Просмотреть файл
@@ -1,94 +0,0 @@
/*
* Copyright 2012 - 2017 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import java.text.DateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class StatusActivity extends AppCompatActivity {
private static final int LIMIT = 20;
private static final LinkedList<String> messages = new LinkedList<>();
private static final Set<ArrayAdapter<String>> adapters = new HashSet<>();
private static void notifyAdapters() {
for (ArrayAdapter<String> adapter : adapters) {
adapter.notifyDataSetChanged();
}
}
public static void addMessage(String message) {
DateFormat format = DateFormat.getTimeInstance(DateFormat.SHORT);
message = format.format(new Date()) + " - " + message;
messages.add(message);
while (messages.size() > LIMIT) {
messages.removeFirst();
}
notifyAdapters();
}
public static void clearMessages() {
messages.clear();
notifyAdapters();
}
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, android.R.id.text1, messages);
ListView listView = findViewById(android.R.id.list);
listView.setAdapter(adapter);
adapters.add(adapter);
}
@Override
protected void onDestroy() {
adapters.remove(adapter);
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.status, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.clear) {
clearMessages();
return true;
}
return super.onOptionsItemSelected(item);
}
}
+86
Просмотреть файл
@@ -0,0 +1,86 @@
/*
* Copyright 2012 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import androidx.appcompat.app.AppCompatActivity
import android.widget.ArrayAdapter
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.ListView
import java.text.DateFormat
import java.util.*
class StatusActivity : AppCompatActivity() {
private var adapter: ArrayAdapter<String>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.list)
adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, messages)
val listView = findViewById<ListView>(android.R.id.list)
listView.adapter = adapter
adapter?.let { adapters.add(it) }
}
override fun onDestroy() {
adapters.remove(adapter)
super.onDestroy()
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.status, menu)
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.clear) {
clearMessages()
return true
}
return super.onOptionsItemSelected(item)
}
companion object {
private const val LIMIT = 20
private val messages = LinkedList<String>()
private val adapters: MutableSet<ArrayAdapter<String>> = HashSet()
private fun notifyAdapters() {
for (adapter in adapters) {
adapter.notifyDataSetChanged()
}
}
fun addMessage(originalMessage: String) {
var message = originalMessage
val format = DateFormat.getTimeInstance(DateFormat.MEDIUM)
message = format.format(Date()) + " - " + message
messages.add(message)
while (messages.size > LIMIT) {
messages.removeFirst()
}
notifyAdapters()
}
fun clearMessages() {
messages.clear()
notifyAdapters()
}
}
}
-216
Просмотреть файл
@@ -1,216 +0,0 @@
/*
* Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.PowerManager;
import android.preference.PreferenceManager;
import android.util.Log;
public class TrackingController implements PositionProvider.PositionListener, NetworkManager.NetworkHandler {
private static final String TAG = TrackingController.class.getSimpleName();
private static final int RETRY_DELAY = 30 * 1000;
private static final int WAKE_LOCK_TIMEOUT = 120 * 1000;
private boolean isOnline;
private boolean isWaiting;
private Context context;
private Handler handler;
private SharedPreferences preferences;
private String url;
private PositionProvider positionProvider;
private DatabaseHelper databaseHelper;
private NetworkManager networkManager;
private PowerManager.WakeLock wakeLock;
private void lock() {
wakeLock.acquire(WAKE_LOCK_TIMEOUT);
}
private void unlock() {
if (wakeLock.isHeld()) {
wakeLock.release();
}
}
public TrackingController(Context context) {
this.context = context;
handler = new Handler();
preferences = PreferenceManager.getDefaultSharedPreferences(context);
positionProvider = new PositionProvider(context, this);
databaseHelper = new DatabaseHelper(context);
networkManager = new NetworkManager(context, this);
isOnline = networkManager.isOnline();
url = preferences.getString(MainFragment.KEY_URL, context.getString(R.string.settings_url_default_value));
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName());
}
public void start() {
if (isOnline) {
read();
}
try {
positionProvider.startUpdates();
} catch (SecurityException e) {
Log.w(TAG, e);
}
networkManager.start();
}
public void stop() {
networkManager.stop();
try {
positionProvider.stopUpdates();
} catch (SecurityException e) {
Log.w(TAG, e);
}
handler.removeCallbacksAndMessages(null);
}
@Override
public void onPositionUpdate(Position position) {
StatusActivity.addMessage(context.getString(R.string.status_location_update));
if (position != null) {
write(position);
}
}
@Override
public void onNetworkUpdate(boolean isOnline) {
StatusActivity.addMessage(context.getString(R.string.status_connectivity_change));
if (!this.isOnline && isOnline) {
read();
}
this.isOnline = isOnline;
}
//
// State transition examples:
//
// write -> read -> send -> delete -> read
//
// read -> send -> retry -> read -> send
//
private void log(String action, Position position) {
if (position != null) {
action += " (" +
"id:" + position.getId() +
" time:" + position.getTime().getTime() / 1000 +
" lat:" + position.getLatitude() +
" lon:" + position.getLongitude() + ")";
}
Log.d(TAG, action);
}
private void write(Position position) {
log("write", position);
lock();
databaseHelper.insertPositionAsync(position, new DatabaseHelper.DatabaseHandler<Void>() {
@Override
public void onComplete(boolean success, Void result) {
if (success) {
if (isOnline && isWaiting) {
read();
isWaiting = false;
}
}
unlock();
}
});
}
private void read() {
log("read", null);
lock();
databaseHelper.selectPositionAsync(new DatabaseHelper.DatabaseHandler<Position>() {
@Override
public void onComplete(boolean success, Position result) {
if (success) {
if (result != null) {
if (result.getDeviceId().equals(preferences.getString(MainFragment.KEY_DEVICE, null))) {
send(result);
} else {
delete(result);
}
} else {
isWaiting = true;
}
} else {
retry();
}
unlock();
}
});
}
private void delete(Position position) {
log("delete", position);
lock();
databaseHelper.deletePositionAsync(position.getId(), new DatabaseHelper.DatabaseHandler<Void>() {
@Override
public void onComplete(boolean success, Void result) {
if (success) {
read();
} else {
retry();
}
unlock();
}
});
}
private void send(final Position position) {
log("send", position);
lock();
String request = ProtocolFormatter.formatRequest(url, position);
RequestManager.sendRequestAsync(request, new RequestManager.RequestHandler() {
@Override
public void onComplete(boolean success) {
if (success) {
delete(position);
} else {
StatusActivity.addMessage(context.getString(R.string.status_send_fail));
retry();
}
unlock();
}
});
}
private void retry() {
log("retry", null);
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (isOnline) {
read();
}
}
}, RETRY_DELAY);
}
}
+186
Просмотреть файл
@@ -0,0 +1,186 @@
/*
* Copyright 2015 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.content.Context
import org.traccar.client.ProtocolFormatter.formatRequest
import org.traccar.client.RequestManager.sendRequestAsync
import org.traccar.client.PositionProvider.PositionListener
import org.traccar.client.NetworkManager.NetworkHandler
import android.os.Handler
import android.os.Looper
import androidx.preference.PreferenceManager
import android.util.Log
import org.traccar.client.DatabaseHelper.DatabaseHandler
import org.traccar.client.RequestManager.RequestHandler
class TrackingController(private val context: Context) : PositionListener, NetworkHandler {
private val handler = Handler(Looper.getMainLooper())
private val preferences = PreferenceManager.getDefaultSharedPreferences(context)
private val positionProvider = PositionProviderFactory.create(context, this)
private val databaseHelper = DatabaseHelper(context)
private val networkManager = NetworkManager(context, this)
private val url: String = preferences.getString(MainFragment.KEY_URL, context.getString(R.string.settings_url_default_value))!!
private val buffer: Boolean = preferences.getBoolean(MainFragment.KEY_BUFFER, true)
private var isOnline = networkManager.isOnline
private var isWaiting = false
fun start() {
if (isOnline) {
read()
}
try {
positionProvider.startUpdates()
} catch (e: SecurityException) {
Log.w(TAG, e)
}
networkManager.start()
}
fun stop() {
networkManager.stop()
try {
positionProvider.stopUpdates()
} catch (e: SecurityException) {
Log.w(TAG, e)
}
handler.removeCallbacksAndMessages(null)
}
override fun onPositionUpdate(position: Position) {
StatusActivity.addMessage(context.getString(R.string.status_location_update))
if (buffer) {
write(position)
} else {
send(position)
}
}
override fun onPositionError(error: Throwable) {}
override fun onNetworkUpdate(isOnline: Boolean) {
val message = if (isOnline) R.string.status_network_online else R.string.status_network_offline
StatusActivity.addMessage(context.getString(message))
if (!this.isOnline && isOnline) {
read()
}
this.isOnline = isOnline
}
//
// State transition examples:
//
// write -> read -> send -> delete -> read
//
// read -> send -> retry -> read -> send
//
private fun log(action: String, position: Position?) {
var formattedAction: String = action
if (position != null) {
formattedAction +=
" (id:" + position.id +
" time:" + position.time.time / 1000 +
" lat:" + position.latitude +
" lon:" + position.longitude + ")"
}
Log.d(TAG, formattedAction)
}
private fun write(position: Position) {
log("write", position)
databaseHelper.insertPositionAsync(position, object : DatabaseHandler<Unit> {
override fun onComplete(success: Boolean, result: Unit) {
if (success) {
if (isOnline && isWaiting) {
read()
isWaiting = false
}
}
}
})
}
private fun read() {
log("read", null)
databaseHelper.selectPositionAsync(object : DatabaseHandler<Position?> {
override fun onComplete(success: Boolean, result: Position?) {
if (success) {
if (result != null) {
if (result.deviceId == preferences.getString(MainFragment.KEY_DEVICE, null)) {
send(result)
} else {
delete(result)
}
} else {
isWaiting = true
}
} else {
retry()
}
}
})
}
private fun delete(position: Position) {
log("delete", position)
databaseHelper.deletePositionAsync(position.id, object : DatabaseHandler<Unit> {
override fun onComplete(success: Boolean, result: Unit) {
if (success) {
read()
} else {
retry()
}
}
})
}
private fun send(position: Position) {
log("send", position)
val request = formatRequest(url, position)
sendRequestAsync(request, object : RequestHandler {
override fun onComplete(success: Boolean) {
if (success) {
if (buffer) {
delete(position)
}
} else {
StatusActivity.addMessage(context.getString(R.string.status_send_fail))
if (buffer) {
retry()
}
}
}
})
}
private fun retry() {
log("retry", null)
handler.postDelayed({
if (isOnline) {
read()
}
}, RETRY_DELAY.toLong())
}
companion object {
private val TAG = TrackingController::class.java.simpleName
private const val RETRY_DELAY = 30 * 1000
}
}
-113
Просмотреть файл
@@ -1,113 +0,0 @@
/*
* Copyright 2012 - 2017 Anton Tananaev (anton.tananaev@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
public class TrackingService extends Service {
private static final String TAG = TrackingService.class.getSimpleName();
private static final int NOTIFICATION_ID = 1;
private TrackingController trackingController;
private static Notification createNotification(Context context) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, MainApplication.PRIMARY_CHANNEL)
.setSmallIcon(R.drawable.ic_stat_notify)
.setPriority(NotificationCompat.PRIORITY_LOW)
.setCategory(Notification.CATEGORY_SERVICE);
Intent intent;
if (!BuildConfig.HIDDEN_APP) {
intent = new Intent(context, MainActivity.class);
builder
.setContentTitle(context.getString(R.string.settings_status_on_summary))
.setTicker(context.getString(R.string.settings_status_on_summary))
.setColor(ContextCompat.getColor(context, R.color.primary_dark));
} else {
intent = new Intent(android.provider.Settings.ACTION_SETTINGS);
}
builder.setContentIntent(PendingIntent.getActivity(context, 0, intent, 0));
return builder.build();
}
public static class HideNotificationService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
startForeground(NOTIFICATION_ID, createNotification(this));
stopForeground(true);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
stopSelfResult(startId);
return START_NOT_STICKY;
}
}
@Override
public void onCreate() {
Log.i(TAG, "service create");
StatusActivity.addMessage(getString(R.string.status_service_create));
trackingController = new TrackingController(this);
trackingController.start();
startForeground(NOTIFICATION_ID, createNotification(this));
ContextCompat.startForegroundService(this, new Intent(this, HideNotificationService.class));
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@TargetApi(Build.VERSION_CODES.ECLAIR)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
AutostartReceiver.completeWakefulIntent(intent);
}
return START_STICKY;
}
@Override
public void onDestroy() {
Log.i(TAG, "service destroy");
StatusActivity.addMessage(getString(R.string.status_service_destroy));
stopForeground(true);
if (trackingController != null) {
trackingController.stop();
}
}
}
+129
Просмотреть файл
@@ -0,0 +1,129 @@
/*
* Copyright 2012 - 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.Manifest
import android.annotation.SuppressLint
import android.annotation.TargetApi
import android.app.Notification
import android.app.PendingIntent
import android.app.Service
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.os.IBinder
import android.os.PowerManager
import android.os.PowerManager.WakeLock
import android.provider.Settings
import android.util.Log
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
import androidx.preference.PreferenceManager
class TrackingService : Service() {
private var wakeLock: WakeLock? = null
private var trackingController: TrackingController? = null
class HideNotificationService : Service() {
override fun onBind(intent: Intent): IBinder? {
return null
}
override fun onCreate() {
startForeground(NOTIFICATION_ID, createNotification(this))
stopForeground(true)
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
stopSelfResult(startId)
return START_NOT_STICKY
}
}
@SuppressLint("WakelockTimeout")
override fun onCreate() {
Log.i(TAG, "service create")
sendBroadcast(Intent(ACTION_STARTED))
StatusActivity.addMessage(getString(R.string.status_service_create))
startForeground(NOTIFICATION_ID, createNotification(this))
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean(MainFragment.KEY_WAKELOCK, true)) {
val powerManager = getSystemService(POWER_SERVICE) as PowerManager
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, javaClass.name)
wakeLock?.acquire()
}
trackingController = TrackingController(this)
trackingController?.start()
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
ContextCompat.startForegroundService(this, Intent(this, HideNotificationService::class.java))
}
}
override fun onBind(intent: Intent): IBinder? {
return null
}
@TargetApi(Build.VERSION_CODES.ECLAIR)
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
WakefulBroadcastReceiver.completeWakefulIntent(intent)
return START_STICKY
}
override fun onDestroy() {
Log.i(TAG, "service destroy")
sendBroadcast(Intent(ACTION_STOPPED))
StatusActivity.addMessage(getString(R.string.status_service_destroy))
stopForeground(true)
if (wakeLock?.isHeld == true) {
wakeLock?.release()
}
trackingController?.stop()
}
companion object {
const val ACTION_STARTED = "org.traccar.action.SERVICE_STARTED"
const val ACTION_STOPPED = "org.traccar.action.SERVICE_STOPPED"
private val TAG = TrackingService::class.java.simpleName
private const val NOTIFICATION_ID = 1
@SuppressLint("UnspecifiedImmutableFlag")
private fun createNotification(context: Context): Notification {
val builder = NotificationCompat.Builder(context, MainApplication.PRIMARY_CHANNEL)
.setSmallIcon(R.drawable.ic_stat_notify)
.setPriority(NotificationCompat.PRIORITY_LOW)
.setCategory(NotificationCompat.CATEGORY_SERVICE)
val intent: Intent
if (!BuildConfig.HIDDEN_APP) {
intent = Intent(context, MainActivity::class.java)
builder
.setContentTitle(context.getString(R.string.settings_status_on_summary))
.setTicker(context.getString(R.string.settings_status_on_summary))
.color = ContextCompat.getColor(context, R.color.primary_dark)
} else {
intent = Intent(Settings.ACTION_SETTINGS)
}
builder.setContentIntent(PendingIntent.getActivity(context, 0, intent, 0))
return builder.build()
}
}
}
-62
Просмотреть файл
@@ -1,62 +0,0 @@
/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.support.v4.content.ContextCompat;
import android.util.SparseArray;
public abstract class WakefulBroadcastReceiver extends BroadcastReceiver {
private static final String EXTRA_WAKE_LOCK_ID = "android.support.content.wakelockid";
private static final SparseArray<PowerManager.WakeLock> mActiveWakeLocks = new SparseArray<>();
private static int mNextId = 1;
public static void startWakefulForegroundService(Context context, Intent intent) {
synchronized (mActiveWakeLocks) {
int id = mNextId;
mNextId++;
if (mNextId <= 0) {
mNextId = 1;
}
intent.putExtra(EXTRA_WAKE_LOCK_ID, id);
ContextCompat.startForegroundService(context, intent);
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
WakefulBroadcastReceiver.class.getSimpleName());
wl.setReferenceCounted(false);
wl.acquire(60*1000);
mActiveWakeLocks.put(id, wl);
}
}
public static boolean completeWakefulIntent(Intent intent) {
final int id = intent.getIntExtra(EXTRA_WAKE_LOCK_ID, 0);
if (id == 0) {
return false;
}
synchronized (mActiveWakeLocks) {
PowerManager.WakeLock wl = mActiveWakeLocks.get(id);
if (wl != null) {
wl.release();
mActiveWakeLocks.remove(id);
return true;
}
return true;
}
}
}
+70
Просмотреть файл
@@ -0,0 +1,70 @@
/*
* Copyright 2021 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.client
import android.content.BroadcastReceiver
import android.content.Context
import android.util.SparseArray
import android.os.PowerManager.WakeLock
import android.content.Intent
import androidx.core.content.ContextCompat
import android.os.PowerManager
abstract class WakefulBroadcastReceiver : BroadcastReceiver() {
companion object {
private const val EXTRA_WAKE_LOCK_ID = "android.support.content.wakelockid"
private val activeWakeLocks = SparseArray<WakeLock>()
private var nextId = 1
fun startWakefulForegroundService(context: Context, intent: Intent) {
synchronized(activeWakeLocks) {
val id = nextId
nextId += 1
if (nextId <= 0) {
nextId = 1
}
intent.putExtra(EXTRA_WAKE_LOCK_ID, id)
ContextCompat.startForegroundService(context, intent)
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
val wakeLock = powerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK,
WakefulBroadcastReceiver::class.java.simpleName
)
wakeLock.setReferenceCounted(false)
wakeLock.acquire((60 * 1000).toLong())
activeWakeLocks.put(id, wakeLock)
}
}
fun completeWakefulIntent(intent: Intent?): Boolean {
val id = intent?.getIntExtra(EXTRA_WAKE_LOCK_ID, 0) ?: 0
if (id == 0) {
return false
}
synchronized(activeWakeLocks) {
val wakeLock = activeWakeLocks[id]
if (wakeLock != null) {
wakeLock.release()
activeWakeLocks.remove(id)
return true
}
return true
}
}
}
}
-37
Просмотреть файл
@@ -1,37 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_toRightOf="@+id/logo"
android:layout_toEndOf="@+id/logo"
android:padding="@dimen/spacing_normal"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_normal"
android:text="@string/app_name"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_normal"
android:text="@string/about_description" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_normal"
android:text="@string/about_license" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/about_web"
android:autoLink="web" />
</LinearLayout>
+13
Просмотреть файл
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="org.traccar.client.MainFragment" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
-5
Просмотреть файл
@@ -8,9 +8,4 @@
android:title="@string/menu_status" android:title="@string/menu_status"
app:showAsAction="ifRoom" /> app:showAsAction="ifRoom" />
<item
android:id="@+id/about"
android:title="@string/menu_about"
app:showAsAction="never" />
</menu> </menu>
+1 -1
Просмотреть файл
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/white"/> <background android:drawable="@color/light"/>
<foreground android:drawable="@mipmap/ic_sos_foreground"/> <foreground android:drawable="@mipmap/ic_sos_foreground"/>
</adaptive-icon> </adaptive-icon>
+1 -1
Просмотреть файл
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/white"/> <background android:drawable="@color/light"/>
<foreground android:drawable="@mipmap/ic_sos_foreground"/> <foreground android:drawable="@mipmap/ic_sos_foreground"/>
</adaptive-icon> </adaptive-icon>
+1 -1
Просмотреть файл
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/white"/> <background android:drawable="@color/light"/>
<foreground android:drawable="@mipmap/ic_start_foreground"/> <foreground android:drawable="@mipmap/ic_start_foreground"/>
</adaptive-icon> </adaptive-icon>
+1 -1
Просмотреть файл
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/white"/> <background android:drawable="@color/light"/>
<foreground android:drawable="@mipmap/ic_start_foreground"/> <foreground android:drawable="@mipmap/ic_start_foreground"/>
</adaptive-icon> </adaptive-icon>
+1 -1
Просмотреть файл
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/white"/> <background android:drawable="@color/light"/>
<foreground android:drawable="@mipmap/ic_stop_foreground"/> <foreground android:drawable="@mipmap/ic_stop_foreground"/>
</adaptive-icon> </adaptive-icon>
+1 -1
Просмотреть файл
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/white"/> <background android:drawable="@color/light"/>
<foreground android:drawable="@mipmap/ic_stop_foreground"/> <foreground android:drawable="@mipmap/ic_stop_foreground"/>
</adaptive-icon> </adaptive-icon>
+46
Просмотреть файл
@@ -0,0 +1,46 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="app_name">Traccar-kliënt</string>
<string name="app_logo">Traccar</string>
<string name="shortcut_start">Begin diens</string>
<string name="shortcut_stop">Stop diens</string>
<string name="shortcut_sos">Stuur SOS</string>
<string name="channel_default">Primêre Kanaal</string>
<string name="settings_id_title">Toestel-identifiseerder</string>
<string name="settings_url_title">Bediener-URL</string>
<string name="settings_url_summary">Volg bediener-URL</string>
<string name="settings_interval_title">Frekwensie</string>
<string name="settings_interval_summary">Rapporteer interval in sekondes</string>
<string name="settings_distance_title">Afstand</string>
<string name="settings_distance_summary">Rapporteer afstand in meter</string>
<string name="settings_angle_title">Hoek</string>
<string name="settings_angle_summary">Rapporteringshoek in grade</string>
<string name="settings_status_title">Diensstatus</string>
<string name="settings_status_off">Begin</string>
<string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Diens gestop</string>
<string name="settings_status_on_summary">Diens loop</string>
<string name="settings_buffer">Vanlyn buffer</string>
<string name="settings_buffer_off_summary">Buffer af</string>
<string name="settings_buffer_on_summary">Buffer aan</string>
<string name="settings_accuracy_title">Ligging akkuraatheid</string>
<string name="settings_accuracy_summary">Verlangde ligging akkuraatheid</string>
<string name="settings_accuracy_high">Hoog</string>
<string name="settings_accuracy_medium">Medium</string>
<string name="settings_accuracy_low">Laag</string>
<string name="settings_foreground_title">Voorgrond diens</string>
<string name="settings_foreground_summary">Verhoog diensprioriteit</string>
<string name="menu_status">Status</string>
<string name="menu_shortcuts">Voeg kortpaaie by</string>
<string name="menu_clear">Skoonmaak</string>
<string name="status_service_create">Diens het begin</string>
<string name="status_service_destroy">Diens het gestop</string>
<string name="status_send_success">Stuur suksesvol</string>
<string name="status_send_fail">Stuur misluk</string>
<string name="status_location_update">Ligging opdateer</string>
<string name="status_network_online">Netwerk aanlyn</string>
<string name="status_network_offline">Netwerk vanlyn</string>
<string name="hidden_app_name">Toestelinstellings</string>
<string name="hidden_alert">Die toep is versteek. Skakel 8722227 (TRACCAR) om dit weer oop te maak.</string>
<string name="error_msg_invalid_url">Voer \'n geldige http: // of https: // URL in</string>
</resources>
+20 -11
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">عميل Traccar</string> <string name="app_name">عميل Traccar</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">بدء الخدمة</string>
<string name="shortcut_stop">توقف الخدمة</string>
<string name="shortcut_sos">ارسال استغاثة</string>
<string name="channel_default">القناة الاساسية</string>
<string name="settings_id_title">معرف الجهاز</string> <string name="settings_id_title">معرف الجهاز</string>
<string name="settings_url_title">رابط الخادم</string> <string name="settings_url_title">رابط الخادم</string>
<string name="settings_url_summary">رابط خادم التتبع</string> <string name="settings_url_summary">رابط خادم التتبع</string>
@@ -16,25 +20,30 @@
<string name="settings_status_on">إيقاف</string> <string name="settings_status_on">إيقاف</string>
<string name="settings_status_off_summary">الخدمة توقفت</string> <string name="settings_status_off_summary">الخدمة توقفت</string>
<string name="settings_status_on_summary">الخدمة تعمل</string> <string name="settings_status_on_summary">الخدمة تعمل</string>
<string name="settings_provider_title">موفر الموقع</string> <string name="settings_buffer">التخزين المؤقت دون اتصال</string>
<string name="settings_provider_summary">مصدر بيانات الموقع</string> <string name="settings_buffer_off_summary">التخزين المؤقت غير مفعل</string>
<string name="settings_provider_gps">موفر نظام تحديد الموقع</string> <string name="settings_buffer_on_summary">التخزين المؤقت مفعل</string>
<string name="settings_provider_network">موفر الشبكة</string> <string name="settings_wakelock">قفل الإيقاظ</string>
<string name="settings_provider_mixed">موفر المختلط</string> <string name="settings_wakelock_off_summary">قفل الإيقاظ غير مفعل</string>
<string name="settings_wakelock_on_summary">قفل الإيقاظ مفعل</string>
<string name="settings_accuracy_title">دقة الموقع</string>
<string name="settings_accuracy_summary">دقة الموقع المطلوبة</string>
<string name="settings_accuracy_high">مرتفع</string>
<string name="settings_accuracy_medium">متوسط</string>
<string name="settings_accuracy_low">منخفض</string>
<string name="settings_foreground_title">الخدمة الأمامية</string> <string name="settings_foreground_title">الخدمة الأمامية</string>
<string name="settings_foreground_summary">زيادة أولوية الخدمة</string> <string name="settings_foreground_summary">زيادة أولوية الخدمة</string>
<string name="menu_status">الحالة</string> <string name="menu_status">الحالة</string>
<string name="menu_about">حول</string>
<string name="menu_shortcuts">إضافة اختصارات</string> <string name="menu_shortcuts">إضافة اختصارات</string>
<string name="menu_clear">مسح</string> <string name="menu_clear">مسح</string>
<string name="about_description">محدد الموقع في الوقت الفعلي لأجهزة Android. متوافق مع خادم Traccar ونظم تعقب أخرى </string> <string name="status_service_create">بدأت الخدمة</string>
<string name="about_license">هذا التطبيق مجاني ومفتوح المصدر، الكود المصدري مرخص تحت رخصة Apache الإصدار 2.0 و متاح على GitHub.</string> <string name="status_service_destroy">توقفت الخدمة</string>
<string name="about_web">لمزيد من المعلومات زر \nwww.traccar.org/client</string>
<string name="status_send_success">تم الإرسال بنجاح</string> <string name="status_send_success">تم الإرسال بنجاح</string>
<string name="status_send_fail">فشل الإرسال</string> <string name="status_send_fail">فشل الإرسال</string>
<string name="status_location_update">تحديث الموقع</string> <string name="status_location_update">تحديث الموقع</string>
<string name="status_connectivity_change">تغير الارتباط</string> <string name="status_network_online">متصل بالشبكة</string>
<string name="status_network_offline">غير متصل بالشبكة</string>
<string name="hidden_app_name">إعدادات الجهاز</string> <string name="hidden_app_name">إعدادات الجهاز</string>
<string name="hidden_alert">تم إخفاء التطبيق. لفتحه مجددا رجاءا اتصل بـ8722227 (TRACCAR).</string> <string name="hidden_alert">تم إخفاء التطبيق. لفتحه مجددا رجاءا اتصل بـ8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">أرجو إدخال رابط صحيح http:// أو https://</string> <string name="error_msg_invalid_url">الرجاء إدخال رابط صحيح http:// أو https://</string>
</resources> </resources>
+43
Просмотреть файл
@@ -0,0 +1,43 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="app_name">Traccar müştəri</string>
<string name="app_logo">Traccar</string>
<string name="shortcut_start">xidmətə başla</string>
<string name="shortcut_stop">xidmət dayandırmaq</string>
<string name="shortcut_sos">sos göndərin</string>
<string name="channel_default">əsas kanal</string>
<string name="settings_id_title">Qurğu identifikatoru</string>
<string name="settings_url_title">Server URL</string>
<string name="settings_url_summary">Tracking server URL</string>
<string name="settings_interval_title">Frequency</string>
<string name="settings_interval_summary">Saniyə cədvəlləri bildirir</string>
<string name="settings_distance_title">Məsafə</string>
<string name="settings_distance_summary">Metr ölçən məsafə</string>
<string name="settings_angle_title">Angle</string>
<string name="settings_angle_summary">Dərəcə dərəcəsi hesabat</string>
<string name="settings_status_title">Xidmət vəziyyəti</string>
<string name="settings_status_off">Başlamaq</string>
<string name="settings_status_on">Dur</string>
<string name="settings_status_off_summary">Xidmət dayandı</string>
<string name="settings_status_on_summary">Xidmət davam edir</string>
<string name="settings_accuracy_title">Yer dəqiqliyi</string>
<string name="settings_accuracy_summary">İstədiyiniz yer dəqiqliyi</string>
<string name="settings_accuracy_high">Yüksək</string>
<string name="settings_accuracy_medium">Orta</string>
<string name="settings_accuracy_low">Aşağı</string>
<string name="settings_foreground_title">Ön xidməti</string>
<string name="settings_foreground_summary">Xidmət prioritetini artırın</string>
<string name="menu_status">vəziyyət</string>
<string name="menu_shortcuts">Qısa yollar əlavə edin</string>
<string name="menu_clear">Aydındır</string>
<string name="status_service_create">Xidmət başladı</string>
<string name="status_service_destroy">Xidmət dayandı</string>
<string name="status_send_success">Uğurla göndərin</string>
<string name="status_send_fail">Göndərmə uğursuz oldu</string>
<string name="status_location_update">Yer yeniləmə</string>
<string name="status_network_online">Şəbəkə online</string>
<string name="status_network_offline">Şəbəkə offline</string>
<string name="hidden_app_name">Qurğu Ayarları</string>
<string name="hidden_alert">The app has been hidden. To open it again please dial 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Please enter a valid http:// or https:// URL</string>
</resources>
+16 -10
Просмотреть файл
@@ -2,7 +2,13 @@
<resources> <resources>
<string name="app_name">Traccar клиент</string> <string name="app_name">Traccar клиент</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Стартирай услугата</string>
<string name="shortcut_stop">Спри услугата</string>
<string name="shortcut_sos">Изпрати SOS</string>
<string name="channel_default">Основен канал</string>
<string name="settings_id_title">Идентификатор</string> <string name="settings_id_title">Идентификатор</string>
<string name="settings_url_title">Адрес на сървъра</string>
<string name="settings_url_summary">Адрес на проследяващият сървър</string>
<string name="settings_interval_title">Честота</string> <string name="settings_interval_title">Честота</string>
<string name="settings_interval_summary">Докладван интервал в сек.</string> <string name="settings_interval_summary">Докладван интервал в сек.</string>
<string name="settings_distance_title">Разстояние</string> <string name="settings_distance_title">Разстояние</string>
@@ -14,24 +20,24 @@
<string name="settings_status_on">Стоп</string> <string name="settings_status_on">Стоп</string>
<string name="settings_status_off_summary">Услугата е спряна</string> <string name="settings_status_off_summary">Услугата е спряна</string>
<string name="settings_status_on_summary">Услугата работи</string> <string name="settings_status_on_summary">Услугата работи</string>
<string name="settings_provider_title">Доставчик на местоположение</string> <string name="settings_accuracy_title">Точност на местоположението</string>
<string name="settings_provider_summary">Източник на данни за местоположението</string> <string name="settings_accuracy_summary">Желана точност на местоположението</string>
<string name="settings_provider_gps">GPS</string> <string name="settings_accuracy_high">Висока</string>
<string name="settings_provider_network">Мрежи</string> <string name="settings_accuracy_medium">Средна</string>
<string name="settings_provider_mixed">Смесен Доставчик</string> <string name="settings_accuracy_low">Ниска</string>
<string name="settings_foreground_title">Foreground service</string> <string name="settings_foreground_title">Foreground service</string>
<string name="settings_foreground_summary">Увеличаване на приоритета на услугата</string> <string name="settings_foreground_summary">Увеличаване на приоритета на услугата</string>
<string name="menu_status">Състояние</string> <string name="menu_status">Състояние</string>
<string name="menu_about">Относно</string>
<string name="menu_shortcuts">Добави пряк път</string> <string name="menu_shortcuts">Добави пряк път</string>
<string name="menu_clear">Изтрий</string> <string name="menu_clear">Изтрий</string>
<string name="about_description">Real time GPS tracker for Android devices. Compatible with Traccar Server and other tracking systems.</string> <string name="status_service_create">Услугата стартира</string>
<string name="about_license">This application is free and open source, source code is licensed under Apache License Version 2.0 and available on GitHub.</string> <string name="status_service_destroy">Услугата спряна</string>
<string name="about_web">For more information visit\nwww.traccar.org/client</string>
<string name="status_send_success">Успешно изпращане</string> <string name="status_send_success">Успешно изпращане</string>
<string name="status_send_fail">Грешка в изпращането</string> <string name="status_send_fail">Грешка в изпращането</string>
<string name="status_location_update">Местоположението е обновено</string> <string name="status_location_update">Местоположението е обновено</string>
<string name="status_connectivity_change">Промяна в свързването</string> <string name="status_network_online">Има връзка с мрежата</string>
<string name="status_network_offline">Няма връзка с мрежа</string>
<string name="hidden_app_name">Настройки</string> <string name="hidden_app_name">Настройки</string>
<string name="hidden_alert">Приложението е скрито. За да го отворите отново, моля наберете 8722227 (TRACCAR).</string> <string name="hidden_alert">Приложението е скрито. За да го отворите отново, моля наберете 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Моля въведете валиден адрес</string>
</resources> </resources>
-10
Просмотреть файл
@@ -16,24 +16,14 @@
<string name="settings_status_on">বন্ধ</string> <string name="settings_status_on">বন্ধ</string>
<string name="settings_status_off_summary">সার্ভিস বন্ধ হয়েছে</string> <string name="settings_status_off_summary">সার্ভিস বন্ধ হয়েছে</string>
<string name="settings_status_on_summary">সার্ভিস চলমান</string> <string name="settings_status_on_summary">সার্ভিস চলমান</string>
<string name="settings_provider_title">লোকেশন প্রদানকারী</string>
<string name="settings_provider_summary">লোকেশন ডেটা উৎস</string>
<string name="settings_provider_gps">জিপিএস প্রদানকারী</string>
<string name="settings_provider_network">নেটওয়ার্ক প্রদানকারী</string>
<string name="settings_provider_mixed">মিশ্র প্রদানকারী</string>
<string name="settings_foreground_title">ফোরগ্রাউন্ড সার্ভিস</string> <string name="settings_foreground_title">ফোরগ্রাউন্ড সার্ভিস</string>
<string name="settings_foreground_summary">সার্ভিসের পূর্ববর্তিতা বৃদ্ধি</string> <string name="settings_foreground_summary">সার্ভিসের পূর্ববর্তিতা বৃদ্ধি</string>
<string name="menu_status">অবস্থা</string> <string name="menu_status">অবস্থা</string>
<string name="menu_about">সম্পর্কে / সম্বন্ধে</string>
<string name="menu_shortcuts">শর্টকাট যুক্ত করা</string> <string name="menu_shortcuts">শর্টকাট যুক্ত করা</string>
<string name="menu_clear">পরিষ্কার</string> <string name="menu_clear">পরিষ্কার</string>
<string name="about_description">অ্যান্ড্রয়েড ডিভাইসের জন্য রিয়েল টাইম GPS ট্র্যাকার। Traccar সার্ভার এবং অন্যান্য ট্র্যাকিং সিস্টেমগুলির সাথে সামঞ্জস্যপূর্ণ।</string>
<string name="about_license">এই অ্যাপ্লিকেশনটি বিনামূল্যে প্রদানকৃত এবং ওপেন সোর্স, সোর্স কোডটি Apache License Version 2.0 এর অধীনে লাইসেন্স করা এবং GitHub এ রক্ষিত।</string>
<string name="about_web">আরও তথ্যের জন্য www.traccar.org/client দেখুন</string>
<string name="status_send_success">সফলভাবে পাঠান হয়েছে</string> <string name="status_send_success">সফলভাবে পাঠান হয়েছে</string>
<string name="status_send_fail">পাঠান ব্যর্থ হয়েছে</string> <string name="status_send_fail">পাঠান ব্যর্থ হয়েছে</string>
<string name="status_location_update">অবস্থান আপডেট</string> <string name="status_location_update">অবস্থান আপডেট</string>
<string name="status_connectivity_change">সংযোগ পরিবর্তন হয়েছে</string>
<string name="hidden_app_name">ডিভাইস সেটিংস</string> <string name="hidden_app_name">ডিভাইস সেটিংস</string>
<string name="hidden_alert">অ্যাপ্লিকেশনটি লুকানো আছে। আবার খুলতে ডায়াল করুন 8722227 (TRACCAR)।</string> <string name="hidden_alert">অ্যাপ্লিকেশনটি লুকানো আছে। আবার খুলতে ডায়াল করুন 8722227 (TRACCAR)।</string>
<string name="error_msg_invalid_url">দয়া করে একটি ভ্যালিড http:// বা https:// URL লিখুন</string> <string name="error_msg_invalid_url">দয়া করে একটি ভ্যালিড http:// বা https:// URL লিখুন</string>
+19 -10
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Traccar klient</string> <string name="app_name">Traccar klient</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Spustit službu</string>
<string name="shortcut_stop">Zastavit službu</string>
<string name="shortcut_sos">Odeslat SOS</string>
<string name="channel_default">Primární kanál</string>
<string name="settings_id_title">Identifikátor zařízení</string> <string name="settings_id_title">Identifikátor zařízení</string>
<string name="settings_url_title">URL serveru</string> <string name="settings_url_title">URL serveru</string>
<string name="settings_url_summary">URL sledovacího serveru</string> <string name="settings_url_summary">URL sledovacího serveru</string>
@@ -16,24 +20,29 @@
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Zastaveno</string> <string name="settings_status_off_summary">Zastaveno</string>
<string name="settings_status_on_summary">Spuštěno</string> <string name="settings_status_on_summary">Spuštěno</string>
<string name="settings_provider_title">Poskytovatel zaměření</string> <string name="settings_buffer">Ukládání do vyrovnávací paměti</string>
<string name="settings_provider_summary">Zdroj zaměřovacích dat</string> <string name="settings_buffer_off_summary">Vyrovnávací pamět vypnuta</string>
<string name="settings_provider_gps">GPS</string> <string name="settings_buffer_on_summary">Vyrovnávací pamět zapnuta</string>
<string name="settings_provider_network">Mobilní síť</string> <string name="settings_wakelock">Zámek probuzení</string>
<string name="settings_provider_mixed">Obojí</string> <string name="settings_wakelock_off_summary">Zámek probuzení vypnut</string>
<string name="settings_wakelock_on_summary">Zámek probuzení zapnut</string>
<string name="settings_accuracy_title">Přesnost umístění</string>
<string name="settings_accuracy_summary">Požadovaná přesnost umístění</string>
<string name="settings_accuracy_high">Vysoká</string>
<string name="settings_accuracy_medium">Střední</string>
<string name="settings_accuracy_low">Nízká</string>
<string name="settings_foreground_title">Popředí služba</string> <string name="settings_foreground_title">Popředí služba</string>
<string name="settings_foreground_summary">Zvýšit prioritu služba</string> <string name="settings_foreground_summary">Zvýšit prioritu služba</string>
<string name="menu_status">Stav</string> <string name="menu_status">Stav</string>
<string name="menu_about">O aplikaci</string>
<string name="menu_shortcuts">Přidat zástupce</string> <string name="menu_shortcuts">Přidat zástupce</string>
<string name="menu_clear">Vyčistit</string> <string name="menu_clear">Vyčistit</string>
<string name="about_description">GPS sledovací aplikace pracující v reálném čase pro zařízení s operačním systémem Android. Kompatibilní s Traccar serverem a dalšími sledovacími systémy.</string> <string name="status_service_create">Služba spuštěna</string>
<string name="about_license">Tato aplikace je zdarma a open source, zdrojový kód je licencován pod Apache License Version 2.0 a je přístupný na GitHub.</string> <string name="status_service_destroy">Služba zastavena</string>
<string name="about_web">Pro více informací navštivte\nwww.traccar.org/client</string>
<string name="status_send_success">Úspěšně odesláno</string> <string name="status_send_success">Úspěšně odesláno</string>
<string name="status_send_fail">Odesílání selhalo</string> <string name="status_send_fail">Odesílání selhalo</string>
<string name="status_location_update">Aktualizace pozice</string> <string name="status_location_update">Aktualizace pozice</string>
<string name="status_connectivity_change">Změna připojení</string> <string name="status_network_online">Síť online</string>
<string name="status_network_offline">Síť offile</string>
<string name="hidden_app_name">Nastavení zařízení</string> <string name="hidden_app_name">Nastavení zařízení</string>
<string name="hidden_alert">Aplikace byla skryta. Pro znovuotevření vytočte 8722227 (TRACCAR)</string> <string name="hidden_alert">Aplikace byla skryta. Pro znovuotevření vytočte 8722227 (TRACCAR)</string>
<string name="error_msg_invalid_url">Prosím vložte platnou http:// nebo https:// URL</string> <string name="error_msg_invalid_url">Prosím vložte platnou http:// nebo https:// URL</string>
+30 -21
Просмотреть файл
@@ -2,39 +2,48 @@
<resources> <resources>
<string name="app_name">Traccar klient</string> <string name="app_name">Traccar klient</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Start tjenesten</string>
<string name="shortcut_stop">Stop tjenesten</string>
<string name="shortcut_sos">Send SOS</string>
<string name="channel_default">Primær kanal</string>
<string name="settings_id_title">Enheds ID</string> <string name="settings_id_title">Enheds ID</string>
<string name="settings_url_title">Server Adresse</string> <string name="settings_url_title">Server Adresse</string>
<string name="settings_url_summary">Tracking server adresse</string> <string name="settings_url_summary">Tracking server adresse</string>
<string name="settings_interval_title">Tracking interval</string> <string name="settings_interval_title">Periode mellem registreringer</string>
<string name="settings_interval_summary">Rapporterings interval i sekunder</string> <string name="settings_interval_summary">Angiv periode i sekunder</string>
<string name="settings_distance_title">Distance</string> <string name="settings_distance_title">Afstand mellem registreringer</string>
<string name="settings_distance_summary">Rapportering distance i meter</string> <string name="settings_distance_summary">Angiv afstand i meter</string>
<string name="settings_angle_title">vinkel</string> <string name="settings_angle_title">Retningsændring som udløser ny registrering</string>
<string name="settings_angle_summary">Rapportering i grader</string> <string name="settings_angle_summary">Angiv retningsændring i grader</string>
<string name="settings_status_title">Service status</string> <string name="settings_status_title">Status af tjenesten</string>
<string name="settings_status_off">Start</string> <string name="settings_status_off">Start</string>
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Service stoppet</string> <string name="settings_status_off_summary">Tjenesten stoppet</string>
<string name="settings_status_on_summary">Service er aktiv</string> <string name="settings_status_on_summary">Tjenesten er aktiv</string>
<string name="settings_provider_title">Udbyder</string> <string name="settings_buffer">Offline buffering</string>
<string name="settings_provider_summary">Udbyder lokaliseringsdata</string> <string name="settings_buffer_off_summary">buffering off</string>
<string name="settings_provider_gps">GPS udbyder</string> <string name="settings_buffer_on_summary">buffering on</string>
<string name="settings_provider_network">Netværks udbyder</string> <string name="settings_wakelock">Vågelås</string>
<string name="settings_provider_mixed">Mixet udbyder</string> <string name="settings_wakelock_off_summary">Vågelås off</string>
<string name="settings_wakelock_on_summary">Vågelås on</string>
<string name="settings_accuracy_title">Placeringsnøjagtighed</string>
<string name="settings_accuracy_summary">Ønsket placeringsnøjagtighed</string>
<string name="settings_accuracy_high">Høj</string>
<string name="settings_accuracy_medium">Mellem</string>
<string name="settings_accuracy_low">Lav</string>
<string name="settings_foreground_title">Forgrunds tjeneste</string> <string name="settings_foreground_title">Forgrunds tjeneste</string>
<string name="settings_foreground_summary">Øg tjeneste prioritet</string> <string name="settings_foreground_summary">Øg tjeneste prioritet</string>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
<string name="menu_about">Om</string>
<string name="menu_shortcuts">Tilføj genveje</string> <string name="menu_shortcuts">Tilføj genveje</string>
<string name="menu_clear">Tilbage</string> <string name="menu_clear">Slet</string>
<string name="about_description">Real tid`s GPS tracker for Android enheder. Kompatibel med Traccar Server og andre tracking systemer.</string> <string name="status_service_create">Tjenesten kører</string>
<string name="about_license">Denne application er en fri og open source, source koden er licenseret under Apache License Version 2.0 og tilgængelig på GitHub.</string> <string name="status_service_destroy">Tjenesten er stoppet</string>
<string name="about_web">For mere information besøg\nwww.traccar.org/client</string>
<string name="status_send_success">Send succesfuld</string> <string name="status_send_success">Send succesfuld</string>
<string name="status_send_fail">Send fejlede</string> <string name="status_send_fail">Send fejlede</string>
<string name="status_location_update">Placering opdateret</string> <string name="status_location_update">Placering opdateret</string>
<string name="status_connectivity_change">Connectivity forandring</string> <string name="status_network_online">Netværk online</string>
<string name="status_network_offline">Netværk offline</string>
<string name="hidden_app_name">Enheds indstillinger</string> <string name="hidden_app_name">Enheds indstillinger</string>
<string name="hidden_alert">Appen er skjult. For at åbne appen igen skal du ringe til 8722227 (TRACCAR)</string> <string name="hidden_alert">Appen er skjult. For at åbne appen igen skal du ringe til 8722227 (TRACCAR)</string>
<string name="error_msg_invalid_url">Indtast valid http:// eller https:/ adresse</string> <string name="error_msg_invalid_url">Indtast gyldig http:// eller https:// adresse</string>
</resources> </resources>
+10 -10
Просмотреть файл
@@ -20,26 +20,26 @@
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Dienst inaktiv</string> <string name="settings_status_off_summary">Dienst inaktiv</string>
<string name="settings_status_on_summary">Dienst aktiv</string> <string name="settings_status_on_summary">Dienst aktiv</string>
<string name="settings_provider_title">Datenherkunft</string> <string name="settings_buffer">Offline puffern</string>
<string name="settings_provider_summary">Quelle der Positionsdaten</string> <string name="settings_buffer_off_summary">Puffern aus</string>
<string name="settings_provider_gps">GPS-Provider</string> <string name="settings_buffer_on_summary">Puffern ein</string>
<string name="settings_provider_network">Netzwerk-Provider</string> <string name="settings_accuracy_title">Positionsgenauigkeit</string>
<string name="settings_provider_mixed">Gemischt</string> <string name="settings_accuracy_summary">Erwünschte Positionsgenauigkeit</string>
<string name="settings_accuracy_high">Hoch</string>
<string name="settings_accuracy_medium">Mittel</string>
<string name="settings_accuracy_low">Niedrig</string>
<string name="settings_foreground_title">Vordergrund Service</string> <string name="settings_foreground_title">Vordergrund Service</string>
<string name="settings_foreground_summary">Servicepriorität erhöhen</string> <string name="settings_foreground_summary">Servicepriorität erhöhen</string>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
<string name="menu_about">Über</string>
<string name="menu_shortcuts">Verknüpfung hinzufügen</string> <string name="menu_shortcuts">Verknüpfung hinzufügen</string>
<string name="menu_clear">Leeren</string> <string name="menu_clear">Leeren</string>
<string name="about_description">Echtzeit GPS Ortung für Android Geräte. Kompatibel mit Traccar Server und anderen Ortungsservern.</string>
<string name="about_license">Dieses Programm ist frei und Open Source. Es ist unter Apache Lizenz Version 2.0 lizenziert und ist auf GitHub verfügbar.</string>
<string name="about_web">Für weitere Informationen besuchen Sie www.traccar.org/client</string>
<string name="status_service_create">Dienst gestartet</string> <string name="status_service_create">Dienst gestartet</string>
<string name="status_service_destroy">Dienst gestoppt</string> <string name="status_service_destroy">Dienst gestoppt</string>
<string name="status_send_success">Erfolgreich gesendet</string> <string name="status_send_success">Erfolgreich gesendet</string>
<string name="status_send_fail">Übertragung fehlerhaft</string> <string name="status_send_fail">Übertragung fehlerhaft</string>
<string name="status_location_update">Positionsupdate</string> <string name="status_location_update">Positionsupdate</string>
<string name="status_connectivity_change">Anschlusswechsel</string> <string name="status_network_online">Netzwerk online</string>
<string name="status_network_offline">Netzwerk offline</string>
<string name="hidden_app_name">Geräteeinstellungen</string> <string name="hidden_app_name">Geräteeinstellungen</string>
<string name="hidden_alert">Die App wurde versteckt. Um sie wieder zu öffnen, wähle 8722227 (TRACCAR).</string> <string name="hidden_alert">Die App wurde versteckt. Um sie wieder zu öffnen, wähle 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Bitte eine gültige http:// oder https:// URL eingeben</string> <string name="error_msg_invalid_url">Bitte eine gültige http:// oder https:// URL eingeben</string>
+30 -12
Просмотреть файл
@@ -1,31 +1,49 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<resources> <resources>
<string name="app_name">πελάτης Traccar</string> <string name="app_name">Εφαρμογή Traccar</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Εκκίνηση υπηρεσίας</string>
<string name="shortcut_stop">Διακοπή υπηρεσίας</string>
<string name="shortcut_sos">Αποστολή SOS</string>
<string name="channel_default">Κύριο κανάλι</string>
<string name="settings_id_title">Αναγνωριστικό συσκευής</string> <string name="settings_id_title">Αναγνωριστικό συσκευής</string>
<string name="settings_url_title">Διεύθυνση διακομιστή</string>
<string name="settings_url_summary">Διεύθυνση διακομιστή παρακολούθησης</string>
<string name="settings_interval_title">Συχνότητα</string> <string name="settings_interval_title">Συχνότητα</string>
<string name="settings_interval_summary">Διάστημα αναφορών σε δευτερόλεπτα</string>
<string name="settings_distance_title">Απόσταση</string>
<string name="settings_distance_summary">Απόσταση αναφορών σε μέτρα</string>
<string name="settings_angle_title">Γωνία</string>
<string name="settings_angle_summary">Γωνία αναφορών σε μοίρες</string>
<string name="settings_status_title">Κατάσταση υπηρεσίας</string> <string name="settings_status_title">Κατάσταση υπηρεσίας</string>
<string name="settings_status_off">Εκκίνηση</string> <string name="settings_status_off">Εκκίνηση</string>
<string name="settings_status_on">Παύση</string> <string name="settings_status_on">Παύση</string>
<string name="settings_status_off_summary">Η υπηρεσία σταμάτησε</string> <string name="settings_status_off_summary">Η υπηρεσία σταμάτησε</string>
<string name="settings_status_on_summary">Η υπηρεσία εκτελείται</string> <string name="settings_status_on_summary">Η υπηρεσία εκτελείται</string>
<string name="settings_provider_title">Παροχέας τοποθεσίας</string> <string name="settings_buffer">Εκτός σύνδεσης ενδιάμεση αποθήκευση</string>
<string name="settings_provider_summary">Πηγή δεδομένων τοποθεσίας</string> <string name="settings_buffer_off_summary">Ενδιάμεση αποθήκευση απενεργοποιημένη</string>
<string name="settings_provider_gps">Παροχή GPS</string> <string name="settings_buffer_on_summary">Ενδιάμεση αποθήκευση ενεργοποιημένη</string>
<string name="settings_provider_network">Παροχή δικτύου</string> <string name="settings_wakelock">Κλείδωμα αφύπνισης</string>
<string name="settings_provider_mixed">Μεικτή παροχή</string> <string name="settings_wakelock_off_summary">Κλείδωμα αφύπνισης απενεργοποιημένο</string>
<string name="settings_wakelock_on_summary">Κλείδωμα αφύπνισης ενεργοποιημένο</string>
<string name="settings_accuracy_title">Ακρίβεια θέσης</string>
<string name="settings_accuracy_summary">Επιθυμητή ακρίβεια θέσης</string>
<string name="settings_accuracy_high">Υψηλή</string>
<string name="settings_accuracy_medium">Μέση</string>
<string name="settings_accuracy_low">Χαμηλή</string>
<string name="settings_foreground_title">Υπηρεσία προσκηνίου</string> <string name="settings_foreground_title">Υπηρεσία προσκηνίου</string>
<string name="settings_foreground_summary">Αύξηση προτεραιότητας της υπηρεσίας</string> <string name="settings_foreground_summary">Αύξηση προτεραιότητας της υπηρεσίας</string>
<string name="menu_status">Κατάσταση</string> <string name="menu_status">Κατάσταση</string>
<string name="menu_about">Περί</string>
<string name="menu_shortcuts">Προσθήκη συντόμευσης</string> <string name="menu_shortcuts">Προσθήκη συντόμευσης</string>
<string name="menu_clear">Καθαρισμός</string> <string name="menu_clear">Καθαρισμός</string>
<string name="about_description">GPS ιχνηλάτης πραγματικού χρόνου για συσκευές Android. Συμβατός με Traccar και άλλα συστήματα ιχνηλάτησης.</string> <string name="status_service_create">Η υπηρεσία εκκινήθηκε</string>
<string name="about_license">Εφαρμογή Ελεύθερου και Ανοικτού κώδικα. Ο πηγαίος κώδικας παρέχεται με άδεια Apache 2.0 και διατίθεται στο GitHub.</string> <string name="status_service_destroy">Η υπηρεσία διακόπηκε</string>
<string name="about_web">Για περισσότερες πληροφορίες επισκεφτείτε\nwww.traccar.org/client</string> <string name="status_send_success">Απεστάλη επιτυχώς</string>
<string name="status_send_fail">Αποτυχημένη αποστολή</string> <string name="status_send_fail">Η αποστολή απέτυχε</string>
<string name="status_location_update">Ενημέρωση τοποθεσίας</string> <string name="status_location_update">Ενημέρωση τοποθεσίας</string>
<string name="status_connectivity_change">Αλλαγή στη διασύνδεση</string> <string name="status_network_online">Ενεργό δίκτυο</string>
<string name="status_network_offline">Ανενεργό δίκτυο</string>
<string name="hidden_app_name">Ρυθμίσεις συσκευής</string> <string name="hidden_app_name">Ρυθμίσεις συσκευής</string>
<string name="hidden_alert">Η εφαρμογή αποκρύφτηκε. Για να προβληθεί καλέστε 8722227 (TRACCAR)</string> <string name="hidden_alert">Η εφαρμογή αποκρύφτηκε. Για να προβληθεί καλέστε 8722227 (TRACCAR)</string>
<string name="error_msg_invalid_url">Παρακαλώ εισάγετε μία έγκυρη http:// ή https:// διεύθυνση</string>
</resources> </resources>
+21 -13
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Cliente Traccar</string> <string name="app_name">Cliente Traccar</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Iniciar servicio</string>
<string name="shortcut_stop">Detener servicio</string>
<string name="shortcut_sos">Enviar SOS</string>
<string name="channel_default">Canal primario</string>
<string name="settings_id_title">Identificador de dispositivo</string> <string name="settings_id_title">Identificador de dispositivo</string>
<string name="settings_url_title">URL del servidor</string> <string name="settings_url_title">URL del servidor</string>
<string name="settings_url_summary">URL del servidor de seguimiento</string> <string name="settings_url_summary">URL del servidor de seguimiento</string>
@@ -12,29 +16,33 @@
<string name="settings_angle_title">Ángulo</string> <string name="settings_angle_title">Ángulo</string>
<string name="settings_angle_summary">Ángulo para reportes en grados</string> <string name="settings_angle_summary">Ángulo para reportes en grados</string>
<string name="settings_status_title">Estado del servicio</string> <string name="settings_status_title">Estado del servicio</string>
<string name="settings_status_off">Activado</string> <string name="settings_status_off">Activar</string>
<string name="settings_status_on">Desactivado</string> <string name="settings_status_on">Desactivar</string>
<string name="settings_status_off_summary">Servicio detenido</string> <string name="settings_status_off_summary">Servicio detenido</string>
<string name="settings_status_on_summary">Servicio en ejecución</string> <string name="settings_status_on_summary">Servicio en ejecución</string>
<string name="settings_provider_title">Proveedor de localización</string> <string name="settings_buffer">Búfer fuera de línea</string>
<string name="settings_provider_summary">Fuente de los datos de localización</string> <string name="settings_buffer_off_summary">Búfer activado</string>
<string name="settings_provider_gps">Proveedor GPS</string> <string name="settings_buffer_on_summary">Búfer desactivado</string>
<string name="settings_provider_network">Proveedor de red</string> <string name="settings_wakelock">Estado despierto forzado</string>
<string name="settings_provider_mixed">Proveedor mixto</string> <string name="settings_wakelock_off_summary">Estado despierto forzado activado</string>
<string name="settings_wakelock_on_summary">Estado despierto forzado desactivado</string>
<string name="settings_accuracy_title">Precisión de posición</string>
<string name="settings_accuracy_summary">Precisión de posición deseada</string>
<string name="settings_accuracy_high">Alta</string>
<string name="settings_accuracy_medium">Media</string>
<string name="settings_accuracy_low">Baja</string>
<string name="settings_foreground_title">Servicio en primer plano</string> <string name="settings_foreground_title">Servicio en primer plano</string>
<string name="settings_foreground_summary">Aumentar prioridad del servicio</string> <string name="settings_foreground_summary">Aumentar prioridad del servicio</string>
<string name="menu_status">Estado</string> <string name="menu_status">Estado</string>
<string name="menu_about">Acerca de…</string>
<string name="menu_shortcuts">Añadir acceso directo</string> <string name="menu_shortcuts">Añadir acceso directo</string>
<string name="menu_clear">Limpiar</string> <string name="menu_clear">Limpiar</string>
<string name="about_description">Rastreador GPS en tiempo real para dispositivos Android. Compatible con Servidor Traccar y otros sistemas de rastreo.</string> <string name="status_service_create">Servicio iniciado</string>
<string name="about_license">Esta aplición es gratuíta y de código abierto. El código fuente está bajo la Licencia Apache Versión 2 y disponible en Github.</string> <string name="status_service_destroy">Servicio detenido</string>
<string name="about_web">Para más información visite
www.traccar.org/client</string>
<string name="status_send_success">Enviado correctamente</string> <string name="status_send_success">Enviado correctamente</string>
<string name="status_send_fail">Falló el envío</string> <string name="status_send_fail">Falló el envío</string>
<string name="status_location_update">Actualización de localización</string> <string name="status_location_update">Actualización de localización</string>
<string name="status_connectivity_change">Cambio en la conectividad</string> <string name="status_network_online">Red en línea</string>
<string name="status_network_offline">Red fuera de línea</string>
<string name="hidden_app_name">Ajustes del dispositivo</string> <string name="hidden_app_name">Ajustes del dispositivo</string>
<string name="hidden_alert">La aplicación se ha ocultado. Para abrirla de nuevo por favor marque 8722227 (TRACCAR).</string> <string name="hidden_alert">La aplicación se ha ocultado. Para abrirla de nuevo por favor marque 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Por favor. Introduzca una URL válida http:// ó https:// </string> <string name="error_msg_invalid_url">Por favor. Introduzca una URL válida http:// ó https:// </string>
+13 -11
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">ردیاب Traccar</string> <string name="app_name">ردیاب Traccar</string>
<string name="app_logo">ردیاب Traccar</string> <string name="app_logo">ردیاب Traccar</string>
<string name="shortcut_start">شروع کار</string>
<string name="shortcut_stop">توقف کار</string>
<string name="shortcut_sos">ارسال پیام اضطراری</string>
<string name="channel_default">شبکه اولیه</string>
<string name="settings_id_title">کد هویت دستگاه</string> <string name="settings_id_title">کد هویت دستگاه</string>
<string name="settings_url_title">مسیر آدرس سرور</string> <string name="settings_url_title">مسیر آدرس سرور</string>
<string name="settings_url_summary">مسیر آدرس سرور مسیریاب</string> <string name="settings_url_summary">مسیر آدرس سرور مسیریاب</string>
@@ -16,25 +20,23 @@
<string name="settings_status_on">توقف</string> <string name="settings_status_on">توقف</string>
<string name="settings_status_off_summary">سرویس متوقف است</string> <string name="settings_status_off_summary">سرویس متوقف است</string>
<string name="settings_status_on_summary">سرویس در حال کار است</string> <string name="settings_status_on_summary">سرویس در حال کار است</string>
<string name="settings_provider_title">ارائه مکان</string> <string name="settings_accuracy_title">دقت مکان</string>
<string name="settings_provider_summary">سورس اطلاعات مکان</string> <string name="settings_accuracy_summary">دقت مکان دلخواه</string>
<string name="settings_provider_gps">ارائه GPS</string> <string name="settings_accuracy_high">زیاد</string>
<string name="settings_provider_network">ارائه شبکه اپراتور</string> <string name="settings_accuracy_medium">متوسط</string>
<string name="settings_provider_mixed">ارائه ترکیبی</string> <string name="settings_accuracy_low">کم</string>
<string name="settings_foreground_title">سرویس پیش زمینه</string> <string name="settings_foreground_title">سرویس پیش زمینه</string>
<string name="settings_foreground_summary">افزایش اولویت سرویس</string> <string name="settings_foreground_summary">افزایش اولویت سرویس</string>
<string name="menu_status">وضعیت</string> <string name="menu_status">وضعیت</string>
<string name="menu_about">درباره</string>
<string name="menu_shortcuts">ایجاد میانبر</string> <string name="menu_shortcuts">ایجاد میانبر</string>
<string name="menu_clear">پاک کردن</string> <string name="menu_clear">پاک کردن</string>
<string name="about_description">ردیاب زنده GPS برای اندروید . سازگار با سرورهای Traccar و سایر سرورهای ردیاب</string> <string name="status_service_create">کار شروع شد</string>
<string name="about_license">این نرم افزار مجانی و سورس باز تحت لیسانس Apache نگارش 2.0 و فعال در GitHub.</string> <string name="status_service_destroy">کار متوقف شد</string>
<string name="about_web">برای کسب اطلاعات بیشتر به سایت زیر مراجعه نمایید.
www.traccar.org/client</string>
<string name="status_send_success">ارسال موفق</string> <string name="status_send_success">ارسال موفق</string>
<string name="status_send_fail">ارسال ناموفق</string> <string name="status_send_fail">ارسال ناموفق</string>
<string name="status_location_update">به روز رسانی مکان</string> <string name="status_location_update">به روز رسانی مکان</string>
<string name="status_connectivity_change">تغییرات در ارتباطات</string> <string name="status_network_online">شبکه آنلاین</string>
<string name="status_network_offline">شبکه آفلاین</string>
<string name="hidden_app_name">تنظیمات دستگاه</string> <string name="hidden_app_name">تنظیمات دستگاه</string>
<string name="hidden_alert">نرم افزار مخفی است . جهت نمایش آن با این شماره تماس بگیرید. <string name="hidden_alert">نرم افزار مخفی است . جهت نمایش آن با این شماره تماس بگیرید.
8722227 (Traccar)</string> 8722227 (Traccar)</string>
+20 -12
Просмотреть файл
@@ -2,9 +2,13 @@
<resources> <resources>
<string name="app_name">Traccar Client</string> <string name="app_name">Traccar Client</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="settings_id_title">Laitteen tunniste</string> <string name="shortcut_start">Käynnistä palvelu</string>
<string name="shortcut_stop">Pysäytä palvelu</string>
<string name="shortcut_sos">Lähetä SOS-viesti</string>
<string name="channel_default">Ensisijainen kanava</string>
<string name="settings_id_title">Laitteen ID</string>
<string name="settings_url_title">Palvelimen URL</string> <string name="settings_url_title">Palvelimen URL</string>
<string name="settings_url_summary">Jäljityspalvelimen URL-osoite</string> <string name="settings_url_summary">Paikannuspalvelimen URL-osoite</string>
<string name="settings_interval_title">Taajuus</string> <string name="settings_interval_title">Taajuus</string>
<string name="settings_interval_summary">Raportointiväli sekunneissa</string> <string name="settings_interval_summary">Raportointiväli sekunneissa</string>
<string name="settings_distance_title">Matka</string> <string name="settings_distance_title">Matka</string>
@@ -16,22 +20,26 @@
<string name="settings_status_on">Pysäytä</string> <string name="settings_status_on">Pysäytä</string>
<string name="settings_status_off_summary">Palvelu pysäytetty</string> <string name="settings_status_off_summary">Palvelu pysäytetty</string>
<string name="settings_status_on_summary">Palvelu käynnissä</string> <string name="settings_status_on_summary">Palvelu käynnissä</string>
<string name="settings_provider_title">Sijainnin tarjoaja</string> <string name="settings_buffer">Offline-puskurointi</string>
<string name="settings_provider_summary">Sijaintidatan lähde</string> <string name="settings_buffer_off_summary">Puskurointi pois päältä</string>
<string name="settings_provider_gps">GPS satelliiti</string> <string name="settings_buffer_on_summary">Puskurointi päälle</string>
<string name="settings_provider_network">Matkapuhelinverkko</string> <string name="settings_accuracy_title">Sijainnin tarkkuus</string>
<string name="settings_provider_mixed">Yhdistelmä</string> <string name="settings_accuracy_summary">Haluttu sijainnin tarkkuus</string>
<string name="settings_accuracy_high">Korkea</string>
<string name="settings_accuracy_medium">Keskitasoinen</string>
<string name="settings_accuracy_low">Matala</string>
<string name="settings_foreground_title">Edustapalvelu</string>
<string name="settings_foreground_summary">Lisää palvelun prioriteettia</string>
<string name="menu_status">Tila</string> <string name="menu_status">Tila</string>
<string name="menu_about">About</string>
<string name="menu_shortcuts">Lisää pikakuvakkeet</string> <string name="menu_shortcuts">Lisää pikakuvakkeet</string>
<string name="menu_clear">Tyhjennä</string> <string name="menu_clear">Tyhjennä</string>
<string name="about_description">Reaaliaikainen GPS-jäljitin Android-laitteille. Yhteensopiva Traccar Serverin ja muiden jäljitysjärjestelmien kanssa.</string> <string name="status_service_create">Palvelu käynnistynyt</string>
<string name="about_license">Tämä sovellus on vapaata ja avointa lähdekoodia. Lähdekoodi on lisensoitu Apache License Version 2.0 -lisenssillä ja on saatavilla GitHubissa.</string> <string name="status_service_destroy">Palvelu pysähtyi</string>
<string name="about_web">Lisätietoa on osoitteessa\nwww.traccar.org/client</string>
<string name="status_send_success">Lähetys onnistui</string> <string name="status_send_success">Lähetys onnistui</string>
<string name="status_send_fail">Lähetys epäonnistui</string> <string name="status_send_fail">Lähetys epäonnistui</string>
<string name="status_location_update">Sijainnin päivitys</string> <string name="status_location_update">Sijainnin päivitys</string>
<string name="status_connectivity_change">Muutos yhteydessä</string> <string name="status_network_online">Yhdistetty verkkoon</string>
<string name="status_network_offline">Verkkoyhteys katkennut</string>
<string name="hidden_app_name">Laitteen asetukset</string> <string name="hidden_app_name">Laitteen asetukset</string>
<string name="hidden_alert">Sovellus on piilotettu. Näppäile 8722227 (TRACCAR) avataksesi sovelluksen uudelleen.</string> <string name="hidden_alert">Sovellus on piilotettu. Näppäile 8722227 (TRACCAR) avataksesi sovelluksen uudelleen.</string>
<string name="error_msg_invalid_url">Syötä kelvollinen http:// tai https:// URL-osoite</string> <string name="error_msg_invalid_url">Syötä kelvollinen http:// tai https:// URL-osoite</string>
+13 -10
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Client Traccar</string> <string name="app_name">Client Traccar</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Démarrer le service</string>
<string name="shortcut_stop">Arrêter le service</string>
<string name="shortcut_sos">Envoyer un SOS</string>
<string name="channel_default">Canal primaire</string>
<string name="settings_id_title">Identifiant de l\'appareil</string> <string name="settings_id_title">Identifiant de l\'appareil</string>
<string name="settings_url_title">URL du serveur</string> <string name="settings_url_title">URL du serveur</string>
<string name="settings_url_summary">URL du serveur de suivi</string> <string name="settings_url_summary">URL du serveur de suivi</string>
@@ -16,24 +20,23 @@
<string name="settings_status_on">Arrêter</string> <string name="settings_status_on">Arrêter</string>
<string name="settings_status_off_summary">Arrêté</string> <string name="settings_status_off_summary">Arrêté</string>
<string name="settings_status_on_summary">En marche</string> <string name="settings_status_on_summary">En marche</string>
<string name="settings_provider_title">Source de localisation</string> <string name="settings_accuracy_title">Precision de la localisation</string>
<string name="settings_provider_summary">Source utilisée par le système afin d\'obtenir la localisation de l\'appareil</string> <string name="settings_accuracy_summary">Précision de localisation désirée</string>
<string name="settings_provider_gps">Mode GPS uniquement</string> <string name="settings_accuracy_high">Haut</string>
<string name="settings_provider_network">Mode cellulaire uniquement</string> <string name="settings_accuracy_medium">Moyen</string>
<string name="settings_provider_mixed">Mode hybride</string> <string name="settings_accuracy_low">Bas</string>
<string name="settings_foreground_title">Un service de premier plan</string> <string name="settings_foreground_title">Un service de premier plan</string>
<string name="settings_foreground_summary">Augmenter la priorité de service</string> <string name="settings_foreground_summary">Augmenter la priorité de service</string>
<string name="menu_status">Etat</string> <string name="menu_status">Etat</string>
<string name="menu_about">A propos</string>
<string name="menu_shortcuts">Ajouter des raccourcis</string> <string name="menu_shortcuts">Ajouter des raccourcis</string>
<string name="menu_clear">Effacer</string> <string name="menu_clear">Effacer</string>
<string name="about_description">Suivi GPS en temps réels pour appareils Android. Compatible avec le serveur Traccar ainsi que d\'autres plateformes de suivi.</string> <string name="status_service_create">Service démarré</string>
<string name="about_license">Cette application open source est gratuite. Le code source est disponible sur GitHub est sous licence Apache Version 2.0.</string> <string name="status_service_destroy">Service arrêté</string>
<string name="about_web">Pour plus dinformation, visitez le site: \nwww.traccar.org/client</string>
<string name="status_send_success">Envoyé avec succès</string> <string name="status_send_success">Envoyé avec succès</string>
<string name="status_send_fail">Lenvoi a échoué</string> <string name="status_send_fail">Lenvoi a échoué</string>
<string name="status_location_update">Localisation mise à jour</string> <string name="status_location_update">Localisation mise à jour</string>
<string name="status_connectivity_change">Changement de connectivité</string> <string name="status_network_online">Réseau connecté</string>
<string name="status_network_offline">Réseau déconnecté</string>
<string name="hidden_app_name">Paramètres de l\'appareil</string> <string name="hidden_app_name">Paramètres de l\'appareil</string>
<string name="hidden_alert">Cette application a été cachée. Pour l\'ouvrir à nouveau, composez le 8722227 (TRACCAR)</string> <string name="hidden_alert">Cette application a été cachée. Pour l\'ouvrir à nouveau, composez le 8722227 (TRACCAR)</string>
<string name="error_msg_invalid_url">S\'il vous plait, entrer un URL http:// ou https:// valide</string> <string name="error_msg_invalid_url">S\'il vous plait, entrer un URL http:// ou https:// valide</string>
+25 -12
Просмотреть файл
@@ -1,30 +1,43 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<resources> <resources>
<string name="app_name">שרלוק לאנדרויד</string> <string name="app_name"> Traccar לאנדרויד</string>
<string name="app_logo">שרלוק</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">הפעל שירות </string>
<string name="shortcut_stop">עצור תהליך</string>
<string name="shortcut_sos">שלח הודעת חירום</string>
<string name="channel_default">ערוץ ראשי</string>
<string name="settings_id_title">מזהה מכשיר</string> <string name="settings_id_title">מזהה מכשיר</string>
<string name="settings_url_title">כתובת שרת</string>
<string name="settings_url_summary">כתובת שרת איתור</string>
<string name="settings_interval_title">תדירות</string> <string name="settings_interval_title">תדירות</string>
<string name="settings_interval_summary">זמן דיווח בשניות </string>
<string name="settings_distance_title">מרחק</string>
<string name="settings_distance_summary">דיווח מרחק במטרים</string>
<string name="settings_angle_title">זווית</string>
<string name="settings_angle_summary">דיווח פניות בזווית </string>
<string name="settings_status_title">מצב שירות</string> <string name="settings_status_title">מצב שירות</string>
<string name="settings_status_off">הפעל</string> <string name="settings_status_off">הפעל</string>
<string name="settings_status_on">עצור</string> <string name="settings_status_on">עצור</string>
<string name="settings_status_off_summary">השירות הופסק</string> <string name="settings_status_off_summary">השירות הופסק</string>
<string name="settings_status_on_summary">השירות פועל</string> <string name="settings_status_on_summary">השירות פועל</string>
<string name="settings_provider_title">ספק מיקום</string> <string name="settings_accuracy_title">דיוק מיקום</string>
<string name="settings_provider_summary">ספק מיקום</string> <string name="settings_accuracy_summary">דיוק מיקום מבוקש</string>
<string name="settings_provider_gps">GPS</string> <string name="settings_accuracy_high">מדוייק </string>
<string name="settings_provider_network">רשת</string> <string name="settings_accuracy_medium">בינוני</string>
<string name="settings_provider_mixed">GPS + רשת</string> <string name="settings_accuracy_low">נמוך - משתמש רק בGPS של המכשיר </string>
<string name="settings_foreground_title">אפשר הפעלה ברקע</string>
<string name="settings_foreground_summary">הגדל את עדיפות התוכנה</string> <string name="settings_foreground_summary">הגדל את עדיפות התוכנה</string>
<string name="menu_status">סטטוס</string> <string name="menu_status">סטטוס</string>
<string name="menu_about">אודות</string>
<string name="menu_shortcuts">הוסף קיצור דרך</string> <string name="menu_shortcuts">הוסף קיצור דרך</string>
<string name="menu_clear">נקה</string> <string name="menu_clear">נקה</string>
<string name="about_description">GPS Tracker בזמן אמת עבור מכשירי אנדרואיד</string> <string name="status_service_create">אפליקציה הופעלה</string>
<string name="about_license">יישום זה הוא קוד פתוח, קוד המקור מורשה תחת רישיון Apache גירסה 2.0 וזמין על GitHub.</string> <string name="status_service_destroy">אפליקציה הופסקה</string>
<string name="about_web">לפרטים נוספים ניתן לפנות לרוגב מחשבים 09-7469155 / www.sherlock.co.il או visit\nwww.traccar.org/client</string>
<string name="status_send_success">נשלח בהצלחה</string> <string name="status_send_success">נשלח בהצלחה</string>
<string name="status_send_fail">שליחה נכשלה</string> <string name="status_send_fail">שליחה נכשלה</string>
<string name="status_location_update">עדכון מיקום</string> <string name="status_location_update">עדכון מיקום</string>
<string name="status_connectivity_change">שינוי חיבור</string> <string name="status_network_online">רשת באונליין </string>
<string name="status_network_offline">רשת מנותקת</string>
<string name="hidden_app_name">הגדרות המכשיר</string> <string name="hidden_app_name">הגדרות המכשיר</string>
<string name="hidden_alert">האפליקציה הוסתרה. כדי לפתוח אותה שוב חייג בטלפון 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">הזן כתובת חוקית http:// או https:// URL</string>
</resources> </resources>
+24 -12
Просмотреть файл
@@ -2,30 +2,42 @@
<resources> <resources>
<string name="app_name">ट्रैक्कार क्लाइंट </string> <string name="app_name">ट्रैक्कार क्लाइंट </string>
<string name="app_logo">ट्रैक्कार</string> <string name="app_logo">ट्रैक्कार</string>
<string name="shortcut_start">प्रारंभ</string>
<string name="shortcut_stop">रोक</string>
<string name="shortcut_sos">मुसीबत का इशारा</string>
<string name="channel_default">डिफ़ॉल्ट</string>
<string name="settings_id_title">उपकरण पहचानकर्ता</string> <string name="settings_id_title">उपकरण पहचानकर्ता</string>
<string name="settings_url_title">यूआरएल शीर्षक</string>
<string name="settings_url_summary">यूआरएल सारांश</string>
<string name="settings_interval_title">फ्रीक्वेंसी / आवृत्ति</string> <string name="settings_interval_title">फ्रीक्वेंसी / आवृत्ति</string>
<string name="settings_interval_summary">अंतराल सारांश</string>
<string name="settings_distance_title">दूरी शीर्षक</string>
<string name="settings_distance_summary">दूरी सारांश</string>
<string name="settings_angle_title">कोण शीर्षक</string>
<string name="settings_angle_summary">कोण सारांश</string>
<string name="settings_status_title">सेवा की स्थिति</string> <string name="settings_status_title">सेवा की स्थिति</string>
<string name="settings_status_off">आरम्भ</string> <string name="settings_status_off">आरम्भ</string>
<string name="settings_status_on">रोकें</string> <string name="settings_status_on">रोकें</string>
<string name="settings_status_off_summary">सेवा रुक गई है</string> <string name="settings_status_off_summary">सेवा रुक गई है</string>
<string name="settings_status_on_summary">सेवा चल रही है</string> <string name="settings_status_on_summary">सेवा चल रही है</string>
<string name="settings_provider_title">जगह / स्थान / स्तिथि प्रदाता</string> <string name="settings_accuracy_title">सटीकता शीर्षक</string>
<string name="settings_provider_summary">जगह / स्थान / स्तिथि डेटा का स्रोत</string> <string name="settings_accuracy_summary">सटीकता सारांश</string>
<string name="settings_provider_gps">जीपीएस प्रदाता</string> <string name="settings_accuracy_high">सटीकता उच्च</string>
<string name="settings_provider_network">नेटवर्क प्रदाता</string> <string name="settings_accuracy_medium">सटीकता माध्यम</string>
<string name="settings_provider_mixed">मिश्रित प्रदाता</string> <string name="settings_accuracy_low">सटीकता कम</string>
<string name="settings_foreground_title">अग्रभूमि सेव</string> <string name="settings_foreground_title">अग्रभूमि शीर्षक</string>
<string name="settings_foreground_summary">सेवा प्राथमिकता बढ़ाएँ</string> <string name="settings_foreground_summary">अग्रभूमि सारांश</string>
<string name="menu_status">स्थिति</string> <string name="menu_status">स्थिति</string>
<string name="menu_about">बारे में</string>
<string name="menu_shortcuts">शॉर्टकट्स जोड़ें</string> <string name="menu_shortcuts">शॉर्टकट्स जोड़ें</string>
<string name="menu_clear">स्पष्ट / साफ़</string> <string name="menu_clear">स्पष्ट / साफ़</string>
<string name="about_description">एंड्रॉयड उपकरणों के लिए वास्तविक समय जीपीएस ट्रैकर। ट्रैक्कार सर्वर और अन्य ट्रैकिंग प्रणालियों के साथ अनुकूल।</string> <string name="status_service_create">सेवा बनाएँ</string>
<string name="about_license">इस एप्लिकेशन के पास स्वतंत्र और खुला स्रोत है , स्रोत कोड अपाचे लाइसेंस संस्करण 2.0 और GitHub के अंतर्गत उपलब्ध लाइसेंस प्राप्त है ।</string> <string name="status_service_destroy">सेवा नष्ट</string>
<string name="about_web">अधिक जानकारी के लिए www.traccar.org/client वेबसाइट देखें </string> <string name="status_send_success">सफलता भेजें</string>
<string name="status_send_fail">भेजना विफल हो गया है </string> <string name="status_send_fail">भेजना विफल हो गया है </string>
<string name="status_location_update">जगह / स्थान / स्तिथि का अद्यतन / ताजी जानकारी</string> <string name="status_location_update">जगह / स्थान / स्तिथि का अद्यतन / ताजी जानकारी</string>
<string name="status_connectivity_change">नेक्टिविटी / संयोजकता परिवर्त</string> <string name="status_network_online">नेटवर्क ऑनलाइ</string>
<string name="status_network_offline">नेटवर्क ऑफ़लाइन</string>
<string name="hidden_app_name">उपकरण की सेटिंग्स</string> <string name="hidden_app_name">उपकरण की सेटिंग्स</string>
<string name="hidden_alert">एप्लिकेशन को छुपा दिया गया है l इसे फिर से खोलने के लिए डायल करें 8722227 ( TRACCAR ) l</string> <string name="hidden_alert">एप्लिकेशन को छुपा दिया गया है l इसे फिर से खोलने के लिए डायल करें 8722227 ( TRACCAR ) l</string>
<string name="error_msg_invalid_url">अवैध यूआरएल त्रुटि संदेश</string>
</resources> </resources>
+19 -10
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Traccar klijent</string> <string name="app_name">Traccar klijent</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Pokreni servis</string>
<string name="shortcut_stop">Zaustavi servis</string>
<string name="shortcut_sos">Pošalji SOS</string>
<string name="channel_default">Primarni kanal</string>
<string name="settings_id_title">Identifikator uređaja</string> <string name="settings_id_title">Identifikator uređaja</string>
<string name="settings_url_title">Adresa poslužitelja</string> <string name="settings_url_title">Adresa poslužitelja</string>
<string name="settings_url_summary">Adresa poslužitelja za praćenje</string> <string name="settings_url_summary">Adresa poslužitelja za praćenje</string>
@@ -16,24 +20,29 @@
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Servis zaustavljen</string> <string name="settings_status_off_summary">Servis zaustavljen</string>
<string name="settings_status_on_summary">Servis pokrenut</string> <string name="settings_status_on_summary">Servis pokrenut</string>
<string name="settings_provider_title">Pružatelj usluge lokacija</string> <string name="settings_buffer">Offline memoriranje</string>
<string name="settings_provider_summary">Izvor podataka o lokaciji</string> <string name="settings_buffer_off_summary">Predmemoriranje isključeno</string>
<string name="settings_provider_gps">GPS pružatelj usluge</string> <string name="settings_buffer_on_summary">Predmemoriranje uključeno</string>
<string name="settings_provider_network">Mrežni pružatelj usluge</string> <string name="settings_wakelock">Gašenje ekrana pri neaktivnosti</string>
<string name="settings_provider_mixed">Mješani pružatelj usluge</string> <string name="settings_wakelock_off_summary">Gasi ekran pri neaktivnosti</string>
<string name="settings_wakelock_on_summary">Ne gasi ekran pri neaktivnosti</string>
<string name="settings_accuracy_title">Točnost lokacije</string>
<string name="settings_accuracy_summary">Željena preciznost lokacije</string>
<string name="settings_accuracy_high">Visoki</string>
<string name="settings_accuracy_medium">Srednji</string>
<string name="settings_accuracy_low">Niski</string>
<string name="settings_foreground_title">Predhodna usluga</string> <string name="settings_foreground_title">Predhodna usluga</string>
<string name="settings_foreground_summary">Povećanje prioriteta usluge</string> <string name="settings_foreground_summary">Povećanje prioriteta usluge</string>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
<string name="menu_about">O nama</string>
<string name="menu_shortcuts">Dodaj prečace</string> <string name="menu_shortcuts">Dodaj prečace</string>
<string name="menu_clear">Očisti</string> <string name="menu_clear">Očisti</string>
<string name="about_description">GPS praćenje u stvarnom vremenu za Android uređaje. Kompatibilno sa Traccar Server i drugim sustavima za praćenje.</string> <string name="status_service_create">Servis pokrenut</string>
<string name="about_license">Ova aplikacija je besplatna i iz otvorenog izvora, izvorni kod je zaštićen Apache Licencom verzija 2.0 i dostupna na GitHub.</string> <string name="status_service_destroy">Servis zaustavljen</string>
<string name="about_web">Za više informacija posjetite www.traccar.org/client</string>
<string name="status_send_success">Slanje uspješno</string> <string name="status_send_success">Slanje uspješno</string>
<string name="status_send_fail">Greška pri slanju</string> <string name="status_send_fail">Greška pri slanju</string>
<string name="status_location_update">Osvežavanje lokacije</string> <string name="status_location_update">Osvežavanje lokacije</string>
<string name="status_connectivity_change">Promjena konekcije</string> <string name="status_network_online">Mrežna dostupnost</string>
<string name="status_network_offline">Mrežna nedostupnost</string>
<string name="hidden_app_name">Podešavanje uređaja</string> <string name="hidden_app_name">Podešavanje uređaja</string>
<string name="hidden_alert">Aplikacija je skrivena. Za ponovno otvaranje molim nazovite 8722227 (TRACCAR).</string> <string name="hidden_alert">Aplikacija je skrivena. Za ponovno otvaranje molim nazovite 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Molimo unesite ispravnu http:// ili https:// adresu</string> <string name="error_msg_invalid_url">Molimo unesite ispravnu http:// ili https:// adresu</string>
+13 -10
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Traccar Kliens</string> <string name="app_name">Traccar Kliens</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Szolgáltatás indítása</string>
<string name="shortcut_stop">Szolgáltatás leállítása</string>
<string name="shortcut_sos">SOS küldése</string>
<string name="channel_default">Elsődleges csatorna</string>
<string name="settings_id_title">Eszközazonosító</string> <string name="settings_id_title">Eszközazonosító</string>
<string name="settings_url_title">Szerver URL</string> <string name="settings_url_title">Szerver URL</string>
<string name="settings_url_summary">Nyomkövető szerver URL</string> <string name="settings_url_summary">Nyomkövető szerver URL</string>
@@ -16,24 +20,23 @@
<string name="settings_status_on">Megállítás</string> <string name="settings_status_on">Megállítás</string>
<string name="settings_status_off_summary">Szolgáltatás megállítva</string> <string name="settings_status_off_summary">Szolgáltatás megállítva</string>
<string name="settings_status_on_summary">Szolgáltatás elindítva</string> <string name="settings_status_on_summary">Szolgáltatás elindítva</string>
<string name="settings_provider_title">Pozíciós szolgáltató</string> <string name="settings_accuracy_title">Pozíció pontossága</string>
<string name="settings_provider_summary">Pozíciós adatok forrása</string> <string name="settings_accuracy_summary">Kívánt pozíció pontosság</string>
<string name="settings_provider_gps">GPS szolgáltató</string> <string name="settings_accuracy_high">Magas</string>
<string name="settings_provider_network">Hálózati szolgáltató</string> <string name="settings_accuracy_medium">Közepes</string>
<string name="settings_provider_mixed">Kevert szolgáltató</string> <string name="settings_accuracy_low">Alacsony</string>
<string name="settings_foreground_title">Előtér szolgáltatás</string> <string name="settings_foreground_title">Előtér szolgáltatás</string>
<string name="settings_foreground_summary">Szolgáltatás prioritásának emelése</string> <string name="settings_foreground_summary">Szolgáltatás prioritásának emelése</string>
<string name="menu_status">Státusz</string> <string name="menu_status">Státusz</string>
<string name="menu_about">Névjegy</string>
<string name="menu_shortcuts">Parancsikon hozzáadása</string> <string name="menu_shortcuts">Parancsikon hozzáadása</string>
<string name="menu_clear">Töröl</string> <string name="menu_clear">Töröl</string>
<string name="about_description">Valós idejű GPS követő Android eszközökre. Kompatibilis többek közt a Traccar Szerverrel és egyéb követő rendszerekkel is.</string> <string name="status_service_create">Szolgáltatás elindítva</string>
<string name="about_license">Ez az applikáció ingyenes és nyílt forrású, forráskódja az Apache License 2.0 licenccel rendelkezik és elérhető a GitHub-on.</string> <string name="status_service_destroy">Szolgáltatás leállítva</string>
<string name="about_web">További információkért látogass el az alábbi weboldalra\nwww.traccar.org/client</string>
<string name="status_send_success">Küldés sikeres</string> <string name="status_send_success">Küldés sikeres</string>
<string name="status_send_fail">Küldés sikertelen</string> <string name="status_send_fail">Küldés sikertelen</string>
<string name="status_location_update">Pozíció frissítés</string> <string name="status_location_update">Pozíció frissítés</string>
<string name="status_connectivity_change">Kapcsolódás módosítása</string> <string name="status_network_online">Hálózat aktív</string>
<string name="status_network_offline">Hálózat nem aktív</string>
<string name="hidden_app_name">Eszköz beállítások</string> <string name="hidden_app_name">Eszköz beállítások</string>
<string name="hidden_alert">Ez az applikáció el lett rejtve. Megnyitásához kérjük hívja a 8722227 (TRACCAR) telefonszámot.</string> <string name="hidden_alert">Ez az applikáció el lett rejtve. Megnyitásához kérjük hívja a 8722227 (TRACCAR) telefonszámot.</string>
<string name="error_msg_invalid_url">Adjon meg egy érvényes URL-t (http:// vagy https://)</string> <string name="error_msg_invalid_url">Adjon meg egy érvényes URL-t (http:// vagy https://)</string>
+13 -10
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Traccar Client</string> <string name="app_name">Traccar Client</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Mulai Layanan</string>
<string name="shortcut_stop">Tutup Layanan</string>
<string name="shortcut_sos">Kirim SOS</string>
<string name="channel_default">Jalur Utama</string>
<string name="settings_id_title">Pengindentifikasi Perangkat</string> <string name="settings_id_title">Pengindentifikasi Perangkat</string>
<string name="settings_url_title">URL Server</string> <string name="settings_url_title">URL Server</string>
<string name="settings_url_summary">URL Server Pelacak</string> <string name="settings_url_summary">URL Server Pelacak</string>
@@ -16,24 +20,23 @@
<string name="settings_status_on">Berhenti</string> <string name="settings_status_on">Berhenti</string>
<string name="settings_status_off_summary">Service Berhenti</string> <string name="settings_status_off_summary">Service Berhenti</string>
<string name="settings_status_on_summary">Service Aktif</string> <string name="settings_status_on_summary">Service Aktif</string>
<string name="settings_provider_title">Lokasi Penyedia Layanan</string> <string name="settings_accuracy_title">Ketepatan Lokasi</string>
<string name="settings_provider_summary">Sumber Lokasi Data</string> <string name="settings_accuracy_summary">Ketepatan Lokasi Yg Dinginkan</string>
<string name="settings_provider_gps">Penyedia Layanan GPS</string> <string name="settings_accuracy_high">Tinggi</string>
<string name="settings_provider_network">Penyedia Layanan Jaringan</string> <string name="settings_accuracy_medium">Tengah</string>
<string name="settings_provider_mixed">Campuran Penyedia Layanan</string> <string name="settings_accuracy_low">Rendah</string>
<string name="settings_foreground_title">Service Depan</string> <string name="settings_foreground_title">Service Depan</string>
<string name="settings_foreground_summary">TIngkatkan Prioritas Service</string> <string name="settings_foreground_summary">TIngkatkan Prioritas Service</string>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
<string name="menu_about">Tentang</string>
<string name="menu_shortcuts">Tambah Jalan Pintas</string> <string name="menu_shortcuts">Tambah Jalan Pintas</string>
<string name="menu_clear">Bersihkan</string> <string name="menu_clear">Bersihkan</string>
<string name="about_description">Aplikasi GPS Untuk Perangkat Android. Kompatibel Dengan Traccar Server Dan Sistem GPS Lainnya.</string> <string name="status_service_create">Layanan Dimulai</string>
<string name="about_license">Aplikasi Ini Gratis Dan Terbuka, Sumber Kode Berlisensi Dibawah Apache License 2.0 Dan Tersedia di GitHub.</string> <string name="status_service_destroy">Layanan Berhenti</string>
<string name="about_web">Untuk Informasi Lebih Lanjut Kunjungi www.traccar.org/client</string>
<string name="status_send_success">Sukses Terkirim</string> <string name="status_send_success">Sukses Terkirim</string>
<string name="status_send_fail">Gagal Terkirim</string> <string name="status_send_fail">Gagal Terkirim</string>
<string name="status_location_update">Lokasi Terbaru</string> <string name="status_location_update">Lokasi Terbaru</string>
<string name="status_connectivity_change">Koneksi Berubah</string> <string name="status_network_online">Jaringan Hidup</string>
<string name="status_network_offline">Jaringan Mati</string>
<string name="hidden_app_name">Pengaturan Perangkat</string> <string name="hidden_app_name">Pengaturan Perangkat</string>
<string name="hidden_alert">Aplikasi Telah Tersembunyi. Untuk Membuka Lagi Silahkan Tekan 8722227 (TRACCAR).</string> <string name="hidden_alert">Aplikasi Telah Tersembunyi. Untuk Membuka Lagi Silahkan Tekan 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Tolong Masukan http:// atau https:// URL Yang Benar</string> <string name="error_msg_invalid_url">Tolong Masukan http:// atau https:// URL Yang Benar</string>
+13 -10
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Traccar Client</string> <string name="app_name">Traccar Client</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Avvia servizio</string>
<string name="shortcut_stop">Ferma servizio</string>
<string name="shortcut_sos">Invia SOS</string>
<string name="channel_default">Canale primario</string>
<string name="settings_id_title">Identificativo dispositivo</string> <string name="settings_id_title">Identificativo dispositivo</string>
<string name="settings_url_title">Server URL</string> <string name="settings_url_title">Server URL</string>
<string name="settings_url_summary">Tracking server URL</string> <string name="settings_url_summary">Tracking server URL</string>
@@ -16,24 +20,23 @@
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Servizio arrestato</string> <string name="settings_status_off_summary">Servizio arrestato</string>
<string name="settings_status_on_summary">Servizio avviato</string> <string name="settings_status_on_summary">Servizio avviato</string>
<string name="settings_provider_title">Provider posizione</string> <string name="settings_accuracy_title">Accuratezza posizione</string>
<string name="settings_provider_summary">Fonte dei dati di localizzazione</string> <string name="settings_accuracy_summary">Precisione desiderata per la posizione</string>
<string name="settings_provider_gps">Provider GPS</string> <string name="settings_accuracy_high">Alta</string>
<string name="settings_provider_network">Provider di rete</string> <string name="settings_accuracy_medium">Media</string>
<string name="settings_provider_mixed">Provider misto</string> <string name="settings_accuracy_low">Bassa</string>
<string name="settings_foreground_title">Servizio in primo piano</string> <string name="settings_foreground_title">Servizio in primo piano</string>
<string name="settings_foreground_summary">Aumenta la priorità del servizio</string> <string name="settings_foreground_summary">Aumenta la priorità del servizio</string>
<string name="menu_status">Stato</string> <string name="menu_status">Stato</string>
<string name="menu_about">Informazioni</string>
<string name="menu_shortcuts">Aggiungi combinazione rapida</string> <string name="menu_shortcuts">Aggiungi combinazione rapida</string>
<string name="menu_clear">Pulisci</string> <string name="menu_clear">Pulisci</string>
<string name="about_description">Real time GPS tracker per dispositivi Android. Compatibile con Traccar Server e altri sistemi di tracking.</string> <string name="status_service_create">Servizio avviato</string>
<string name="about_license">Questa applicazione è libera e open source, il codice sorgente è sotto licenza Apache License Version 2.0 e disponibile su GitHub.</string> <string name="status_service_destroy">Servizio fermato</string>
<string name="about_web">Per maggiori informazioni visitate \nwww.traccar.org/client</string>
<string name="status_send_success">Invio riuscito</string> <string name="status_send_success">Invio riuscito</string>
<string name="status_send_fail">Invio fallito</string> <string name="status_send_fail">Invio fallito</string>
<string name="status_location_update">Aggiornamento posizione</string> <string name="status_location_update">Aggiornamento posizione</string>
<string name="status_connectivity_change">Connessione cambiata</string> <string name="status_network_online">Network online</string>
<string name="status_network_offline">Network offline</string>
<string name="hidden_app_name">Impostazioni dispositivo</string> <string name="hidden_app_name">Impostazioni dispositivo</string>
<string name="hidden_alert">La app è stata nascosta. Per aprirla nuovamente digita 8722227 (TRACCAR).</string> <string name="hidden_alert">La app è stata nascosta. Per aprirla nuovamente digita 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Per favore inserisci un URL valido http:// o https://</string> <string name="error_msg_invalid_url">Per favore inserisci un URL valido http:// o https://</string>
+43
Просмотреть файл
@@ -0,0 +1,43 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="app_name"> Traccar לאנדרויד</string>
<string name="app_logo">Traccar</string>
<string name="shortcut_start">הפעל שירות </string>
<string name="shortcut_stop">עצור תהליך</string>
<string name="shortcut_sos">שלח הודעת חירום</string>
<string name="channel_default">ערוץ ראשי</string>
<string name="settings_id_title">מזהה מכשיר</string>
<string name="settings_url_title">כתובת שרת</string>
<string name="settings_url_summary">כתובת שרת איתור</string>
<string name="settings_interval_title">תדירות</string>
<string name="settings_interval_summary">זמן דיווח בשניות </string>
<string name="settings_distance_title">מרחק</string>
<string name="settings_distance_summary">דיווח מרחק במטרים</string>
<string name="settings_angle_title">זווית</string>
<string name="settings_angle_summary">דיווח פניות בזווית </string>
<string name="settings_status_title">מצב שירות</string>
<string name="settings_status_off">הפעל</string>
<string name="settings_status_on">עצור</string>
<string name="settings_status_off_summary">השירות הופסק</string>
<string name="settings_status_on_summary">השירות פועל</string>
<string name="settings_accuracy_title">דיוק מיקום</string>
<string name="settings_accuracy_summary">דיוק מיקום מבוקש</string>
<string name="settings_accuracy_high">מדוייק </string>
<string name="settings_accuracy_medium">בינוני</string>
<string name="settings_accuracy_low">נמוך - משתמש רק בGPS של המכשיר </string>
<string name="settings_foreground_title">אפשר הפעלה ברקע</string>
<string name="settings_foreground_summary">הגדל את עדיפות התוכנה</string>
<string name="menu_status">סטטוס</string>
<string name="menu_shortcuts">הוסף קיצור דרך</string>
<string name="menu_clear">נקה</string>
<string name="status_service_create">אפליקציה הופעלה</string>
<string name="status_service_destroy">אפליקציה הופסקה</string>
<string name="status_send_success">נשלח בהצלחה</string>
<string name="status_send_fail">שליחה נכשלה</string>
<string name="status_location_update">עדכון מיקום</string>
<string name="status_network_online">רשת באונליין </string>
<string name="status_network_offline">רשת מנותקת</string>
<string name="hidden_app_name">הגדרות המכשיר</string>
<string name="hidden_alert">האפליקציה הוסתרה. כדי לפתוח אותה שוב חייג בטלפון 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">הזן כתובת חוקית http:// או https:// URL</string>
</resources>
+20 -14
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Traccar クライアント</string> <string name="app_name">Traccar クライアント</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">サービスを開始</string>
<string name="shortcut_stop">サービスを停止</string>
<string name="shortcut_sos">SOSを送信</string>
<string name="channel_default">プライマリーチャンネル</string>
<string name="settings_id_title">デバイス ID</string> <string name="settings_id_title">デバイス ID</string>
<string name="settings_url_title">サーバー URL</string> <string name="settings_url_title">サーバー URL</string>
<string name="settings_url_summary">トラッキングサーバーの URL</string> <string name="settings_url_summary">トラッキングサーバーの URL</string>
@@ -14,27 +18,29 @@
<string name="settings_status_title">サービスステータス</string> <string name="settings_status_title">サービスステータス</string>
<string name="settings_status_off">開始</string> <string name="settings_status_off">開始</string>
<string name="settings_status_on">停止</string> <string name="settings_status_on">停止</string>
<string name="settings_status_off_summary">サービス停止しました</string> <string name="settings_status_off_summary">サービス停止</string>
<string name="settings_status_on_summary">サービス実行中</string> <string name="settings_status_on_summary">サービス実行中</string>
<string name="settings_provider_title">位置プロバイダー</string> <string name="settings_buffer">オフラインバッファリング</string>
<string name="settings_provider_summary">位置データのソース</string> <string name="settings_buffer_off_summary">バッファリング オフ</string>
<string name="settings_provider_gps">GPS プロバイダー</string> <string name="settings_buffer_on_summary">バッファリング オン</string>
<string name="settings_provider_network">ネットワークプロバイダー</string> <string name="settings_accuracy_title">位置情報の精度</string>
<string name="settings_provider_mixed">混合プロバイダー</string> <string name="settings_accuracy_summary">要求される位置情報の精度</string>
<string name="settings_accuracy_high"></string>
<string name="settings_accuracy_medium"></string>
<string name="settings_accuracy_low"></string>
<string name="settings_foreground_title">フォアグラウンドサービス</string> <string name="settings_foreground_title">フォアグラウンドサービス</string>
<string name="settings_foreground_summary">サービス優先度を上げる</string> <string name="settings_foreground_summary">サービス優先度を上げる</string>
<string name="menu_status">ステータス</string> <string name="menu_status">ステータス</string>
<string name="menu_about">アプリについて</string>
<string name="menu_shortcuts">ショートカットを追加</string> <string name="menu_shortcuts">ショートカットを追加</string>
<string name="menu_clear">クリア</string> <string name="menu_clear">クリア</string>
<string name="about_description">Android デバイス用のリアルタイム GPS トラッカー。 Traccar サーバーや他のトラッキングシステムと互換性があります。</string> <string name="status_service_create">サービスを開始しました</string>
<string name="about_license">このアプリケーションは無料のオープンソースで、ソースコードは Apache ライセンス バージョン 2.0 でライセンスされます。 GitHub で利用可能です。</string> <string name="status_service_destroy">サービスを停止しました</string>
<string name="about_web">詳細は visit\nwww.traccar.org/client</string>
<string name="status_send_success">送信に成功しました</string> <string name="status_send_success">送信に成功しました</string>
<string name="status_send_fail">送信に失敗しました</string> <string name="status_send_fail">送信に失敗しました</string>
<string name="status_location_update">位置更新</string> <string name="status_location_update">位置情報更新</string>
<string name="status_connectivity_change">接続の変更</string> <string name="status_network_online">ネットワーク オンライン</string>
<string name="status_network_offline">ネットワーク オフライン</string>
<string name="hidden_app_name">デバイス設定</string> <string name="hidden_app_name">デバイス設定</string>
<string name="hidden_alert">アプリは非表示になりました。 もう一度開くには 8722227 (TRACCAR) にダイヤルしてください。</string> <string name="hidden_alert">アプリは非表示になりました。 もう一度開くには 8722227 (TRACCAR) にダイヤルしてください。</string>
<string name="error_msg_invalid_url">正しい http:// または https:// URL を入力してください</string> <string name="error_msg_invalid_url">http:// または https:// から始まるURL を正しく入力してください</string>
</resources> </resources>
-10
Просмотреть файл
@@ -9,24 +9,14 @@
<string name="settings_status_on">បញ្ឈប់</string> <string name="settings_status_on">បញ្ឈប់</string>
<string name="settings_status_off_summary">សេវាឈប់</string> <string name="settings_status_off_summary">សេវាឈប់</string>
<string name="settings_status_on_summary">កំពុងរត់សេវា</string> <string name="settings_status_on_summary">កំពុងរត់សេវា</string>
<string name="settings_provider_title">ក្រុមហ៊ុនផ្ដល់ទីតាំង</string>
<string name="settings_provider_summary">ប្រភពនៃទិន្នន័យទីតាំង</string>
<string name="settings_provider_gps">អ្នកផ្តល់សេវាប្រព័ន្ធ GPS</string>
<string name="settings_provider_network">អ្នកផ្តល់សេវាបណ្តាញ</string>
<string name="settings_provider_mixed">ក្រុមហ៊ុនផ្ដល់សេវាជាមួយគ្នា</string>
<string name="settings_foreground_title">សេវាផ្ទៃខាងមុខ</string> <string name="settings_foreground_title">សេវាផ្ទៃខាងមុខ</string>
<string name="settings_foreground_summary">បង្កើនអាទិភាពសេវា</string> <string name="settings_foreground_summary">បង្កើនអាទិភាពសេវា</string>
<string name="menu_status">ស្ថានភាព</string> <string name="menu_status">ស្ថានភាព</string>
<string name="menu_about">អំពី</string>
<string name="menu_shortcuts">បន្ថែមផ្លូវកាត់</string> <string name="menu_shortcuts">បន្ថែមផ្លូវកាត់</string>
<string name="menu_clear">ដើម្បីជម្រះ</string> <string name="menu_clear">ដើម្បីជម្រះ</string>
<string name="about_description">កម្មវិធីតាមដាន GPS ពេលវេលាពិតប្រាកដសម្រាប់ឧបករណ៍ប្រព័ន្ធប្រតិបត្តិការ Android ។ ឆបគ្នាជាមួយនឹងម៉ាស៊ីនបម្រើនិងប្រព័ន្ធតាមដានតាមដានផ្សេងទៀត</string>
<string name="about_license">កម្មវិធីនេះត្រូវបានបើកចំហនិងឥតគិតថ្លៃ, កូដប្រភពត្រូវបានទទួលបានអាជ្ញាប័ណ្ណក្រោមអាជ្ញាប័ណ្ណ Apache កំណែ 2.0 និងអាចប្រើបាននៅលើ GitHub ។</string>
<string name="about_web">ចំពោះ​​​​​​​​​ព័ត៌មានបន្ថែម\nwww.traccar.org/client</string>
<string name="status_send_success">ផ្ញើដោយជោគជ័យ</string> <string name="status_send_success">ផ្ញើដោយជោគជ័យ</string>
<string name="status_send_fail">ការផ្ញើបានបរាជ័យ</string> <string name="status_send_fail">ការផ្ញើបានបរាជ័យ</string>
<string name="status_location_update">ធ្វើឱ្យទាន់សម័យទីតាំង</string> <string name="status_location_update">ធ្វើឱ្យទាន់សម័យទីតាំង</string>
<string name="status_connectivity_change">ការផ្លាស់ប្តូរការតភ្ជាប់</string>
<string name="hidden_app_name">ការកំណត់ឧបករណ៍</string> <string name="hidden_app_name">ការកំណត់ឧបករណ៍</string>
<string name="hidden_alert">កម្មវិធីនេះត្រូវបានលាក់។ ដើម្បីបើកវាម្តងទៀតសូមចុច 8722227 (TRACCAR) ។</string> <string name="hidden_alert">កម្មវិធីនេះត្រូវបានលាក់។ ដើម្បីបើកវាម្តងទៀតសូមចុច 8722227 (TRACCAR) ។</string>
</resources> </resources>
+26 -15
Просмотреть файл
@@ -1,32 +1,43 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<resources> <resources>
<string name="app_name">Traccar 고객</string> <string name="app_name">Traccar 클라이언트</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">서비스 시작</string>
<string name="shortcut_stop">서비스 중지</string>
<string name="shortcut_sos">SOS 신호 보내기</string>
<string name="channel_default">기본 채널</string>
<string name="settings_id_title">장치 식별자</string> <string name="settings_id_title">장치 식별자</string>
<string name="settings_url_title">서버 URL</string>
<string name="settings_url_summary">위치 수집 서버 URL</string>
<string name="settings_interval_title">주기</string> <string name="settings_interval_title">주기</string>
<string name="settings_interval_summary">위치 수집 주기 (초)</string>
<string name="settings_distance_title">거리</string>
<string name="settings_distance_summary">최소 위치 수집 기준 거리 (m)</string>
<string name="settings_angle_title">각도</string>
<string name="settings_angle_summary">최소 위치 수집 기준 회전 각도</string>
<string name="settings_status_title">서비스상태</string> <string name="settings_status_title">서비스상태</string>
<string name="settings_status_off">시작</string> <string name="settings_status_off">시작</string>
<string name="settings_status_on">중지</string> <string name="settings_status_on">중지</string>
<string name="settings_status_off_summary">서비스중지</string> <string name="settings_status_off_summary">서비스중지</string>
<string name="settings_status_on_summary">서비스실행</string> <string name="settings_status_on_summary">서비스실행</string>
<string name="settings_provider_title">위치공급자</string> <string name="settings_accuracy_title">위치 정확도</string>
<string name="settings_provider_summary">위치데이타 출처</string> <string name="settings_accuracy_summary">위치 수신 정확도</string>
<string name="settings_provider_gps">GPS공급자</string> <string name="settings_accuracy_high">높음</string>
<string name="settings_provider_network">네트워크공급자</string> <string name="settings_accuracy_medium">중간</string>
<string name="settings_provider_mixed">혼합공급자</string> <string name="settings_accuracy_low">낮음</string>
<string name="settings_foreground_title">선처리 서비스</string> <string name="settings_foreground_title">선처리 서비스</string>
<string name="settings_foreground_summary">서비스우선순위증가</string> <string name="settings_foreground_summary">서비스우선순위증가</string>
<string name="menu_status">상태</string> <string name="menu_status">상태</string>
<string name="menu_about">관하여</string>
<string name="menu_shortcuts">바로가기 추가</string> <string name="menu_shortcuts">바로가기 추가</string>
<string name="menu_clear">초기화</string> <string name="menu_clear">지우기</string>
<string name="about_description">안드로이드 장치를위한 실시간 GPS 추적기. Traccar 서버 및 기타 추적 시스템과 호환됩니다.</string> <string name="status_service_create">서비스 시작됨</string>
<string name="about_license">이 응용 프로그램은 무료이며 오픈 소스이며, 소스 코드는 Apache License Version 2.0에서 사용이 허가되며 GitHub에서 사용할 수 있습니다.</string> <string name="status_service_destroy">서비스 중지됨</string>
<string name="about_web">더 자세한 정보는 \www.traccar.org/client 를 방문하십시오.</string> <string name="status_send_success">위치 송신 성공</string>
<string name="status_send_success">보내기 성공</string> <string name="status_send_fail">위치 송신 실패</string>
<string name="status_send_fail">보내기 실패</string> <string name="status_location_update">위치 업데이트됨</string>
<string name="status_location_update">위치 수정</string> <string name="status_network_online">네트워크 연결됨</string>
<string name="status_connectivity_change">연결 변경</string> <string name="status_network_offline">네트워크 연결 불가</string>
<string name="hidden_app_name">장치설정</string> <string name="hidden_app_name">장치설정</string>
<string name="hidden_alert">앱이 숨겨져 있습니다. 다시 열려면 8722227 (TRACCAR)로 전화하십시오.</string> <string name="hidden_alert">앱이 숨겨져 있습니다. 다시 열려면 8722227 (TRACCAR)로 전화하십시오.</string>
<string name="error_msg_invalid_url">올바른 http:// 또는 https:// 형태의 URL 주소를 넣어주세요</string>
</resources> </resources>
-10
Просмотреть файл
@@ -9,23 +9,13 @@
<string name="settings_status_on">ຢຸດໃຊ້ງານ</string> <string name="settings_status_on">ຢຸດໃຊ້ງານ</string>
<string name="settings_status_off_summary">ການໃຊ້ງານໄດ້ຢຸດລົງ</string> <string name="settings_status_off_summary">ການໃຊ້ງານໄດ້ຢຸດລົງ</string>
<string name="settings_status_on_summary">ການໃຊ້ງານກຳລັງທຳງານຢູ່</string> <string name="settings_status_on_summary">ການໃຊ້ງານກຳລັງທຳງານຢູ່</string>
<string name="settings_provider_title">ຜູ້ໃຫ້ບໍລິການຈຸດພິກັດ</string>
<string name="settings_provider_summary">ແຫລ່ງຂອງຂໍ້ມູນພິກັດ</string>
<string name="settings_provider_gps">ຜູ້ໃຫ້ບໍລິການ GPS</string>
<string name="settings_provider_network">ຜູ້ໃຫ້ບໍລິການເຄື່ອຄ່າຍ</string>
<string name="settings_provider_mixed">ຜູ້ໃຫ້ບໍລິການແບບຮ່ວມກັນ</string>
<string name="settings_foreground_title">ເຊີວິດໂຟກຣາວດ໌</string> <string name="settings_foreground_title">ເຊີວິດໂຟກຣາວດ໌</string>
<string name="settings_foreground_summary">ເພີ່ມເຊີວິດໄພອໍຣິດຕີ້</string> <string name="settings_foreground_summary">ເພີ່ມເຊີວິດໄພອໍຣິດຕີ້</string>
<string name="menu_status">ສະຖານະ</string> <string name="menu_status">ສະຖານະ</string>
<string name="menu_about">ກ່ຽວກັບ</string>
<string name="menu_shortcuts">ເພີ່ມຊອດຄັດ</string> <string name="menu_shortcuts">ເພີ່ມຊອດຄັດ</string>
<string name="menu_clear">ລົບລ້າງ</string> <string name="menu_clear">ລົບລ້າງ</string>
<string name="about_description">ລາວຈີພີເອສຄາຣ໌ສຳລັບແອນດຣອຍ. ສາມາດໃຊ້ໄດ້ກັບລາວຈີພີເອສຄາຣ໌ເຊີເວີ້.</string>
<string name="about_license">ແອັບໂຕນີ້ສາມາດດາວໂຫລດໃຊ້ໄດ້ຟຣີໂດຍບໍ່ມີຄ່າໃຊ້ຈ່າຍຫຍັງ.</string>
<string name="about_web">ຂໍ້ມູນເພີ່ມເຕີມໄດ້ທີ່\nwww.traccar.org/client</string>
<string name="status_send_fail">ມີຂໍ້ຜິດພາດໃນການສົ່ງຂໍ້ມູນ</string> <string name="status_send_fail">ມີຂໍ້ຜິດພາດໃນການສົ່ງຂໍ້ມູນ</string>
<string name="status_location_update">ສະຖານທີ່ພິກັດໄດ້ອັບເດດ</string> <string name="status_location_update">ສະຖານທີ່ພິກັດໄດ້ອັບເດດ</string>
<string name="status_connectivity_change">ການເຊື່ອມຕໍ່ມີການປ່ຽນແປງ</string>
<string name="hidden_app_name">ການຕັ້ງຄ່າອຸປະກອນ</string> <string name="hidden_app_name">ການຕັ້ງຄ່າອຸປະກອນ</string>
<string name="hidden_alert">ແອັບໂຕນີ້ໄດ້ຖືກເຊື່ອງໄວ້. ຖ້າຢາກເປີດຂຶ້ນມາອີກຄັ້ງກະລຸນາກົດໝາຍເລກ 8722227 (TRACCAR).</string> <string name="hidden_alert">ແອັບໂຕນີ້ໄດ້ຖືກເຊື່ອງໄວ້. ຖ້າຢາກເປີດຂຶ້ນມາອີກຄັ້ງກະລຸນາກົດໝາຍເລກ 8722227 (TRACCAR).</string>
</resources> </resources>
+22 -10
Просмотреть файл
@@ -2,30 +2,42 @@
<resources> <resources>
<string name="app_name">Traccar programėlė</string> <string name="app_name">Traccar programėlė</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Įjungti servisą</string>
<string name="shortcut_stop">Sustabdyti servisą</string>
<string name="shortcut_sos">Siųsti SOS</string>
<string name="channel_default">Pirminis kanalas</string>
<string name="settings_id_title">Įrenginio numeris</string> <string name="settings_id_title">Įrenginio numeris</string>
<string name="settings_url_title">Serverio URL</string>
<string name="settings_url_summary">Sekimo serverio URL</string>
<string name="settings_interval_title">Dažnumas</string> <string name="settings_interval_title">Dažnumas</string>
<string name="settings_interval_summary">Atnaujinimo intervalas sekundėmis</string>
<string name="settings_distance_title">Atstumas</string>
<string name="settings_distance_summary">Atnaujinimo atstumas metrais</string>
<string name="settings_angle_title">Kampas</string>
<string name="settings_angle_summary">Atnaujinimo kampas laipsniais</string>
<string name="settings_status_title">Tarnybos būklė</string> <string name="settings_status_title">Tarnybos būklė</string>
<string name="settings_status_off">Pradėti</string> <string name="settings_status_off">Pradėti</string>
<string name="settings_status_on">Stabdyti</string> <string name="settings_status_on">Stabdyti</string>
<string name="settings_status_off_summary">Tarnyba sustabdyta</string> <string name="settings_status_off_summary">Tarnyba sustabdyta</string>
<string name="settings_status_on_summary">Tarnyba veikia</string> <string name="settings_status_on_summary">Tarnyba veikia</string>
<string name="settings_provider_title">Vietos nustatymas</string> <string name="settings_accuracy_title">Pozicijos tikslumas</string>
<string name="settings_provider_summary">Vietos nustatymo šaltinis</string> <string name="settings_accuracy_summary">Norimas pozicijos tikslumas</string>
<string name="settings_provider_gps">Įrenginio GPS</string> <string name="settings_accuracy_high">Aukštas</string>
<string name="settings_provider_network">GSM tinklas</string> <string name="settings_accuracy_medium">Vidutinis</string>
<string name="settings_provider_mixed">Mišrus: GSM ir GPS</string> <string name="settings_accuracy_low">Žemas</string>
<string name="settings_foreground_title">Žeminti tarnybos prioritetą</string> <string name="settings_foreground_title">Žeminti tarnybos prioritetą</string>
<string name="settings_foreground_summary">Padidinti tarnybos prioritetą</string> <string name="settings_foreground_summary">Padidinti tarnybos prioritetą</string>
<string name="menu_status">Būklė</string> <string name="menu_status">Būklė</string>
<string name="menu_about">Apie</string>
<string name="menu_shortcuts">Pridėti nuorodas</string> <string name="menu_shortcuts">Pridėti nuorodas</string>
<string name="menu_clear">Valyti</string> <string name="menu_clear">Valyti</string>
<string name="about_description">GPS sekimo programėlė Android įrenginiams. Suderinta su Traccar Serveriu ir kitomis vietos nustatymo tarnybomis.</string> <string name="status_service_create">Servisas pradėtas</string>
<string name="about_license">Ši programėlė yra nemokama ir atviro kodo. Autorinės teisės yra saugomos pagal Apache Licence Version 2.0 reglamentą (pasiekiama GitHub)</string> <string name="status_service_destroy">Servisas sustabdytas</string>
<string name="about_web">Daugiau informacijos adresu visit\nwww.traccar.org\client</string> <string name="status_send_success">Išsiųsta sėkmingai</string>
<string name="status_send_fail">Klaida siunčiant</string> <string name="status_send_fail">Klaida siunčiant</string>
<string name="status_location_update">Vietos nusatymo duomenų atnaujinimas</string> <string name="status_location_update">Vietos nusatymo duomenų atnaujinimas</string>
<string name="status_connectivity_change">Prisijungimo duomenų pasikeitimas</string> <string name="status_network_online">Prisijungęs prie tinklo</string>
<string name="status_network_offline">Atsijungęs nuo tinklo</string>
<string name="hidden_app_name">Įrenginio nustatymai</string> <string name="hidden_app_name">Įrenginio nustatymai</string>
<string name="hidden_alert">Ši programėlė veikia paslėptu režimu. Norint ją atidaryti, prašau skambinti numeriu 8722227 (TRACCAR)</string> <string name="hidden_alert">Ši programėlė veikia paslėptu režimu. Norint ją atidaryti, prašau skambinti numeriu 8722227 (TRACCAR)</string>
<string name="error_msg_invalid_url">Įveskite tinkamą http:// ar https:// URL</string>
</resources> </resources>
+19 -10
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Traccar klients</string> <string name="app_name">Traccar klients</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Sākt servisu</string>
<string name="shortcut_stop">Apstādināt servisu</string>
<string name="shortcut_sos">Sūtīt SOS</string>
<string name="channel_default">Primārais kanāls</string>
<string name="settings_id_title">Ierīces identifikators</string> <string name="settings_id_title">Ierīces identifikators</string>
<string name="settings_url_title">Servera URL</string> <string name="settings_url_title">Servera URL</string>
<string name="settings_url_summary">Traccar servera URL</string> <string name="settings_url_summary">Traccar servera URL</string>
@@ -16,24 +20,29 @@
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Serviss apturēts</string> <string name="settings_status_off_summary">Serviss apturēts</string>
<string name="settings_status_on_summary">Serviss darbojas</string> <string name="settings_status_on_summary">Serviss darbojas</string>
<string name="settings_provider_title">Vietas provaiders</string> <string name="settings_buffer">Bezsaistes buferizācija</string>
<string name="settings_provider_summary">Datu atrašanās vietas avots</string> <string name="settings_buffer_off_summary">Buferizācija izslēgta</string>
<string name="settings_provider_gps">GPS provaiders</string> <string name="settings_buffer_on_summary">Buferizācija ieslēgta</string>
<string name="settings_provider_network">Tīkla provaiders</string> <string name="settings_wakelock">Pretaizmigšanas funkcija</string>
<string name="settings_provider_mixed">Miksets provaiders</string> <string name="settings_wakelock_off_summary">Pretaizmigšanas funkcija izslēgta</string>
<string name="settings_wakelock_on_summary">Pretaizmigšanas funkcija ieslēgta</string>
<string name="settings_accuracy_title">Vietas precizitāte</string>
<string name="settings_accuracy_summary">Vēlamās vietas precizitāte</string>
<string name="settings_accuracy_high">Augsta</string>
<string name="settings_accuracy_medium">Vidēja</string>
<string name="settings_accuracy_low">Zema</string>
<string name="settings_foreground_title">Zināšanu servis</string> <string name="settings_foreground_title">Zināšanu servis</string>
<string name="settings_foreground_summary">Paaugstināt servisa prioritāti</string> <string name="settings_foreground_summary">Paaugstināt servisa prioritāti</string>
<string name="menu_status">Statuss</string> <string name="menu_status">Statuss</string>
<string name="menu_about">Par</string>
<string name="menu_shortcuts">Pievienot saīsnes</string> <string name="menu_shortcuts">Pievienot saīsnes</string>
<string name="menu_clear">Notīrīt</string> <string name="menu_clear">Notīrīt</string>
<string name="about_description">Reāllaika GPS sekošanas ierīce Android ierīcēm. Savietojams ar Traccar Server un citām izsekošanas sistēmām.</string> <string name="status_service_create">Serviss uzsākts</string>
<string name="about_license">Šī lietotne ir bezmaksas un atvērtā koda, avota kods ir licencēts Apache Licence 2.0 versijā un ir pieejams GitHub.</string> <string name="status_service_destroy">Serviss apstādināts</string>
<string name="about_web">Lai iegūtu papildinformāciju, apmeklējiet vietni\nwww.traccar.org/client</string>
<string name="status_send_success">Sūtīšana veiksmīga</string> <string name="status_send_success">Sūtīšana veiksmīga</string>
<string name="status_send_fail">Nosūtīt neizdevās</string> <string name="status_send_fail">Nosūtīt neizdevās</string>
<string name="status_location_update">Lokacijas atjaunināšana</string> <string name="status_location_update">Lokacijas atjaunināšana</string>
<string name="status_connectivity_change">Savienojuma maiņa</string> <string name="status_network_online">Tīkls tiešsaitē</string>
<string name="status_network_offline">Tīkls bezsaitē</string>
<string name="hidden_app_name">Ierīces iestatījumi</string> <string name="hidden_app_name">Ierīces iestatījumi</string>
<string name="hidden_alert">Lietotne ir paslēpta. Zvaniet 8722227 (TRACCAR), lai to atkal parādītu.</string> <string name="hidden_alert">Lietotne ir paslēpta. Zvaniet 8722227 (TRACCAR), lai to atkal parādītu.</string>
<string name="error_msg_invalid_url">Lūdzu ievadiet derīgu http:// vai https:// URL</string> <string name="error_msg_invalid_url">Lūdzu ievadiet derīgu http:// vai https:// URL</string>
+16 -10
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Traccar Klient</string> <string name="app_name">Traccar Klient</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Start tjeneste</string>
<string name="shortcut_stop">Stopp tjeneste</string>
<string name="shortcut_sos">Send SOS</string>
<string name="channel_default">Primer Kanal</string>
<string name="settings_id_title">Enhetsidentifikasjon</string> <string name="settings_id_title">Enhetsidentifikasjon</string>
<string name="settings_url_title">Tjener-nettadresse</string> <string name="settings_url_title">Tjener-nettadresse</string>
<string name="settings_url_summary">Sproringstjener-nettadresse</string> <string name="settings_url_summary">Sproringstjener-nettadresse</string>
@@ -16,24 +20,26 @@
<string name="settings_status_on">Stopp</string> <string name="settings_status_on">Stopp</string>
<string name="settings_status_off_summary">Tjenesten stoppet</string> <string name="settings_status_off_summary">Tjenesten stoppet</string>
<string name="settings_status_on_summary">Tjenesten kjører</string> <string name="settings_status_on_summary">Tjenesten kjører</string>
<string name="settings_provider_title">Lokaliseringsleverandør</string> <string name="settings_buffer">Frakoblet mellomlagring</string>
<string name="settings_provider_summary">Kilde for lokaliseringsdata</string> <string name="settings_buffer_off_summary">Mellomlagring deaktivert</string>
<string name="settings_provider_gps">GPS-lokalisering</string> <string name="settings_buffer_on_summary">Mellomlagring</string>
<string name="settings_provider_network">Nettverkslokalisering</string> <string name="settings_accuracy_title">Posisjonsnøyaktighet</string>
<string name="settings_provider_mixed">Blandet lokalisering</string> <string name="settings_accuracy_summary">Ønsket plasseringsnøyaktighet</string>
<string name="settings_accuracy_high">Høy</string>
<string name="settings_accuracy_medium">Medium</string>
<string name="settings_accuracy_low">Lav</string>
<string name="settings_foreground_title">Forgrunnen tjeneste</string> <string name="settings_foreground_title">Forgrunnen tjeneste</string>
<string name="settings_foreground_summary">Øk tjeneste-prioritet</string> <string name="settings_foreground_summary">Øk tjeneste-prioritet</string>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
<string name="menu_about">Om</string>
<string name="menu_shortcuts">Legg til snarvei</string> <string name="menu_shortcuts">Legg til snarvei</string>
<string name="menu_clear">Tøm</string> <string name="menu_clear">Tøm</string>
<string name="about_description">Sanntids GPS-sporing for Android-enheter. Kompatibel med Traccar Server og andre sporingssystemer.</string> <string name="status_service_create">Tjeneste startet</string>
<string name="about_license">Dette programmet har fri og åpen kildekode; kildekoden er lisensiert under Apache License Version 2.0 og er tilgjengelig på GitHub.</string> <string name="status_service_destroy">Tjeneste stoppet</string>
<string name="about_web">For mer informasjon besøk\nwww.traccar.org/client</string>
<string name="status_send_success">Sending vellykket</string> <string name="status_send_success">Sending vellykket</string>
<string name="status_send_fail">Sending mislyktes</string> <string name="status_send_fail">Sending mislyktes</string>
<string name="status_location_update">Plassering oppdatert</string> <string name="status_location_update">Plassering oppdatert</string>
<string name="status_connectivity_change">Tilkobling forandret</string> <string name="status_network_online">Nettverk Online</string>
<string name="status_network_offline">Nettverk Offline</string>
<string name="hidden_app_name">Enhetsinnstillinger</string> <string name="hidden_app_name">Enhetsinnstillinger</string>
<string name="hidden_alert">App\'en har blitt gjemt. For å åpne igjen, vennligst tast (ring) 8722227 (TRACCAR).</string> <string name="hidden_alert">App\'en har blitt gjemt. For å åpne igjen, vennligst tast (ring) 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Vennligst skriv korrekt nettadresse som http:// eller https://</string> <string name="error_msg_invalid_url">Vennligst skriv korrekt nettadresse som http:// eller https://</string>
+9
Просмотреть файл
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primary">#2E7D32</color>
<color name="primary_dark">#1B5E20</color>
<color name="accent">#81C784</color>
<color name="light">#FAFAFA</color>
</resources>
+18 -10
Просмотреть файл
@@ -2,6 +2,9 @@
<resources> <resources>
<string name="app_name">Traccar client</string> <string name="app_name">Traccar client</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Start service</string>
<string name="shortcut_stop">Stop service</string>
<string name="shortcut_sos">Stuur SOS</string>
<string name="channel_default">Standaard kanaal</string> <string name="channel_default">Standaard kanaal</string>
<string name="settings_id_title">Toestelidentificatie</string> <string name="settings_id_title">Toestelidentificatie</string>
<string name="settings_url_title">Server URL</string> <string name="settings_url_title">Server URL</string>
@@ -17,24 +20,29 @@
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Service gestopt</string> <string name="settings_status_off_summary">Service gestopt</string>
<string name="settings_status_on_summary">Service draait</string> <string name="settings_status_on_summary">Service draait</string>
<string name="settings_provider_title">Locatie provider</string> <string name="settings_buffer">Offline bufferen</string>
<string name="settings_provider_summary">Bron van locatie data</string> <string name="settings_buffer_off_summary">Bufferen uit</string>
<string name="settings_provider_gps">GPS provider</string> <string name="settings_buffer_on_summary">Bufferen aan</string>
<string name="settings_provider_network">Netwerk provider</string> <string name="settings_wakelock">Slaapstand blokkade</string>
<string name="settings_provider_mixed">Gecombineerde providers</string> <string name="settings_wakelock_off_summary">Slaapstand blokkade uit</string>
<string name="settings_wakelock_on_summary">Slaapstand blokkade aan</string>
<string name="settings_accuracy_title">Locatienauwkeurigheid</string>
<string name="settings_accuracy_summary">Gewenste lokatienauwkeurigheid</string>
<string name="settings_accuracy_high">Hoog</string>
<string name="settings_accuracy_medium">Gemiddeld</string>
<string name="settings_accuracy_low">Laag</string>
<string name="settings_foreground_title">Voorgrond service</string> <string name="settings_foreground_title">Voorgrond service</string>
<string name="settings_foreground_summary">Verhoog voorrang voor service</string> <string name="settings_foreground_summary">Verhoog voorrang voor service</string>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
<string name="menu_about">Over ons</string>
<string name="menu_shortcuts">Voeg snelkoppelingen toe</string> <string name="menu_shortcuts">Voeg snelkoppelingen toe</string>
<string name="menu_clear">Wis</string> <string name="menu_clear">Wis</string>
<string name="about_description">Real time GPS tracker voor Android apparaten. Compatibel met de Traccar server en andere tracking systemen.</string> <string name="status_service_create">Service gestart</string>
<string name="about_license">Deze toepassing is gratis en open source, de broncode is beschikbaar onder de Apache Licentie versie 2.0 op GitHub.</string> <string name="status_service_destroy">Service gestopt</string>
<string name="about_web">Voor meer informatie bezoek\nwww.traccar.org/client</string>
<string name="status_send_success">Succesvol verstuurd</string> <string name="status_send_success">Succesvol verstuurd</string>
<string name="status_send_fail">Verzenden mislukt</string> <string name="status_send_fail">Verzenden mislukt</string>
<string name="status_location_update">Locatie update</string> <string name="status_location_update">Locatie update</string>
<string name="status_connectivity_change">Verbinding gewijzigd</string> <string name="status_network_online">Netwerk online</string>
<string name="status_network_offline">Netwerk offline</string>
<string name="hidden_app_name">Toestel instellingen</string> <string name="hidden_app_name">Toestel instellingen</string>
<string name="hidden_alert">De app is verborgen. Om hem opnieuw te openen bel je naar 8722227 (TRACCAR).</string> <string name="hidden_alert">De app is verborgen. Om hem opnieuw te openen bel je naar 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Voer alstublieft een geldige http:// of https:// URL in</string> <string name="error_msg_invalid_url">Voer alstublieft een geldige http:// of https:// URL in</string>
+19 -10
Просмотреть файл
@@ -2,7 +2,13 @@
<resources> <resources>
<string name="app_name">Traccar Client</string> <string name="app_name">Traccar Client</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Start teneste</string>
<string name="shortcut_stop">Stopp teneste</string>
<string name="shortcut_sos">Send SOS</string>
<string name="channel_default">Hovud kanal</string>
<string name="settings_id_title">Einingsidentifikator</string> <string name="settings_id_title">Einingsidentifikator</string>
<string name="settings_url_title">Tenar-URL</string>
<string name="settings_url_summary">Sporingstenar-URL</string>
<string name="settings_interval_title">Frekvens</string> <string name="settings_interval_title">Frekvens</string>
<string name="settings_interval_summary">Rapporteringsinterval i sekundar</string> <string name="settings_interval_summary">Rapporteringsinterval i sekundar</string>
<string name="settings_distance_title">Avstand</string> <string name="settings_distance_title">Avstand</string>
@@ -14,24 +20,27 @@
<string name="settings_status_on">Stopp</string> <string name="settings_status_on">Stopp</string>
<string name="settings_status_off_summary">Teneste stoppa</string> <string name="settings_status_off_summary">Teneste stoppa</string>
<string name="settings_status_on_summary">Tenar køyrer</string> <string name="settings_status_on_summary">Tenar køyrer</string>
<string name="settings_provider_title">Lokaliseringsleverandør</string> <string name="settings_buffer">Fråkopla mellomlagring</string>
<string name="settings_provider_summary">Kilde for lokaliseringsdata</string> <string name="settings_buffer_off_summary">Mellomlagring deaktivert</string>
<string name="settings_provider_gps">GPS-lokalisering</string> <string name="settings_buffer_on_summary">Mellomlagring</string>
<string name="settings_provider_network">Nettverkslokalisering</string> <string name="settings_accuracy_title">Lokasjonsnøyaktighet</string>
<string name="settings_provider_mixed">Blanda lokalisering</string> <string name="settings_accuracy_summary">Ønska lokasjonsnøyaktighet</string>
<string name="settings_accuracy_high">Høg</string>
<string name="settings_accuracy_medium">Medium</string>
<string name="settings_accuracy_low">Lav</string>
<string name="settings_foreground_title">Forgrunnsteneste</string> <string name="settings_foreground_title">Forgrunnsteneste</string>
<string name="settings_foreground_summary">Auk teneste-prioritet</string> <string name="settings_foreground_summary">Auk teneste-prioritet</string>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
<string name="menu_about">Om</string>
<string name="menu_shortcuts">Legg til snarveg</string> <string name="menu_shortcuts">Legg til snarveg</string>
<string name="menu_clear">Nullstill</string> <string name="menu_clear">Nullstill</string>
<string name="about_description">Sanntids GPS-sporing for Android-einingar. Kompatibel med Traccar Server og andre sporingssystem</string> <string name="status_service_create">Teneste starta</string>
<string name="about_license">Dette programmet har fri og åpen kildekode; kildekoden er lisensiert under Apache License Version 2.0 og er tilgjengeleg på GitHub.</string> <string name="status_service_destroy">Teneste stoppa</string>
<string name="about_web">For meir informasjon besøk\nwww.traccar.org/client</string>
<string name="status_send_success">Send vellukka</string> <string name="status_send_success">Send vellukka</string>
<string name="status_send_fail">Sending feila</string> <string name="status_send_fail">Sending feila</string>
<string name="status_location_update">Plassering oppdatert</string> <string name="status_location_update">Plassering oppdatert</string>
<string name="status_connectivity_change">Tilkopling forandra</string> <string name="status_network_online">Nettverk tilkopla</string>
<string name="status_network_offline">Nettverk fråkopla</string>
<string name="hidden_app_name">Einingsinnstillingar</string> <string name="hidden_app_name">Einingsinnstillingar</string>
<string name="hidden_alert">App\'en har blitt gøymt. For å åpne han igjen, ver venleg å tast (ring) 8722227 (TRACCAR).</string> <string name="hidden_alert">App\'en har blitt gøymt. For å åpne han igjen, ver venleg å tast (ring) 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Ver venleg å taste gyldig http:// eller https:// URL</string>
</resources> </resources>
+23 -14
Просмотреть файл
@@ -1,39 +1,48 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<resources> <resources>
<string name="app_name">Klient Traccar</string> <string name="app_name">Traccar Klient</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Uruchomienie usługi</string>
<string name="shortcut_stop">Zatrzymanie usługi</string>
<string name="shortcut_sos">Wyślij SOS</string>
<string name="channel_default">Podstawowy kanał</string>
<string name="settings_id_title">Identyfikator urządzenia</string> <string name="settings_id_title">Identyfikator urządzenia</string>
<string name="settings_url_title">URL Serwera</string> <string name="settings_url_title">URL Serwera</string>
<string name="settings_url_summary">URL serwera śledzącego</string> <string name="settings_url_summary">URL serwera śledzącego</string>
<string name="settings_interval_title">Częstotliwość</string> <string name="settings_interval_title">Częstotliwość</string>
<string name="settings_interval_summary">Interwał raportów w sekundach</string> <string name="settings_interval_summary">Interwał raportowania w sekundach</string>
<string name="settings_distance_title">Dystans</string> <string name="settings_distance_title">Dystans</string>
<string name="settings_distance_summary">Dystans raportu w metrach</string> <string name="settings_distance_summary">Dystans raportowania w metrach</string>
<string name="settings_angle_title">Kąt</string> <string name="settings_angle_title">Kąt</string>
<string name="settings_angle_summary">Kąt raportu w stopniach</string> <string name="settings_angle_summary">Kąt raportowania w stopniach</string>
<string name="settings_status_title">Status usługi</string> <string name="settings_status_title">Status usługi</string>
<string name="settings_status_off">Uruchom</string> <string name="settings_status_off">Uruchom</string>
<string name="settings_status_on">Zatrzymaj</string> <string name="settings_status_on">Zatrzymaj</string>
<string name="settings_status_off_summary">Usługa zatrzymana</string> <string name="settings_status_off_summary">Usługa zatrzymana</string>
<string name="settings_status_on_summary">Usługa uruchomiona</string> <string name="settings_status_on_summary">Usługa uruchomiona</string>
<string name="settings_provider_title">Dostawca lokalizacji</string> <string name="settings_buffer">Buforowanie offline</string>
<string name="settings_provider_summary">Źródło danych o lokalizacji</string> <string name="settings_buffer_off_summary">Buforowanie wyłączone</string>
<string name="settings_provider_gps">GPS</string> <string name="settings_buffer_on_summary">Buforowanie włączone</string>
<string name="settings_provider_network">Sieć</string> <string name="settings_wakelock">Wybudź blokadę</string>
<string name="settings_provider_mixed">Mieszane</string> <string name="settings_wakelock_off_summary">Wybudzenie blokady wyłączone</string>
<string name="settings_wakelock_on_summary">Wybudzenie blokady włączone</string>
<string name="settings_accuracy_title">Dokładność lokalizacji</string>
<string name="settings_accuracy_summary">Żądana dokładność lokalizacji</string>
<string name="settings_accuracy_high">Wysoka</string>
<string name="settings_accuracy_medium">Średnia</string>
<string name="settings_accuracy_low">Niska</string>
<string name="settings_foreground_title">Usługa pierwszoplanowa</string> <string name="settings_foreground_title">Usługa pierwszoplanowa</string>
<string name="settings_foreground_summary">Zwiększ priorytet usługi</string> <string name="settings_foreground_summary">Zwiększ priorytet usługi</string>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
<string name="menu_about">O Traccar</string>
<string name="menu_shortcuts">Dodaj skróty</string> <string name="menu_shortcuts">Dodaj skróty</string>
<string name="menu_clear">Wyczyść</string> <string name="menu_clear">Wyczyść</string>
<string name="about_description">Monitor GPS dla urządzeń Android. Kompatybilny z serwerem Traccar oraz innymi platformami śledzącymi.</string> <string name="status_service_create">Usługa uruchomiona</string>
<string name="about_license">Ta aplikacja jest darmowa i otwartoźródłowa. Kod źródłowy jest licencjonowany Apache License Version 2.0 i jest dostępny na GitHub.</string> <string name="status_service_destroy">Usługa zatrzymana</string>
<string name="about_web">Więcej informacji - odwiedź\nwww.traccar.org/client</string>
<string name="status_send_success">Wysłane poprawnie</string> <string name="status_send_success">Wysłane poprawnie</string>
<string name="status_send_fail">Wysłanie nieudane</string> <string name="status_send_fail">Wysłanie nieudane</string>
<string name="status_location_update">Aktualizacja lokalizacji</string> <string name="status_location_update">Aktualizacja lokalizacji</string>
<string name="status_connectivity_change">Zmiana połączenia</string> <string name="status_network_online">Połączony z siecią</string>
<string name="status_network_offline">Rozłączony z siecią</string>
<string name="hidden_app_name">Ustawienia urządzenia</string> <string name="hidden_app_name">Ustawienia urządzenia</string>
<string name="hidden_alert">Aplikacja została ukryta. By ją otworzyć, zadzwoń pod 8722227 (TRACCAR).</string> <string name="hidden_alert">Aplikacja została ukryta. By ją otworzyć, zadzwoń pod 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Wprowadź poprawny adres http:// lub https:// URL</string> <string name="error_msg_invalid_url">Wprowadź poprawny adres http:// lub https:// URL</string>
+24 -15
Просмотреть файл
@@ -2,7 +2,11 @@
<resources> <resources>
<string name="app_name">Cliente Traccar</string> <string name="app_name">Cliente Traccar</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="settings_id_title">Identificador único</string> <string name="shortcut_start">Iniciar serviço</string>
<string name="shortcut_stop">Parar serviço</string>
<string name="shortcut_sos">Enviar SOS</string>
<string name="channel_default">Canal Principal</string>
<string name="settings_id_title">Identificador do dispositivo</string>
<string name="settings_url_title">URL do Servidor</string> <string name="settings_url_title">URL do Servidor</string>
<string name="settings_url_summary">URL do servidor de rastreamento</string> <string name="settings_url_summary">URL do servidor de rastreamento</string>
<string name="settings_interval_title">Invervalo</string> <string name="settings_interval_title">Invervalo</string>
@@ -16,25 +20,30 @@
<string name="settings_status_on">Parar</string> <string name="settings_status_on">Parar</string>
<string name="settings_status_off_summary">Serviço Parado</string> <string name="settings_status_off_summary">Serviço Parado</string>
<string name="settings_status_on_summary">Serviço em execução</string> <string name="settings_status_on_summary">Serviço em execução</string>
<string name="settings_provider_title">Provedor de localização</string> <string name="settings_buffer">Offline buffering</string>
<string name="settings_provider_summary">Fonte dos dados de localização</string> <string name="settings_buffer_off_summary">Buffering Desligado</string>
<string name="settings_provider_gps">Provedor GPS</string> <string name="settings_buffer_on_summary">Buffering Ligado</string>
<string name="settings_provider_network">Provedor Rede</string> <string name="settings_wakelock">Bloqueio de Ativação</string>
<string name="settings_provider_mixed">Provedor Misto</string> <string name="settings_wakelock_off_summary">Bloqueio de Ativação Desligado</string>
<string name="settings_foreground_title">Serviço primeiro plano</string> <string name="settings_wakelock_on_summary">Bloqueio de Ativação Ligado</string>
<string name="settings_foreground_summary">Aumentar a prioridade de serviço</string> <string name="settings_accuracy_title">Precisão de localização</string>
<string name="menu_status">Status</string> <string name="settings_accuracy_summary">Precisão de localização desejada</string>
<string name="menu_about">Sobre</string> <string name="settings_accuracy_high">Alto</string>
<string name="settings_accuracy_medium">Médio</string>
<string name="settings_accuracy_low">Baixo</string>
<string name="settings_foreground_title">Serviço em primeiro plano</string>
<string name="settings_foreground_summary">Aumentar a prioridade do serviço</string>
<string name="menu_status">Estado</string>
<string name="menu_shortcuts">Adicionar atalhos</string> <string name="menu_shortcuts">Adicionar atalhos</string>
<string name="menu_clear">Limpar</string> <string name="menu_clear">Limpar</string>
<string name="about_description">Rastreador GPS Real Time para dispositivos Android. Compatível com servidor Traccar e outros sistemas de rastreamento.</string> <string name="status_service_create">Serviço iniciado</string>
<string name="about_license">Esta aplicação é livre e de código aberto, o código fonte é licenciado sob a licença Apache Versão 2.0 e disponível no GitHub.</string> <string name="status_service_destroy">Serviço parado</string>
<string name="about_web">Para mais informações visite\nwww.traccar.org/client</string>
<string name="status_send_success">Enviado com Sucesso</string> <string name="status_send_success">Enviado com Sucesso</string>
<string name="status_send_fail">Falha no envio</string> <string name="status_send_fail">Falha no envio</string>
<string name="status_location_update">Localização atualizada</string> <string name="status_location_update">Localização atualizada</string>
<string name="status_connectivity_change">Mudança de conectividade</string> <string name="status_network_online">Rede online</string>
<string name="status_network_offline">Rede offline</string>
<string name="hidden_app_name">Configurações do Dispositivo</string> <string name="hidden_app_name">Configurações do Dispositivo</string>
<string name="hidden_alert">O aplicativo foi escondido. Para abrir novamente por favor digite 8722227 (TRACCAR).</string> <string name="hidden_alert">O aplicativo foi escondido. Para abrir novamente por favor digite 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Digite um URL http: // ou https: // válido</string> <string name="error_msg_invalid_url">Digite uma URL http: // ou https: // válida</string>
</resources> </resources>
+27 -10
Просмотреть файл
@@ -2,31 +2,48 @@
<resources> <resources>
<string name="app_name">Cliente Traccar</string> <string name="app_name">Cliente Traccar</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Iniciar serviço</string>
<string name="shortcut_stop">Parar serviço</string>
<string name="shortcut_sos">Enviar SOS</string>
<string name="channel_default">Canal Principal</string>
<string name="settings_id_title">Identificador único</string> <string name="settings_id_title">Identificador único</string>
<string name="settings_url_title">URL do Servidor</string>
<string name="settings_url_summary">URL do servidor de rastreamento</string>
<string name="settings_interval_title">Invervalo</string> <string name="settings_interval_title">Invervalo</string>
<string name="settings_interval_summary">Intervalo de relatórios em segundos</string>
<string name="settings_distance_title">Distância</string>
<string name="settings_distance_summary">Distância de relatórios em metros</string>
<string name="settings_angle_title">Ângulo</string>
<string name="settings_angle_summary">Ângulo de relatório em graus</string>
<string name="settings_status_title">Status do Serviço</string> <string name="settings_status_title">Status do Serviço</string>
<string name="settings_status_off">Iniciar</string> <string name="settings_status_off">Iniciar</string>
<string name="settings_status_on">Parar</string> <string name="settings_status_on">Parar</string>
<string name="settings_status_off_summary">Serviço Parado</string> <string name="settings_status_off_summary">Serviço Parado</string>
<string name="settings_status_on_summary">Serviço em execução</string> <string name="settings_status_on_summary">Serviço em execução</string>
<string name="settings_provider_title">Provedor de localização</string> <string name="settings_buffer">Buffering Offline</string>
<string name="settings_provider_summary">Fonte dos dados de localização</string> <string name="settings_buffer_off_summary">Buffering desligado</string>
<string name="settings_provider_gps">Provedor GPS</string> <string name="settings_buffer_on_summary">Buffering ligado</string>
<string name="settings_provider_network">Provedor Rede</string> <string name="settings_wakelock">Bloqueio de Ativação</string>
<string name="settings_provider_mixed">Provedor Misto</string> <string name="settings_wakelock_off_summary">Bloqueio de Ativação Desligado</string>
<string name="settings_wakelock_on_summary">Bloqueio de Ativação Ligado</string>
<string name="settings_accuracy_title">Precisão de localização</string>
<string name="settings_accuracy_summary">Precisão de localização desejada</string>
<string name="settings_accuracy_high">Alto</string>
<string name="settings_accuracy_medium">Médio</string>
<string name="settings_accuracy_low">Baixo</string>
<string name="settings_foreground_title">Serviço primeiro plano</string> <string name="settings_foreground_title">Serviço primeiro plano</string>
<string name="settings_foreground_summary">Aumentar a prioridade de serviço</string> <string name="settings_foreground_summary">Aumentar a prioridade de serviço</string>
<string name="menu_status">Estado</string> <string name="menu_status">Estado</string>
<string name="menu_about">Sobre</string>
<string name="menu_shortcuts">Adicionar Atalhos</string> <string name="menu_shortcuts">Adicionar Atalhos</string>
<string name="menu_clear">Limpar</string> <string name="menu_clear">Limpar</string>
<string name="about_description">Localizador GPS em tempo real para dispositivos Android. Compatível com servidor Traccar e outros sistemas de localização.</string> <string name="status_service_create">Serviço Iniciado</string>
<string name="about_license">Esta aplicação é livre e de código aberto, o código fonte é licenciado sob a licença Apache Versão 2.0 e disponível no GitHub.</string> <string name="status_service_destroy">Serviço Parado</string>
<string name="about_web">Para mais informações visite \nwww.traccar.org/client</string>
<string name="status_send_success">Enviado com Sucesso</string> <string name="status_send_success">Enviado com Sucesso</string>
<string name="status_send_fail">Falha no envio</string> <string name="status_send_fail">Falha no envio</string>
<string name="status_location_update">Localização atualizada</string> <string name="status_location_update">Localização atualizada</string>
<string name="status_connectivity_change">Mudança de conectividade</string> <string name="status_network_online">Rede online</string>
<string name="status_network_offline">Rede offline</string>
<string name="hidden_app_name">Definições do Dispositivo</string> <string name="hidden_app_name">Definições do Dispositivo</string>
<string name="hidden_alert">A aplicação foi ocultada com sucesso. Para abrir novamente, por favor contacte 8722227 (TRACCAR).</string> <string name="hidden_alert">A aplicação foi ocultada com sucesso. Para abrir novamente, por favor contacte 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Digite um URL http: // ou https: // válido</string>
</resources> </resources>
+13 -10
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Client Traccar</string> <string name="app_name">Client Traccar</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Porneste Serviciu</string>
<string name="shortcut_stop">Opreste serviciu</string>
<string name="shortcut_sos">Trimite SOS</string>
<string name="channel_default">Canal Principal</string>
<string name="settings_id_title">Identificare dispozitiv</string> <string name="settings_id_title">Identificare dispozitiv</string>
<string name="settings_url_title">Adresa server</string> <string name="settings_url_title">Adresa server</string>
<string name="settings_url_summary">Adresa serverului de localizare</string> <string name="settings_url_summary">Adresa serverului de localizare</string>
@@ -16,24 +20,23 @@
<string name="settings_status_on">Oprit</string> <string name="settings_status_on">Oprit</string>
<string name="settings_status_off_summary">Serviciu Oprit</string> <string name="settings_status_off_summary">Serviciu Oprit</string>
<string name="settings_status_on_summary">Serviciul rulează</string> <string name="settings_status_on_summary">Serviciul rulează</string>
<string name="settings_provider_title">Furnizor locaţie</string> <string name="settings_accuracy_title">Acuratete localizare</string>
<string name="settings_provider_summary">Sursă date localizare</string> <string name="settings_accuracy_summary">Acuratete dorita pentru localizare</string>
<string name="settings_provider_gps">Furnizor GPS</string> <string name="settings_accuracy_high">Inalt</string>
<string name="settings_provider_network">Furnizor Reţea</string> <string name="settings_accuracy_medium">Mediu</string>
<string name="settings_provider_mixed">Furnizor Mixt</string> <string name="settings_accuracy_low">Jos</string>
<string name="settings_foreground_title">Serviciul prim-plan</string> <string name="settings_foreground_title">Serviciul prim-plan</string>
<string name="settings_foreground_summary">Creştere prioritate serviciu</string> <string name="settings_foreground_summary">Creştere prioritate serviciu</string>
<string name="menu_status">Stare</string> <string name="menu_status">Stare</string>
<string name="menu_about">Despre</string>
<string name="menu_shortcuts">Adăugare scurtătură</string> <string name="menu_shortcuts">Adăugare scurtătură</string>
<string name="menu_clear">Golire</string> <string name="menu_clear">Golire</string>
<string name="about_description">Localizare GPS în timp real pentru dispozitive Android. Compatibil cu Server Traccar si alte sisteme de localizare.</string> <string name="status_service_create">Serviciu pornit</string>
<string name="about_license">Aplicaţia este gratuită şi open source, codul sursă este licenţiat sub Apache License Version 2.0 şi este disponibil pe GitHub.</string> <string name="status_service_destroy">Serviciu oprit</string>
<string name="about_web">Pentru mai multe informaţii vizitaţi\nwww.traccar.org/client</string>
<string name="status_send_success">Expediat</string> <string name="status_send_success">Expediat</string>
<string name="status_send_fail">Trimitere eşuată</string> <string name="status_send_fail">Trimitere eşuată</string>
<string name="status_location_update">Actualizare locaţie</string> <string name="status_location_update">Actualizare locaţie</string>
<string name="status_connectivity_change">Schimbare conectivitate</string> <string name="status_network_online">Retea pornita</string>
<string name="status_network_offline">Retea oprita</string>
<string name="hidden_app_name">Setări Dispozitiv</string> <string name="hidden_app_name">Setări Dispozitiv</string>
<string name="hidden_alert">Aplicaţia este ascunsă. Pentru deschidere vă rugam apelaţi numărul de telefon 8722227 (TRACCAR).</string> <string name="hidden_alert">Aplicaţia este ascunsă. Pentru deschidere vă rugam apelaţi numărul de telefon 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Introduceti o adresa valida http:// sau https://</string> <string name="error_msg_invalid_url">Introduceti o adresa valida http:// sau https://</string>
+14 -11
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Traccar Клиент</string> <string name="app_name">Traccar Клиент</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Запуск сервиса</string>
<string name="shortcut_stop">Остановка сервиса</string>
<string name="shortcut_sos">Отправка SOS</string>
<string name="channel_default">Первичный канал</string>
<string name="settings_id_title">Идентификатор устройства</string> <string name="settings_id_title">Идентификатор устройства</string>
<string name="settings_url_title">URL сервера</string> <string name="settings_url_title">URL сервера</string>
<string name="settings_url_summary">URL телематического сервера</string> <string name="settings_url_summary">URL телематического сервера</string>
@@ -16,25 +20,24 @@
<string name="settings_status_on">Стоп</string> <string name="settings_status_on">Стоп</string>
<string name="settings_status_off_summary">Сервис остановлен</string> <string name="settings_status_off_summary">Сервис остановлен</string>
<string name="settings_status_on_summary">Сервис запущен</string> <string name="settings_status_on_summary">Сервис запущен</string>
<string name="settings_provider_title">Провайдер местоположения</string> <string name="settings_accuracy_title">Точность местоположения</string>
<string name="settings_provider_summary">Источник данных о местоположении</string> <string name="settings_accuracy_summary">Точность местоположения</string>
<string name="settings_provider_gps">GPS провайдер</string> <string name="settings_accuracy_high">Высокая</string>
<string name="settings_provider_network">Сетевой провайдер</string> <string name="settings_accuracy_medium">Средняя</string>
<string name="settings_provider_mixed">Смешанный провайдер</string> <string name="settings_accuracy_low">Низкая</string>
<string name="settings_foreground_title">Приоритетный сервис</string> <string name="settings_foreground_title">Приоритетный сервис</string>
<string name="settings_foreground_summary">Увеличить приоритет сервиса</string> <string name="settings_foreground_summary">Увеличить приоритет сервиса</string>
<string name="menu_status">Состояние</string> <string name="menu_status">Состояние</string>
<string name="menu_about">О программе</string>
<string name="menu_shortcuts">Добавить ярлыки</string> <string name="menu_shortcuts">Добавить ярлыки</string>
<string name="menu_clear">Очистить</string> <string name="menu_clear">Очистить</string>
<string name="about_description">Трекер для Android устройств. Совместим с Traccar сервером и другими мониторинговыми системами.</string> <string name="status_service_create">Сервис запущен</string>
<string name="about_license">Это приложение распростаняется бесплатно, исходный код распростаняется по лицензии Apache License Version 2.0 и доступен на GitHub.</string> <string name="status_service_destroy">Сервис остановлен</string>
<string name="about_web">Для получения дополнительной информации посетите\nwww.traccar.org/client</string>
<string name="status_send_success">Отправка успешна</string> <string name="status_send_success">Отправка успешна</string>
<string name="status_send_fail">Ошибка отправки</string> <string name="status_send_fail">Ошибка отправки</string>
<string name="status_location_update">Обновление местоположения</string> <string name="status_location_update">Обновление местоположения</string>
<string name="status_connectivity_change">Изменение подключения</string> <string name="status_network_online">Сеть онлайн</string>
<string name="hidden_app_name">Настройки устройтва</string> <string name="status_network_offline">Сеть оффлайн</string>
<string name="hidden_app_name">Настройки устройства</string>
<string name="hidden_alert">Приложение было спрятано. Чтобы открыть позвоните на номер 8722227 (TRACCAR).</string> <string name="hidden_alert">Приложение было спрятано. Чтобы открыть позвоните на номер 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Пожалуйста, введите верный http:// или https:// URL</string> <string name="error_msg_invalid_url">Пожалуйста, введите верный http:// или https:// URL</string>
</resources> </resources>
-10
Просмотреть файл
@@ -9,22 +9,12 @@
<string name="settings_status_on">නැවතීම</string> <string name="settings_status_on">නැවතීම</string>
<string name="settings_status_off_summary">සේවාව අක්‍රීයයි</string> <string name="settings_status_off_summary">සේවාව අක්‍රීයයි</string>
<string name="settings_status_on_summary">සේවාව ක්‍රියාත්මකයි</string> <string name="settings_status_on_summary">සේවාව ක්‍රියාත්මකයි</string>
<string name="settings_provider_title">Location provider</string>
<string name="settings_provider_summary">Source of location data</string>
<string name="settings_provider_gps">GPS provider</string>
<string name="settings_provider_network">Network provider</string>
<string name="settings_provider_mixed">Mixed provider</string>
<string name="settings_foreground_title">Foreground service</string> <string name="settings_foreground_title">Foreground service</string>
<string name="settings_foreground_summary">Increase service priority</string> <string name="settings_foreground_summary">Increase service priority</string>
<string name="menu_status">තත්වය</string> <string name="menu_status">තත්වය</string>
<string name="menu_about">පිළිබඳ</string>
<string name="menu_shortcuts">කෙටි මං එකතු කරන්න</string> <string name="menu_shortcuts">කෙටි මං එකතු කරන්න</string>
<string name="menu_clear">හිස් කරන්න</string> <string name="menu_clear">හිස් කරන්න</string>
<string name="about_description">Real time GPS tracker for Android devices. Compatible with Traccar Server and other tracking systems.</string>
<string name="about_license">This application is free and open source, source code is licensed under Apache License Version 2.0 and available on GitHub.</string>
<string name="about_web">For more information visit\nwww.traccar.org/client</string>
<string name="status_send_fail">යැවිය නොහැකිය</string> <string name="status_send_fail">යැවිය නොහැකිය</string>
<string name="status_location_update">Location update</string> <string name="status_location_update">Location update</string>
<string name="status_connectivity_change">Connectivity change</string>
<string name="hidden_app_name">උපකරණ සැකසුම්</string> <string name="hidden_app_name">උපකරණ සැකසුම්</string>
</resources> </resources>
+13 -10
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Traccar Manager</string> <string name="app_name">Traccar Manager</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Spustiť službu</string>
<string name="shortcut_stop">Zastaviť službu</string>
<string name="shortcut_sos">Poslať SOS</string>
<string name="channel_default">Primárny kanál</string>
<string name="settings_id_title">Identifikátor zariadenia</string> <string name="settings_id_title">Identifikátor zariadenia</string>
<string name="settings_url_title">URL server</string> <string name="settings_url_title">URL server</string>
<string name="settings_url_summary">Sledovanie URL serveru</string> <string name="settings_url_summary">Sledovanie URL serveru</string>
@@ -16,24 +20,23 @@
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Služba sa zastavila</string> <string name="settings_status_off_summary">Služba sa zastavila</string>
<string name="settings_status_on_summary">Služba beží</string> <string name="settings_status_on_summary">Služba beží</string>
<string name="settings_provider_title">Poskytovateľ polohy</string> <string name="settings_accuracy_title">Presnosť lokalizácie</string>
<string name="settings_provider_summary">Zdroj polohovacích údajov</string> <string name="settings_accuracy_summary">Požadovaná presnosť lokalizácie</string>
<string name="settings_provider_gps">Poskytovateľ GPS</string> <string name="settings_accuracy_high">Vysoká</string>
<string name="settings_provider_network">Poskytovateľ sieťových služieb</string> <string name="settings_accuracy_medium">Stredná</string>
<string name="settings_provider_mixed">Mix poskytovateľ </string> <string name="settings_accuracy_low">Nízka</string>
<string name="settings_foreground_title">Služba v popredí</string> <string name="settings_foreground_title">Služba v popredí</string>
<string name="settings_foreground_summary">Zvýšiť prioritu servis</string> <string name="settings_foreground_summary">Zvýšiť prioritu servis</string>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
<string name="menu_about">O</string>
<string name="menu_shortcuts">Pridanie skratiek</string> <string name="menu_shortcuts">Pridanie skratiek</string>
<string name="menu_clear">Vyčistiť</string> <string name="menu_clear">Vyčistiť</string>
<string name="about_description">Real time GPS tracker pre Android zariadenia. Kompatibilný s Traccar Serverom a ďalšími sledovacími systémami.</string> <string name="status_service_create">Služba spustená</string>
<string name="about_license">Táto aplikácia je zadarmo a open source, zdrojový kód pod licenciou Apache License verzie 2.0 a je k dispozícii na GitHub.</string> <string name="status_service_destroy">Služba zastavená</string>
<string name="about_web">Pre viac informácií navštívte visit\nwww.traccar.org/client</string>
<string name="status_send_success">Úspešne poslané</string> <string name="status_send_success">Úspešne poslané</string>
<string name="status_send_fail">Odoslanie zlyhalo</string> <string name="status_send_fail">Odoslanie zlyhalo</string>
<string name="status_location_update">Aktualizácia polohy</string> <string name="status_location_update">Aktualizácia polohy</string>
<string name="status_connectivity_change">Zmena konektivity</string> <string name="status_network_online">Sieť online</string>
<string name="status_network_offline">Sieť offline</string>
<string name="hidden_app_name">Nastavenie zariadenia</string> <string name="hidden_app_name">Nastavenie zariadenia</string>
<string name="hidden_alert">Aplikácia bola skrytá. Pre opätovné otvorenie znova vytočte 8722227 (TRACCAR).</string> <string name="hidden_alert">Aplikácia bola skrytá. Pre opätovné otvorenie znova vytočte 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Prosím zadajte validné http:// alebo https:// URL</string> <string name="error_msg_invalid_url">Prosím zadajte validné http:// alebo https:// URL</string>
+31 -2
Просмотреть файл
@@ -2,13 +2,42 @@
<resources> <resources>
<string name="app_name">Traccar klient</string> <string name="app_name">Traccar klient</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Zaženi storitev</string>
<string name="shortcut_stop">Ustavi storitev</string>
<string name="shortcut_sos">Pošlji SOS</string>
<string name="channel_default">Glavni kanal</string>
<string name="settings_id_title">Identifikator naprave</string>
<string name="settings_url_title">URL strežnika</string>
<string name="settings_url_summary">ULR naslov strežnika za sledenje</string>
<string name="settings_interval_title">Frekvenca</string>
<string name="settings_interval_summary">Pogostost pošiljanja v sekundah</string>
<string name="settings_distance_title">Razdalja</string>
<string name="settings_distance_summary">Razdalja med pošiljanji v metrih</string>
<string name="settings_angle_title">Kot</string>
<string name="settings_angle_summary">Kot med pošiljanji v stopinjah</string>
<string name="settings_status_title">Stanje storitve</string>
<string name="settings_status_off">Zaženi</string> <string name="settings_status_off">Zaženi</string>
<string name="settings_status_on">Ustavi</string> <string name="settings_status_on">Ustavi</string>
<string name="settings_status_off_summary">Servis ustavljen</string> <string name="settings_status_off_summary">Storitev ustavljena</string>
<string name="settings_status_on_summary">Servis teče</string> <string name="settings_status_on_summary">Storitev zagnana</string>
<string name="settings_accuracy_title">Natančnost lokacije</string>
<string name="settings_accuracy_summary">Željena natančnost lokacije</string>
<string name="settings_accuracy_high">Visoka</string>
<string name="settings_accuracy_medium">Srednja</string>
<string name="settings_accuracy_low">Nizka</string>
<string name="settings_foreground_title">Storitev v ospredju</string>
<string name="settings_foreground_summary">Povečaj prioriteto storitve</string>
<string name="menu_status">Stanje</string> <string name="menu_status">Stanje</string>
<string name="menu_shortcuts">Dodaj bližnjice</string>
<string name="menu_clear">Počisti</string> <string name="menu_clear">Počisti</string>
<string name="status_service_create">Storitev zagnana</string>
<string name="status_service_destroy">Storitev ustavljena</string>
<string name="status_send_success">Pošiljanje uspelo</string> <string name="status_send_success">Pošiljanje uspelo</string>
<string name="status_send_fail">Pošiljanje spodletelo</string> <string name="status_send_fail">Pošiljanje spodletelo</string>
<string name="status_location_update">Posodobitev lokacije</string>
<string name="status_network_online">Mrežna povezava vzpostavljena</string>
<string name="status_network_offline">Ni mrežne povezave</string>
<string name="hidden_app_name">Nastavitve naprave</string> <string name="hidden_app_name">Nastavitve naprave</string>
<string name="hidden_alert">Aplikacija je bila skrita. Za njen ponoven prikaz pokličite telefonsko številko 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Prosim vpišite veljaven http:// ali https:// naslov</string>
</resources> </resources>
+14 -11
Просмотреть файл
@@ -20,26 +20,29 @@
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Servis zaustavljen</string> <string name="settings_status_off_summary">Servis zaustavljen</string>
<string name="settings_status_on_summary">Servis pokrenut</string> <string name="settings_status_on_summary">Servis pokrenut</string>
<string name="settings_provider_title">Provajder lokacije</string> <string name="settings_buffer">Offline buffering</string>
<string name="settings_provider_summary">Izvor lokacijskih podataka</string> <string name="settings_buffer_off_summary">Buffering uključen</string>
<string name="settings_provider_gps">GPS provajder</string> <string name="settings_buffer_on_summary">Buffering isključen</string>
<string name="settings_provider_network">Provajder Mreže</string> <string name="settings_wakelock">Zaključavanje budnosti</string>
<string name="settings_provider_mixed">Oba zajedno provajdera</string> <string name="settings_wakelock_off_summary">Budnost isključena</string>
<string name="settings_wakelock_on_summary">Budnost uključena</string>
<string name="settings_accuracy_title">Tačnost lokacije</string>
<string name="settings_accuracy_summary">Željena tačnost lokacije</string>
<string name="settings_accuracy_high">Visoka</string>
<string name="settings_accuracy_medium">Srednja</string>
<string name="settings_accuracy_low">Mala</string>
<string name="settings_foreground_title">Prvi plan servis</string> <string name="settings_foreground_title">Prvi plan servis</string>
<string name="settings_foreground_summary">Povecanje usluga prioritet</string> <string name="settings_foreground_summary">Povecanje usluga prioritet</string>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
<string name="menu_about">O klijentu</string>
<string name="menu_shortcuts">Dodaj prečice</string> <string name="menu_shortcuts">Dodaj prečice</string>
<string name="menu_clear">Očisti</string> <string name="menu_clear">Očisti</string>
<string name="about_description">GPS tracker za Android telefone. GPS satelit kompatibilno.</string>
<string name="about_license">Ova aplikacija je besplatna i open source,izvorni kod je licenciran pod Apache License Version 2.0 i dostupan na GitHub</string>
<string name="about_web">Za više informacija www.traccar.org/client </string>
<string name="status_service_create">Servis pokrenut</string> <string name="status_service_create">Servis pokrenut</string>
<string name="status_service_destroy">Servis zaustavljen</string> <string name="status_service_destroy">Servis zaustavljen</string>
<string name="status_send_success">Slanne uspešno</string> <string name="status_send_success">Slanje uspešno</string>
<string name="status_send_fail">Slanje neuspešno</string> <string name="status_send_fail">Slanje neuspešno</string>
<string name="status_location_update">Ažuriranje lokacije</string> <string name="status_location_update">Ažuriranje lokacije</string>
<string name="status_connectivity_change">Promenjena konekcija</string> <string name="status_network_online">Mreža dostupna</string>
<string name="status_network_offline">Mreža nedostupna</string>
<string name="hidden_app_name">Podešavanja uređaja</string> <string name="hidden_app_name">Podešavanja uređaja</string>
<string name="hidden_alert">Aplikacija je skrivena. Da je otvorite kucajte 8722227 (TRACCAR).</string> <string name="hidden_alert">Aplikacija je skrivena. Da je otvorite kucajte 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">Molimo unesite pravilnu http:// ili https:// adresu</string> <string name="error_msg_invalid_url">Molimo unesite pravilnu http:// ili https:// adresu</string>
+19 -12
Просмотреть файл
@@ -2,35 +2,42 @@
<resources> <resources>
<string name="app_name">ட்ரக்கர் பணி செயலி</string> <string name="app_name">ட்ரக்கர் பணி செயலி</string>
<string name="app_logo">ட்ரக்கர் </string> <string name="app_logo">ட்ரக்கர் </string>
<string name="settings_id_title">அடையாளங்காட்டி</string> <string name="shortcut_start">செயலை துவக்கு </string>
<string name="settings_url_title">சர்வர் முகவரி</string> <string name="shortcut_stop">செயலை நிறுத்து </string>
<string name="shortcut_sos">அவசர உதவி </string>
<string name="channel_default">முதன்மை அலைவரிசை </string>
<string name="settings_id_title">சாதன அடையாளங்காட்டி</string>
<string name="settings_url_title">கணனி பகிர்வான் முகவரி</string>
<string name="settings_url_summary">கண்காணிப்பு சர்வர் முகவரி</string> <string name="settings_url_summary">கண்காணிப்பு சர்வர் முகவரி</string>
<string name="settings_interval_title">இடைவெளி நொடிகள்</string> <string name="settings_interval_title">இடைவெளி நொடிகள்</string>
<string name="settings_interval_summary">கண்காணிப்பு இடைவெளி நொடிகளில்</string> <string name="settings_interval_summary">கண்காணிப்பு இடைவெளி நொடிகளில்</string>
<string name="settings_distance_title">தூரம்</string> <string name="settings_distance_title">தூரம்</string>
<string name="settings_distance_summary">மீட்டர் தொலைவில் அறிக்கை</string>
<string name="settings_angle_title">கோணம்</string> <string name="settings_angle_title">கோணம்</string>
<string name="settings_angle_summary">டிகிரிகளில் கோண அறிக்கை </string>
<string name="settings_status_title">சேவை நிலை</string> <string name="settings_status_title">சேவை நிலை</string>
<string name="settings_status_off">துவக்கு</string> <string name="settings_status_off">துவக்கு</string>
<string name="settings_status_on">நிறுத்து</string> <string name="settings_status_on">நிறுத்து</string>
<string name="settings_status_off_summary">சேவை நிறுத்தப்பட்டது</string> <string name="settings_status_off_summary">சேவை நிறுத்தப்பட்டது</string>
<string name="settings_status_on_summary">சேவை இயங்குகிறது</string> <string name="settings_status_on_summary">சேவை இயங்குகிறது</string>
<string name="settings_provider_title">இடம் வழங்குநர</string> <string name="settings_accuracy_title">இடம் துல்லியம</string>
<string name="settings_provider_summary">மூல இடத்தரவு</string> <string name="settings_accuracy_summary">விரும்பிய இடம் துல்லியம்</string>
<string name="settings_provider_gps">நேரடி பூகோள இடம்காடி வழங்குநர்</string> <string name="settings_accuracy_high">உயர்</string>
<string name="settings_provider_network">பிணையம் வழங்குநர்</string> <string name="settings_accuracy_medium">நடுத்தர</string>
<string name="settings_provider_mixed">கலப்பு வழங்குநர்</string> <string name="settings_accuracy_low">குறைந்த</string>
<string name="settings_foreground_title">பின்னணி சேவை</string> <string name="settings_foreground_title">பின்னணி சேவை</string>
<string name="settings_foreground_summary">சேவை முன்னுரிமை அதிகரிக்க</string> <string name="settings_foreground_summary">சேவை முன்னுரிமை அதிகரிக்க</string>
<string name="menu_status">நிலை</string> <string name="menu_status">நிலை</string>
<string name="menu_about">இதை பற்றி அறிந்துகொள்ள</string>
<string name="menu_shortcuts">குறுக்குவழி சேர்க்க</string> <string name="menu_shortcuts">குறுக்குவழி சேர்க்க</string>
<string name="menu_clear">அழிக்கவும்</string> <string name="menu_clear">அழிக்கவும்</string>
<string name="about_description">இது ஒரு ட்ரக்கர் சர்வர் சார்ந்த ஆன்டிராயிடு நேரடி பூகோள இடம்காடி மற்றும் கண்காணிப்பு செயலி</string> <string name="status_service_create">சேவை துவங்கியது </string>
<string name="about_license">இந்த செயலி பயன்பாட்டை இலவசமாக மற்றும் திறந்த செயலி அபாச்சி பதிப்பு 2.0 முறை மூலம் வழங்கப்படுகிறது, மேலும் செயலி மூல குறியீடு தரவிறக்கம் கிட்குப்பில் உள்ளது</string> <string name="status_service_destroy">சேவை நிறுத்தப்பட்டது </string>
<string name="about_web">மேலும் தகவல்களுக்கு அணுகவும் www.traccar.org/client</string> <string name="status_send_success">வெற்றிகரமாக அனுப்பப்பட்டது </string>
<string name="status_send_fail">தகவல் அனுப்புதல் தோல்வியுற்றது</string> <string name="status_send_fail">தகவல் அனுப்புதல் தோல்வியுற்றது</string>
<string name="status_location_update">இடம் மேம்படுத்தல்</string> <string name="status_location_update">இடம் மேம்படுத்தல்</string>
<string name="status_connectivity_change">இணைப்பு மாற்றம்</string> <string name="status_network_online">வலைத்தொடர்பு உயிர்ப்பு </string>
<string name="status_network_offline">வலைத்தொடர்பு துண்டிப்பு </string>
<string name="hidden_app_name">சாதன அமைப்புகள்</string> <string name="hidden_app_name">சாதன அமைப்புகள்</string>
<string name="hidden_alert">செயலி மறைக்கப்பட்டுள்ளது. அதை காண பின்வரும் எண்ணை அழைக்கவும் 8722227 ( ட்ரக்கர் )</string> <string name="hidden_alert">செயலி மறைக்கப்பட்டுள்ளது. அதை காண பின்வரும் எண்ணை அழைக்கவும் 8722227 ( ட்ரக்கர் )</string>
<string name="error_msg_invalid_url">சரியான http: // அல்லது https: // URL ஐ உள்ளிடுக</string>
</resources> </resources>
+13 -10
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Traccar Client</string> <string name="app_name">Traccar Client</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">เริ่มต้นบริการ</string>
<string name="shortcut_stop">หยุดบริการ</string>
<string name="shortcut_sos">ส่ง SOS</string>
<string name="channel_default">ช่องหลัก</string>
<string name="settings_id_title">หมายเลขอุปกรณ์</string> <string name="settings_id_title">หมายเลขอุปกรณ์</string>
<string name="settings_url_title">ท๊่อยู่ URL เซิร์ฟเวอร์</string> <string name="settings_url_title">ท๊่อยู่ URL เซิร์ฟเวอร์</string>
<string name="settings_url_summary">ท๊่อยู่ URL เซิร์ฟเวอร์ติดตาม</string> <string name="settings_url_summary">ท๊่อยู่ URL เซิร์ฟเวอร์ติดตาม</string>
@@ -16,24 +20,23 @@
<string name="settings_status_on">สิ้นสุด</string> <string name="settings_status_on">สิ้นสุด</string>
<string name="settings_status_off_summary">เริ่มทำงาน</string> <string name="settings_status_off_summary">เริ่มทำงาน</string>
<string name="settings_status_on_summary">หยุดทำงาน</string> <string name="settings_status_on_summary">หยุดทำงาน</string>
<string name="settings_provider_title">ัวบอกตำแหน่ง</string> <string name="settings_accuracy_title">ตำแหน่ง-ความแม่นยำ</string>
<string name="settings_provider_summary">แห่งของข้อมูลบอกตำแหน่ง</string> <string name="settings_accuracy_summary">ตำแห่ง-ต้องการความแม่นยำ</string>
<string name="settings_provider_gps">ใช้จาก GPS</string> <string name="settings_accuracy_high">สูงมาก</string>
<string name="settings_provider_network">ใช้จากข้อมูลเครือข่าย</string> <string name="settings_accuracy_medium">ปานกลาง</string>
<string name="settings_provider_mixed">ใช้ร่วมกันทั้งสองแบบ</string> <string name="settings_accuracy_low">ต่ำ</string>
<string name="settings_foreground_title">ทำงานเบื้องหน้า</string> <string name="settings_foreground_title">ทำงานเบื้องหน้า</string>
<string name="settings_foreground_summary">เพิ่มความลำดับสำคัญการทำงาน</string> <string name="settings_foreground_summary">เพิ่มความลำดับสำคัญการทำงาน</string>
<string name="menu_status">สถานะ</string> <string name="menu_status">สถานะ</string>
<string name="menu_about">เกี่ยวกับ</string>
<string name="menu_shortcuts">เพิ่มชอร์ตคัท</string> <string name="menu_shortcuts">เพิ่มชอร์ตคัท</string>
<string name="menu_clear">ล้างข้อมูล</string> <string name="menu_clear">ล้างข้อมูล</string>
<string name="about_description">Real time GPS tracker for Android devices. Compatible with Traccar Server and other tracking systems.</string> <string name="status_service_create">บริการเริ่มต้นแล้ว</string>
<string name="about_license">This application is free and open source, source code is licensed under Apache License Version 2.0 and available on GitHub.</string> <string name="status_service_destroy">หยุดให้บริการแล้ว</string>
<string name="about_web">For more information visit\nwww.traccar.org/client</string>
<string name="status_send_success">ส่งข้อมูลเรียบร้อย</string> <string name="status_send_success">ส่งข้อมูลเรียบร้อย</string>
<string name="status_send_fail">ส่งข้อมูลล้มเหลว</string> <string name="status_send_fail">ส่งข้อมูลล้มเหลว</string>
<string name="status_location_update">ปรับปรุงตำแหน่ง</string> <string name="status_location_update">ปรับปรุงตำแหน่ง</string>
<string name="status_connectivity_change">เปลี่ยนแปลงการเชื่อมต่อ</string> <string name="status_network_online">เน็ต-ออนไลน์</string>
<string name="status_network_offline">เน็ต-ออฟไลน์</string>
<string name="hidden_app_name">ตั้งค่าอุปกรณ์</string> <string name="hidden_app_name">ตั้งค่าอุปกรณ์</string>
<string name="hidden_alert">The app has been hidden. To open it again please dial 8722227 (TRACCAR).</string> <string name="hidden_alert">The app has been hidden. To open it again please dial 8722227 (TRACCAR).</string>
<string name="error_msg_invalid_url">โปรดใส่ค่า http:// or https:// URL ที่ถูกต้อง</string> <string name="error_msg_invalid_url">โปรดใส่ค่า http:// or https:// URL ที่ถูกต้อง</string>
+13 -10
Просмотреть файл
@@ -2,6 +2,10 @@
<resources> <resources>
<string name="app_name">Traccar Yönetim</string> <string name="app_name">Traccar Yönetim</string>
<string name="app_logo">Traccar</string> <string name="app_logo">Traccar</string>
<string name="shortcut_start">Servisi Başlat</string>
<string name="shortcut_stop">Servisi Durdur</string>
<string name="shortcut_sos">Yardım Çağrısı Gönder</string>
<string name="channel_default">Birincil Kanal</string>
<string name="settings_id_title">Cihaz Kimliği</string> <string name="settings_id_title">Cihaz Kimliği</string>
<string name="settings_url_title">Sunucu adresi</string> <string name="settings_url_title">Sunucu adresi</string>
<string name="settings_url_summary">Takip sunucusu adresi</string> <string name="settings_url_summary">Takip sunucusu adresi</string>
@@ -16,24 +20,23 @@
<string name="settings_status_on">Durdur</string> <string name="settings_status_on">Durdur</string>
<string name="settings_status_off_summary">Servis Durdu</string> <string name="settings_status_off_summary">Servis Durdu</string>
<string name="settings_status_on_summary">Servis Çalışıyor</string> <string name="settings_status_on_summary">Servis Çalışıyor</string>
<string name="settings_provider_title">Yer sağlayıcı</string> <string name="settings_accuracy_title">Yer Doğruluğu</string>
<string name="settings_provider_summary">Yer bilgisi kaynağı</string> <string name="settings_accuracy_summary">İstenilen Yer Doğruluğu</string>
<string name="settings_provider_gps">GPS sağlayıcı</string> <string name="settings_accuracy_high">Yüksek</string>
<string name="settings_provider_network">Network sağlayıcı</string> <string name="settings_accuracy_medium">Orta</string>
<string name="settings_provider_mixed">Karışık sağlayıcı</string> <string name="settings_accuracy_low">Alçak</string>
<string name="settings_foreground_title">Önplan servisi</string> <string name="settings_foreground_title">Önplan servisi</string>
<string name="settings_foreground_summary">Servis önceliği arttır</string> <string name="settings_foreground_summary">Servis önceliği arttır</string>
<string name="menu_status">Durum</string> <string name="menu_status">Durum</string>
<string name="menu_about">Hakkında</string>
<string name="menu_shortcuts">Kısayol ekle</string> <string name="menu_shortcuts">Kısayol ekle</string>
<string name="menu_clear">Temizle</string> <string name="menu_clear">Temizle</string>
<string name="about_description">Android cihazlar için gerçek zamanlı takip uygulaması. Traccar sunucuları ve diğer takip sistemleriyle uyumlu.</string> <string name="status_service_create">Servis Başlatıldı</string>
<string name="about_license">Bu uygulama ücretsiz ve acık kaynaklıdır , kaynak kodu lisansı Apache License Version 2.0 altında lisanslı ve GitHub üzerinden ulaşılabilir.</string> <string name="status_service_destroy">Servis Durduruldu</string>
<string name="about_web">Daha fazla bilgi için http:\\www.traccar.org/client adresini ziyaret edin.</string>
<string name="status_send_success">Gönderme başarılı</string> <string name="status_send_success">Gönderme başarılı</string>
<string name="status_send_fail">Gönderme başarısız</string> <string name="status_send_fail">Gönderme başarısız</string>
<string name="status_location_update">Yer güncellendi</string> <string name="status_location_update">Yer güncellendi</string>
<string name="status_connectivity_change">Bağlantı değişimi</string> <string name="status_network_online">Ağa Bağlandı</string>
<string name="status_network_offline">Ağ Bağlantısı Kesildi</string>
<string name="hidden_app_name">Cihaz Ayarları</string> <string name="hidden_app_name">Cihaz Ayarları</string>
<string name="hidden_alert">Bu uygulama arkaplanda gizli olarak çalışmaktadır. Tekrar görmek için lütfen 8722227 tuşlayın. Arayın. (TRACCAR)</string> <string name="hidden_alert">Bu uygulama arkaplanda gizli olarak çalışmaktadır. Tekrar görmek için lütfen 8722227 tuşlayın. Arayın. (TRACCAR)</string>
<string name="error_msg_invalid_url">Lütfen geçerli bir adres girin http:// veya https://</string> <string name="error_msg_invalid_url">Lütfen geçerli bir adres girin http:// veya https://</string>

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше