Overhauled setup, updated api30+ workaround.

This commit is contained in:
Electric
2021-06-08 16:00:16 +03:00
parent afb013a1bd
commit e7e7323135
20 changed files with 201 additions and 257 deletions
+1
View File
@@ -3,6 +3,7 @@
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
@@ -52,11 +52,6 @@
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".API30Activity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" />
<receiver
android:name=".Starter"
android:enabled="true"
@@ -1,57 +0,0 @@
package com.dosse.airpods;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import java.util.Timer;
import java.util.TimerTask;
public class API30Activity extends AppCompatActivity {
private Timer timer;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_api30);
// Allow button clicked, ask for permissions
findViewById(R.id.allowBtn).setOnClickListener(view -> {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
});
// Wait for permissions to be granted.
// When they are granted, go to MainActivity.
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run () {
if (ContextCompat.checkSelfPermission(API30Activity.this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) == PackageManager.PERMISSION_GRANTED) {
timer.cancel();
startActivity(new Intent(API30Activity.this, MainActivity.class));
finish();
}
}
}, 0, 100);
}
// Activity destroyed (or screen rotated). destroy the timer too
@Override
protected void onDestroy () {
super.onDestroy();
if (timer != null)
timer.cancel();
}
}
@@ -4,45 +4,32 @@ import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.PowerManager;
import android.provider.Settings;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import java.util.Objects;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
public class IntroActivity extends AppCompatActivity {
private Timer timer;
private TextView msg;
private Button btn;
@SuppressLint("BatteryLife")
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intro);
// Allow button clicked, ask for permissions
findViewById(R.id.allowBtn).setOnClickListener(view -> {
requestPermissions(new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, 1); // Location (for BLE)
// Run in background
try {
if (!Objects.requireNonNull(getSystemService(PowerManager.class)).isIgnoringBatteryOptimizations(getPackageName())) {
Intent intent = new Intent();
getSystemService(Context.POWER_SERVICE);
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
}
} catch (Throwable ignored) {
}
});
msg = findViewById(R.id.permsMsg);
btn = findViewById(R.id.permsBtn);
// Wait for permissions to be granted.
// When they are granted, go to MainActivity.
@@ -50,23 +37,11 @@ public class IntroActivity extends AppCompatActivity {
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run () {
boolean ok = true;
initScreen();
try {
if (!Objects.requireNonNull(getSystemService(PowerManager.class)).isIgnoringBatteryOptimizations(getPackageName()))
ok = false;
} catch (Throwable ignored) {
}
if (ContextCompat.checkSelfPermission(IntroActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED)
ok = false;
if (ok) {
if (PermissionUtils.checkAllPermissions(IntroActivity.this)) {
timer.cancel();
if (Build.VERSION.SDK_INT >= 30)
startActivity(new Intent(IntroActivity.this, API30Activity.class));
else
startActivity(new Intent(IntroActivity.this, MainActivity.class));
startActivity(new Intent(IntroActivity.this, MainActivity.class));
finish();
}
}
@@ -82,4 +57,44 @@ public class IntroActivity extends AppCompatActivity {
timer.cancel();
}
private int getPermissionState () {
if (!PermissionUtils.getBatteryOptimizationsPermission(this))
return 1;
else if (!PermissionUtils.getFineLocationPermission(this))
return 2;
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) if (!PermissionUtils.getBackgroundLocationPermission(this))
return 3;
return 0;
}
@SuppressLint("BatteryLife")
private void initScreen () {
int step = getPermissionState();
int numOfSteps = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) ? 3 : 2;
switch (step) {
case 1:
msg.setText(String.format(Locale.getDefault(), "Step %d/%d: %s", step, numOfSteps, getString(R.string.intro_bat_perm)));
btn.setOnClickListener(view -> {
Intent intent = new Intent();
getSystemService(Context.POWER_SERVICE);
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
});
break;
case 2:
msg.setText(String.format(Locale.getDefault(), "Step %d/%d: %s", step, numOfSteps, getString(R.string.intro_loc1_perm)));
btn.setOnClickListener(view -> requestPermissions(new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, 101)); // Location (for BLE)
break;
case 3:
msg.setText(String.format(Locale.getDefault(), "Step %d/%d: %s", step, numOfSteps, getString(R.string.intro_loc2_perm)));
btn.setOnClickListener(view -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) requestPermissions(new String[] {Manifest.permission.ACCESS_BACKGROUND_LOCATION}, 102);
});
break;
}
}
}
@@ -1,22 +1,18 @@
package com.dosse.airpods;
import android.Manifest;
import android.annotation.SuppressLint;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.PowerManager;
import android.view.Menu;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import java.util.Objects;
@@ -35,22 +31,7 @@ public class MainActivity extends AppCompatActivity {
return;
}
// Check if all permissions have been granted
boolean ok = true;
try {
if (!Objects.requireNonNull(getSystemService(PowerManager.class)).isIgnoringBatteryOptimizations(getPackageName()))
ok = false;
} catch (Throwable ignored) {
}
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED)
ok = false;
if (Build.VERSION.SDK_INT >= 30) if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) == PackageManager.PERMISSION_DENIED)
ok = false;
if (ok) {
if (PermissionUtils.checkAllPermissions(this)) {
Starter.startPodsService(getApplicationContext());
//Warn MIUI users that their rom has known issues
try {
@@ -0,0 +1,40 @@
package com.dosse.airpods;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.PowerManager;
import androidx.annotation.RequiresApi;
import androidx.core.content.ContextCompat;
import java.util.Objects;
public class PermissionUtils {
public static boolean getBatteryOptimizationsPermission (Context context) {
try {
return Objects.requireNonNull(context.getSystemService(PowerManager.class)).isIgnoringBatteryOptimizations(context.getPackageName());
} catch (Throwable ignored) {
return true;
}
}
public static boolean getFineLocationPermission (Context context) {
return ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
}
@RequiresApi(api = Build.VERSION_CODES.Q)
public static boolean getBackgroundLocationPermission (Context context) {
return ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_BACKGROUND_LOCATION) == PackageManager.PERMISSION_GRANTED;
}
public static boolean checkAllPermissions (Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
return getBatteryOptimizationsPermission(context) && getFineLocationPermission(context) && getBackgroundLocationPermission(context);
else
return getBatteryOptimizationsPermission(context) && getFineLocationPermission(context);
}
}
@@ -3,6 +3,7 @@ package com.dosse.airpods;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
@@ -418,7 +419,7 @@ public class PodsService extends Service {
public void onCreate () {
super.onCreate();
if (Build.VERSION.SDK_INT >= 30)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
startForeground(101, createNotification());
IntentFilter intentFilter = new IntentFilter();
@@ -587,18 +588,28 @@ public class PodsService extends Service {
}
// Only for API30+
// Strings are hardcodded for now because I'm too lazy
@RequiresApi(api = Build.VERSION_CODES.O)
private Notification createNotification () {
final String notChannelID = "FOREGROUND_ID";
NotificationManager notManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel notChannel = new NotificationChannel("API30", "Background Notification", NotificationManager.IMPORTANCE_MIN);
NotificationChannel notChannel = new NotificationChannel(notChannelID, "Background Notification", NotificationManager.IMPORTANCE_MIN);
notManager.createNotificationChannel(notChannel);
Notification.Builder builder = new Notification.Builder(this, "API30")
Intent notIntent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName())
.putExtra(Settings.EXTRA_CHANNEL_ID, notChannelID);
PendingIntent notPendingIntent = PendingIntent.getActivity(this, 1110, notIntent,0);
Notification.Builder builder = new Notification.Builder(this, notChannelID)
.setSmallIcon(R.drawable.pod_case)
.setContentText("Running in the background");
.setContentTitle("Running in the background")
.setContentText("Click to open notification Settings")
.setContentIntent(notPendingIntent)
.setOngoing(true);
return builder.build();
}
@@ -1,51 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/padding_default">
<ImageView
android:id="@+id/introImg1"
android:layout_width="match_parent"
android:layout_height="144dp"
android:layout_marginBottom="24dp"
android:src="@drawable/icon"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/intro1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:gravity="center"
android:text="@string/intro1"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large" />
<TextView
android:id="@+id/intro2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:gravity="center"
android:text="@string/intro3" />
<Button
android:id="@+id/allowBtn"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/colorAccent"
android:text="@string/settings" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -13,7 +13,7 @@
android:padding="@dimen/padding_default">
<ImageView
android:id="@+id/introImg1"
android:id="@+id/introImg"
android:layout_width="match_parent"
android:layout_height="144dp"
android:layout_marginBottom="24dp"
@@ -21,29 +21,36 @@
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/intro1"
android:id="@+id/introTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:gravity="center"
android:text="@string/intro1"
android:text="@string/intro_title"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large" />
<TextView
android:id="@+id/intro2"
android:id="@+id/introMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:layout_marginBottom="6dp"
android:gravity="center"
android:text="@string/intro2" />
android:text="@string/intro_message" />
<TextView
android:id="@+id/permsMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:gravity="center" />
<Button
android:id="@+id/allowBtn"
android:id="@+id/permsBtn"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/colorAccent"
android:text="@string/introAllow" />
android:text="@string/intro_allow" />
</LinearLayout>
@@ -1,14 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="intro1">Diese App erlaubt es dir, den Status deiner AirPods auf einem beliebigen Android-Gerät zu überprüfen</string>
<string name="intro2">Für den Dienst benötigen wir die Berechtigung zur Verwendung von Bluetooth LE (Standort) und die Berechtigung zum Betrieb im Hintergrund</string>
<string name="introAllow">Erlauben</string>
<string name="intro_title">Diese App erlaubt es dir, den Status deiner AirPods auf einem beliebigen Android-Gerät zu überprüfen</string>
<string name="intro_message">Für den Dienst benötigen wir die Berechtigung zur Verwendung von Bluetooth LE (Standort) und die Berechtigung zum Betrieb im Hintergrund</string>
<string name="intro_allow">Erlauben</string>
<string name="main_description">Die App zeigt eine Benachrichtigung, wenn deine AirPods verbunden sind</string>
<string name="hide_message">Du kannst die App jetzt verstecken, wenn du möchtest</string>
<string name="settings">Einstellungen</string>
<string name="miui_warning">MIUI detected</string>
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
<string name="miui_warning_continue">Continue</string>
<string name="miui_warning">MIUI erkannt</string>
<string name="miui_warning_continue">Fortsetzen</string>
<string name="noBtText">Es sieht so aus, als hätte dieses Gerät kein Bluetooth LE</string>
<string name="locationDisabledText">Du musst Standortinformationen aktivieren, damit OpenPods den Status deiner AirPods auslesen kann</string>
@@ -27,6 +28,5 @@
<string name="about_dev">Entwickelt von Federico Dossena und Itai Levin</string>
<string name="website">Webseite</string>
<string name="github">Github</string>
<string name="donate">Spenden</string>
</resources>
@@ -1,14 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="intro1">Esta aplicación te permite ver el estado de tus AirPods en cualquier dispositivo Android.</string>
<string name="intro2">Para operar necesitamos permiso para usar Bluetooth LE (Localización) y permiso para ejecutar la app en segundo plano.</string>
<string name="introAllow">Permitir</string>
<string name="intro_title">Esta aplicación te permite ver el estado de tus AirPods en cualquier dispositivo Android.</string>
<string name="intro_message">Para operar necesitamos permiso para usar Bluetooth LE (Localización) y permiso para ejecutar la app en segundo plano.</string>
<string name="intro_allow">Permitir</string>
<string name="main_description">Esta aplicación mostrará una notificación cuando tus AirPods estén conectados.</string>
<string name="hide_message">Puedes ocultar la app si lo prefieres.</string>
<string name="settings">Ajustes</string>
<string name="miui_warning">MIUI detected</string>
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
<string name="miui_warning_continue">Continue</string>
<string name="miui_warning">MIUI detectado</string>
<string name="miui_warning_continue">Continuar</string>
<string name="noBtText">Parece que éste dispositivo no tiene Bluetooth LE.</string>
<string name="locationDisabledText">Necesitas activar la Localización para permitir que OpenPods lea el estado.</string>
@@ -24,6 +25,5 @@
<string name="about_dev">Desarrollado por Federico Dossena y Itai Levin</string>
<string name="website">Página web</string>
<string name="github">Github</string>
<string name="donate">Donar</string>
</resources>
@@ -1,14 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="intro1">Cette application vous permet de voir l\'état de vos AirPods sur n\'importe quel appareil Android.</string>
<string name="intro2">Pour opérer, nous avons besoin de votre permission pour utiliser Bluetooth LE (Localisation) et permission pour exécuter l\'application en arrière-plan.</string>
<string name="introAllow">Permettre</string>
<string name="intro_title">Cette application vous permet de voir l\'état de vos AirPods sur n\'importe quel appareil Android.</string>
<string name="intro_message">Pour opérer, nous avons besoin de votre permission pour utiliser Bluetooth LE (Localisation) et permission pour exécuter l\'application en arrière-plan.</string>
<string name="intro_allow">Permettre</string>
<string name="main_description">Cette application affichera une notification lorsque vos AirPods seront connectés.</string>
<string name="hide_message">Vous pouvez masquer cette application si vous voulez.</string>
<string name="settings">Réglages</string>
<string name="miui_warning">MIUI detected</string>
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
<string name="miui_warning_continue">Continue</string>
<string name="miui_warning">MIUI détecté</string>
<string name="miui_warning_continue">Continuer</string>
<string name="noBtText">Il semble que cet appareil ne dispose pas de Bluetooth LE.</string>
<string name="locationDisabledText">Vous devez activer la localisation pour permettre aux OpenPod de lire l\'état de vos AirPods.</string>
@@ -24,6 +25,5 @@
<string name="about_dev">Développé par Federico Dossena et Itai Levin</string>
<string name="website">Site web</string>
<string name="github">Github</string>
<string name="donate">Faire un don</string>
</resources>
@@ -1,11 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="intro1">Questa app consente di monitorare lo stato delle tue AirPods su Android</string>
<string name="intro2">Per funzionare, abbiamo bisogno dei permessi per Bluetooth LE (Posizione) e di esecuzione in background</string>
<string name="introAllow">Consenti</string>
<string name="intro_title">Questa app consente di monitorare lo stato delle tue AirPods su Android</string>
<string name="intro_message">Per funzionare, abbiamo bisogno dei permessi per Bluetooth LE (Posizione) e di esecuzione in background</string>
<string name="intro_allow">Consenti</string>
<string name="main_description">L\'app mostrerà una notifica quando le tue AirPods sono connesse</string>
<string name="hide_message">Puoi nascondere l\'app se vuoi</string>
<string name="settings">Impostazioni</string>
<string name="miui_warning">MIUI rilevata</string>
<string name="miui_warning_desc">La ROM di questo dispositivo ha dei problemi di compatibilità noti. Puoi continuare ma OpenPods potrebbe non funzionare correttamente.</string>
<string name="miui_warning_continue">Continua</string>
@@ -24,6 +26,5 @@
<string name="about_dev">Sviluppata da Federico Dossena e Itai Levin</string>
<string name="website">Sito web</string>
<string name="github">Github</string>
<string name="donate">Donazioni</string>
</resources>
@@ -1,11 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="intro1">אפליקציה זו מאפשרת לך לבדוק את המצב של האיירפודס שלך מכל מכשיר אנדרואיד</string>
<string name="intro2">כדי שאפליקציה זו תוכל לתפקד, הינך נדרש לאפשר גישה ל-Bluetooth LE (מיקום) ולריצה ברקע</string>
<string name="introAllow">אפשר</string>
<string name="intro_title">אפליקציה זו מאפשרת לך לבדוק את המצב של האיירפודס שלך מכל מכשיר אנדרואיד</string>
<string name="intro_message">כדי שאפליקציה זו תוכל לתפקד, הינך נדרש לאפשר גישה ל-Bluetooth LE (מיקום) ולריצה ברקע</string>
<string name="intro_allow">אפשר</string>
<string name="main_description">האפליקציה תשלח התראה כאשר האיירפודס מחוברות</string>
<string name="hide_message">אתה יכול להסתיר אפליקציה זו</string>
<string name="settings">הגדרות</string>
<string name="miui_warning">MIUI נמצא</string>
<string name="miui_warning_desc">למערכת ההפעלה על מכשיר זה יש בעיות תאימות ידועות עם האפליקציה. אתה יכול להמשיך להשתמש ב-OpenPods אך לא בטוח שדברים יעבדו כמו שצריך.</string>
<string name="miui_warning_continue">המשך</string>
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name" translatable="false">OpenPods</string>
<resources>
<string name="intro_title">이 앱을 통해 Android 기기에서 에어팟의 상태를 확인할 수 있습니다.</string>
<string name="intro_message">작동하려면 Bluetooth LE(위치)를 사용할 수 있는 권한과 백그라운드에서 실행할 수 있는 권한이 필요합니다.</string>
<string name="intro_allow">허용</string>
<string name="intro1">이 앱을 통해 Android 기기에서 에어팟의 상태를 확인할 수 있습니다.</string>
<string name="intro2">작동하려면 Bluetooth LE(위치)를 사용할 수 있는 권한과 백그라운드에서 실행할 수 있는 권한이 필요합니다.</string>
<string name="introAllow">허용</string>
<string name="main_description">앱에 에어팟이 연결되면 알림이 표시됩니다.</string>
<string name="hide_message">이 앱을 숨길 수 있습니다.</string>
<string name="settings">설정</string>
<string name="miui_warning">MIUI 발견됨</string>
<string name="miui_warning_desc">이 장치에서 실행 중인 ROM에 알려진 호환성 문제가 있습니다. 계속할 수는 있지만 OpenPod가 제대로 작동하지 않을 수 있습니다.</string>
<string name="miui_warning_continue">계속</string>
@@ -21,15 +21,13 @@
<string name="batterySaver_desc">Bluetooth에서 배터리를 많이 사용하는 경우 이 옵션을 활성화하세요.</string>
<string name="hide">앱 숨기기</string>
<string name="hide_desc">실행 프로그램에서 이 앱 숨기기</string>
<string name="hide_dialog" tools:ignore="MissingTranslation">정말 계속하시겠습니까?</string>
<string name="hide_dialog_desc" tools:ignore="MissingTranslation">정말 이 앱을 숨기시겠습니까? 앱을 다시 설치해야 기능을 해제할 수 있습니다.</string>
<string name="hide_dialog_button" tools:ignore="MissingTranslation">숨기기</string>
<string name="hide_dialog">정말 계속하시겠습니까?</string>
<string name="hide_dialog_desc">정말 이 앱을 숨기시겠습니까? 앱을 다시 설치해야 기능을 해제할 수 있습니다.</string>
<string name="hide_dialog_button">숨기기</string>
<string name="hideClicked">아이콘이 곧 사라집니다</string>
<string name="about">정보</string>
<string name="about_dev">개발자 : Federico Dossena, Itai Levin</string>
<string name="website">웹사이트</string>
<string name="github">Github</string>
<string name="donate">후원하기</string>
<string name="fdroid" translatable="false">F-Droid</string>
</resources>
@@ -1,14 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="intro1">Met deze app kun je de status van je AirPods bekijken op elk Android-apparaat</string>
<string name="intro2">De app heeft toegang nodig tot Bluetooth LE (locatie), en moet op de achtergrond worden uitgevoerd</string>
<string name="introAllow">Toestaan</string>
<string name="intro_title">Met deze app kun je de status van je AirPods bekijken op elk Android-apparaat</string>
<string name="intro_message">De app heeft toegang nodig tot Bluetooth LE (locatie), en moet op de achtergrond worden uitgevoerd</string>
<string name="intro_allow">Toestaan</string>
<string name="main_description">De app toont een melding zodra je je AirPods verbindt</string>
<string name="hide_message">Als je wilt, kun je deze app verbergen</string>
<string name="settings">Instellingen</string>
<string name="miui_warning">MIUI detected</string>
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
<string name="miui_warning_continue">Continue</string>
<string name="miui_warning">MIUI gedetecteerd</string>
<string name="miui_warning_continue">Doorgaan met</string>
<string name="noBtText">Het lijkt erop dat dit apparaat niet beschikt over Bluetooth LE</string>
<string name="locationDisabledText">Schakel je locatie in zodat OpenPods de status kan uitlezen</string>
@@ -24,6 +25,5 @@
<string name="about_dev">Gemaakt door Federico Dossena en Itai Levin</string>
<string name="website">Website</string>
<string name="github">GitHub</string>
<string name="donate">Doneren</string>
</resources>
@@ -1,14 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="intro1">Это приложение позволяет Вам проверить статус ваших AirPods на любом Android-устройстве</string>
<string name="intro2">Для работы нам нужно Bluetooth LE(местоположение) и разрешение на запуск в фоновом режиме</string>
<string name="introAllow">Разрешить</string>
<string name="intro_title">Это приложение позволяет Вам проверить статус ваших AirPods на любом Android-устройстве</string>
<string name="intro_message">Для работы нам нужно Bluetooth LE(местоположение) и разрешение на запуск в фоновом режиме</string>
<string name="intro_allow">Разрешить</string>
<string name="main_description">Приложение покажет уведомление, когда будет установлено соединение с AirPods</string>
<string name="hide_message">Вы можете скрыть это приложение, если хотите</string>
<string name="settings">Настройки</string>
<string name="miui_warning">MIUI detected</string>
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
<string name="miui_warning_continue">Continue</string>
<string name="miui_warning">MIUI обнаружено</string>
<string name="miui_warning_continue">Продолжать</string>
<string name="noBtText">Похоже, что Bluetooth LE не поддерживается на Вашем устройстве</string>
<string name="locationDisabledText">Вам нужно включить местоположение, чтобы разрешить OpenPods читать статус</string>
@@ -24,6 +25,5 @@
<string name="about_dev">Разработано Federico Dossena и Itai Levin</string>
<string name="website">Сайт</string>
<string name="github">Github</string>
<string name="donate">Поддержать</string>
</resources>
@@ -1,14 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="intro1">Цей додаток дозволяє Вам перевірити статус ваших AirPods на будь-якому Android-пристрої</string>
<string name="intro2">Для роботи ми використовуємо Bluetooth LE (місцезнаходження) та дозвіл на роботу додатку в фоновому режимі</string>
<string name="introAllow">Дозволити</string>
<string name="intro_title">Цей додаток дозволяє Вам перевірити статус ваших AirPods на будь-якому Android-пристрої</string>
<string name="intro_message">Для роботи ми використовуємо Bluetooth LE (місцезнаходження) та дозвіл на роботу додатку в фоновому режимі</string>
<string name="intro_allow">Дозволити</string>
<string name="main_description">Цей додаток покаже сповіщення, коли Ваші AirPods будуть підключені</string>
<string name="hide_message">Ви можете сховати цей додаток, якщо бажаєте</string>
<string name="settings">Налаштування</string>
<string name="miui_warning">MIUI detected</string>
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
<string name="miui_warning_continue">Continue</string>
<string name="miui_warning">MIUI виявлено</string>
<string name="miui_warning_continue">продовжувати</string>
<string name="noBtText">Схоже, що цей пристрій не підтримує Bluetooth LE</string>
<string name="locationDisabledText">Вам потрібно ввімкнути місцезнаходження, для того, щоб дозволити OpenPods читати статус</string>
@@ -24,6 +25,5 @@
<string name="about_dev">Розроблено Federico Dossena й Itai Levin</string>
<string name="website">Сайт</string>
<string name="github">Github</string>
<string name="donate">Підтримати</string>
</resources>
@@ -1,14 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="intro1">此应用可以让您在任何安卓设备上查看 AirPods 的状态</string>
<string name="intro2">我们需要蓝牙、定位以及在后台运行的权限来正常运作</string>
<string name="introAllow">允许</string>
<string name="intro_title">此应用可以让您在任何安卓设备上查看 AirPods 的状态</string>
<string name="intro_message">我们需要蓝牙、定位以及在后台运行的权限来正常运作</string>
<string name="intro_allow">允许</string>
<string name="main_description">当您的 AirPods 接入时,我们会在通知栏显示通知</string>
<string name="hide_message">您可以隐藏此应用</string>
<string name="settings">Settings</string>
<string name="miui_warning">MIUI detected</string>
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
<string name="miui_warning_continue">Continue</string>
<string name="noBtText">看起来您的设备并不支持蓝牙</string>
<string name="locationDisabledText">您需要开启定位来让 OpenPods 读取状态</string>
@@ -24,6 +21,5 @@
<string name="about_dev">由 Federico Dossena 和 Itai Levin 开发</string>
<string name="website">网站</string>
<string name="github">Github</string>
<string name="donate">捐赠</string>
</resources>
+14 -9
View File
@@ -2,16 +2,21 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name" translatable="false">OpenPods</string>
<string name="intro1">This app lets you check the status of your AirPods on any Android device</string>
<string name="intro2">To operate, we need permission to use Bluetooth LE (Location) and permission to run in background</string>
<string name="intro3" translatable="false">In Android 11 and above we need to change location permission to "Allow all the time"</string>
<string name="introAllow">Allow</string>
<string name="intro_title">This app lets you check the status of your AirPods on any Android device</string>
<string name="intro_message">To operate, we need permission to use Bluetooth LE (Location) and permission to run in background</string>
<string name="intro_allow">Allow</string>
<string name="intro_step" translatable="false">Step</string>
<string name="intro_bat_perm" translatable="false">Battery Optimization</string>
<string name="intro_loc1_perm" translatable="false">Location Permission</string>
<string name="intro_loc2_perm" translatable="false">Background Location Permission</string>
<string name="main_description">The app will show a notification when your AirPods are connected</string>
<string name="hide_message">You can hide this app if you want</string>
<string name="settings">Settings</string>
<string name="miui_warning">MIUI detected</string>
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
<string name="miui_warning_continue">Continue</string>
<string name="settings" tools:ignore="MissingTranslation">Settings</string>
<string name="miui_warning" tools:ignore="MissingTranslation">MIUI detected</string>
<string name="miui_warning_desc" tools:ignore="MissingTranslation">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
<string name="miui_warning_continue" tools:ignore="MissingTranslation">Continue</string>
<string name="noBtText">It looks like this device doesn\'t have Bluetooth LE</string>
<string name="locationDisabledText">You need to turn on Location to allow OpenPods to read the status</string>
@@ -30,7 +35,7 @@
<string name="about_dev">Developed by Federico Dossena and Itai Levin</string>
<string name="website">Website</string>
<string name="github">Github</string>
<string name="github" translatable="false">Github</string>
<string name="donate">Donate</string>
<string name="fdroid" translatable="false">F-Droid</string>
</resources>