Merge remote-tracking branch 'origin/development-stable'

This commit is contained in:
Jens 2023-07-30 22:24:40 +02:00
commit 4c66fe906e
74 changed files with 1009 additions and 17 deletions

View File

@ -11,8 +11,8 @@ android {
compileSdkVersion 31 compileSdkVersion 31
buildToolsVersion '29.0.2' buildToolsVersion '29.0.2'
useLibrary 'org.apache.http.legacy' useLibrary 'org.apache.http.legacy'
versionCode 132 versionCode 133
versionName "1.7.16" versionName "1.7.17"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
@ -39,6 +39,12 @@ android {
targetSdkVersion 31 targetSdkVersion 31
} }
/*
targetSdkVersion is kept at 28 for as long as possible.
If raised wifi cannot be switched on or off anymore without root permissions.
In the Google version I'm forced to raise the value regularly.
*/
fdroidFlavor fdroidFlavor
{ {
dimension "version" dimension "version"

View File

@ -93,6 +93,7 @@ public class Actions
Miscellaneous.logEvent("w", "createNotification", "Creating notification with title " + elements[0] + " and text " + elements[1], 3); Miscellaneous.logEvent("w", "createNotification", "Creating notification with title " + elements[0] + " and text " + elements[1], 3);
// Create a new notification ID each time
int notificationId = Math.round(Calendar.getInstance().getTimeInMillis()/1000); int notificationId = Math.round(Calendar.getInstance().getTimeInMillis()/1000);
try try
@ -2272,7 +2273,7 @@ public class Actions
public static void startPhoneCall(Context context, String phoneNumber) public static void startPhoneCall(Context context, String phoneNumber)
{ {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber)); Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + Uri.encode(phoneNumber)));
// intent.setClassName("com.android.phone","com.android.phone.OutgoingCallBroadcaster"); // intent.setClassName("com.android.phone","com.android.phone.OutgoingCallBroadcaster");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_FROM_BACKGROUND); intent.addFlags(Intent.FLAG_FROM_BACKGROUND);

View File

@ -39,8 +39,10 @@ public class ActivityControlCenter extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_control_center); setContentView(R.layout.activity_control_center);
bVolumeTest = (Button) findViewById(R.id.bVolumeTest); bVolumeTest = (Button) findViewById(R.id.bVolumeTest);
bVolumeTest.setOnClickListener(new View.OnClickListener() bVolumeTest.setOnClickListener(new View.OnClickListener()
{ {
@ -384,6 +386,7 @@ public class ActivityControlCenter extends Activity
protected void onResume() protected void onResume()
{ {
super.onResume(); super.onResume();
Miscellaneous.setDisplayLanguage(this);
String folder = Miscellaneous.getWriteableFolder(); String folder = Miscellaneous.getWriteableFolder();
if (folder != null && folder.length() > 0) if (folder != null && folder.length() > 0)

View File

@ -21,6 +21,7 @@ public class ActivityDisplayLongMessage extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_display_long_message); setContentView(R.layout.activity_display_long_message);
tvMessageTitle = (TextView)findViewById(R.id.tvMessageTitle); tvMessageTitle = (TextView)findViewById(R.id.tvMessageTitle);

View File

@ -13,6 +13,7 @@ public class ActivityHelp extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(layout.activity_help_text); setContentView(layout.activity_help_text);
TextView tvHelpTextEnergySaving = (TextView) findViewById(R.id.tvHelpTextEnergySaving); TextView tvHelpTextEnergySaving = (TextView) findViewById(R.id.tvHelpTextEnergySaving);

View File

@ -44,7 +44,7 @@ public class ActivityMainPoi extends ActivityGeneric
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(ActivityMainPoi.this); Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.main_poi_layout); setContentView(R.layout.main_poi_layout);
instance = this; instance = this;
@ -108,6 +108,13 @@ public class ActivityMainPoi extends ActivityGeneric
this.storeServiceReferenceInVariable(); this.storeServiceReferenceInVariable();
} }
@Override
protected void onResume()
{
super.onResume();
Miscellaneous.setDisplayLanguage(this);
}
private void buttonAddPoi() private void buttonAddPoi()
{ {
poiToEdit = null; poiToEdit = null;

View File

@ -40,7 +40,7 @@ public class ActivityMainProfiles extends ActivityGeneric
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(ActivityMainProfiles.this); Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.main_profile_layout); setContentView(R.layout.main_profile_layout);
instance = this; instance = this;
@ -155,6 +155,13 @@ public class ActivityMainProfiles extends ActivityGeneric
} }
} }
@Override
protected void onResume()
{
super.onResume();
Miscellaneous.setDisplayLanguage(this);
}
private AlertDialog getProfileDialog(final Profile profile) private AlertDialog getProfileDialog(final Profile profile)
{ {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

View File

@ -48,7 +48,7 @@ public class ActivityMainRules extends ActivityGeneric
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(ActivityMainRules.this); Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.main_rule_layout); setContentView(R.layout.main_rule_layout);
instance = this; instance = this;
@ -154,6 +154,13 @@ public class ActivityMainRules extends ActivityGeneric
return v; return v;
} }
} }
@Override
protected void onResume()
{
super.onResume();
Miscellaneous.setDisplayLanguage(this);
}
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) protected void onActivityResult(int requestCode, int resultCode, Intent data)

View File

@ -55,7 +55,7 @@ public class ActivityMainScreen extends ActivityGeneric
public void onCreate(Bundle savedInstanceState) public void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(ActivityMainScreen.this); Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.main_overview_layout); setContentView(R.layout.main_overview_layout);
activityMainScreenInstance = this; activityMainScreenInstance = this;
@ -434,7 +434,7 @@ public class ActivityMainScreen extends ActivityGeneric
else else
activityMainScreenInstance.checkForNews(); activityMainScreenInstance.checkForNews();
if(BuildConfig.FLAVOR.equals("apkFlavor") && Settings.automaticUpdateCheck) if(BuildConfig.FLAVOR.equals(AutomationService.flavor_name_apk) && Settings.automaticUpdateCheck)
{ {
Calendar now = Calendar.getInstance(); Calendar now = Calendar.getInstance();
if (Settings.lastUpdateCheck == Settings.default_lastUpdateCheck || now.getTimeInMillis() >= Settings.lastUpdateCheck + (long)(Settings.updateCheckFrequencyDays * 24 * 60 * 60 * 1000)) if (Settings.lastUpdateCheck == Settings.default_lastUpdateCheck || now.getTimeInMillis() >= Settings.lastUpdateCheck + (long)(Settings.updateCheckFrequencyDays * 24 * 60 * 60 * 1000))
@ -571,6 +571,7 @@ public class ActivityMainScreen extends ActivityGeneric
protected void onResume() protected void onResume()
{ {
super.onResume(); super.onResume();
Miscellaneous.setDisplayLanguage(this);
toggleService.setChecked(AutomationService.isMyServiceRunning(this)); toggleService.setChecked(AutomationService.isMyServiceRunning(this));
ActivityMainScreen.updateMainScreen(); ActivityMainScreen.updateMainScreen();

View File

@ -23,7 +23,7 @@ public class ActivityMainTabLayout extends TabActivity
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Settings.readFromPersistentStorage(ActivityMainTabLayout.this); Settings.readFromPersistentStorage(ActivityMainTabLayout.this);
Miscellaneous.setDisplayLanguage(ActivityMainTabLayout.this); Miscellaneous.setDisplayLanguage(this);
if(Settings.tabsPlacement == 1) if(Settings.tabsPlacement == 1)
setContentView(R.layout.main_tab_layout_tabs_at_bottom); setContentView(R.layout.main_tab_layout_tabs_at_bottom);
@ -65,6 +65,7 @@ public class ActivityMainTabLayout extends TabActivity
protected void onResume() protected void onResume()
{ {
super.onResume(); super.onResume();
Miscellaneous.setDisplayLanguage(this);
// Miscellaneous.logEvent("i", "NFC", "ActivityMainTabLayout.onResume().", 5); // Miscellaneous.logEvent("i", "NFC", "ActivityMainTabLayout.onResume().", 5);
NfcReceiver.checkIntentForNFC(this, getIntent()); NfcReceiver.checkIntentForNFC(this, getIntent());
// NfcReceiver.checkIntentForNFC(this, new Intent(this.getApplicationContext(), this.getClass())); // NfcReceiver.checkIntentForNFC(this, new Intent(this.getApplicationContext(), this.getClass()));

View File

@ -26,6 +26,7 @@ public class ActivityManageActionBrightnessSetting extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
setContentView(R.layout.activity_manage_action_brightness_settings); setContentView(R.layout.activity_manage_action_brightness_settings);
Miscellaneous.setDisplayLanguage(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
chkAutoBrightness = (CheckBox)findViewById(R.id.chkAutoBrightness); chkAutoBrightness = (CheckBox)findViewById(R.id.chkAutoBrightness);

View File

@ -259,6 +259,7 @@ public class ActivityManageActionCloseNotification extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_action_close_notification); setContentView(R.layout.activity_manage_action_close_notification);
etNotificationTitle = (EditText)findViewById(R.id.etNotificationTitle); etNotificationTitle = (EditText)findViewById(R.id.etNotificationTitle);

View File

@ -19,6 +19,7 @@ public class ActivityManageActionControlMedia extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_action_control_media); setContentView(R.layout.activity_manage_action_control_media);
rbMediaPlayPause = (RadioButton)findViewById(R.id.rbMediaPlayPause); rbMediaPlayPause = (RadioButton)findViewById(R.id.rbMediaPlayPause);

View File

@ -19,6 +19,7 @@ public class ActivityManageActionCopyToClipboard extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
this.setContentView(R.layout.activity_manage_action_copy_to_clipboard); this.setContentView(R.layout.activity_manage_action_copy_to_clipboard);
bSaveCopyToClipboard = (Button) findViewById(R.id.bSaveCopyToClipboard); bSaveCopyToClipboard = (Button) findViewById(R.id.bSaveCopyToClipboard);

View File

@ -24,6 +24,7 @@ public class ActivityManageActionCreateNotification extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_action_create_notification); setContentView(R.layout.activity_manage_action_create_notification);
etNotificationTitle = (EditText) findViewById(R.id.etNotificationTitle); etNotificationTitle = (EditText) findViewById(R.id.etNotificationTitle);

View File

@ -21,6 +21,7 @@ public class ActivityManageActionMakePhoneCall extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_action_make_phone_call); setContentView(R.layout.activity_manage_action_make_phone_call);
etTargetPhoneNumber = (EditText)findViewById(R.id.etTargetPhoneNumber); etTargetPhoneNumber = (EditText)findViewById(R.id.etTargetPhoneNumber);

View File

@ -26,6 +26,7 @@ public class ActivityManageActionPlaySound extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_action_play_sound); setContentView(R.layout.activity_manage_action_play_sound);
chkPlaySoundAlwaysPlay = (CheckBox)findViewById(R.id.chkPlaySoundAlwaysPlay); chkPlaySoundAlwaysPlay = (CheckBox)findViewById(R.id.chkPlaySoundAlwaysPlay);

View File

@ -28,6 +28,7 @@ public class ActivityManageActionRunExecutable extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_action_run_executable); setContentView(R.layout.activity_manage_action_run_executable);
chkRunExecAsRoot = (CheckBox)findViewById(R.id.chkRunExecAsRoot); chkRunExecAsRoot = (CheckBox)findViewById(R.id.chkRunExecAsRoot);

View File

@ -37,6 +37,7 @@ public class ActivityManageActionSendBroadcast extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_action_send_broadcast); setContentView(R.layout.activity_manage_action_send_broadcast);
etBroadcastToSend = (EditText)findViewById(R.id.etBroadcastToSend); etBroadcastToSend = (EditText)findViewById(R.id.etBroadcastToSend);

View File

@ -48,6 +48,7 @@ public class ActivityManageActionSendTextMessage extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
this.setContentView(R.layout.activity_manage_action_send_textmessage); this.setContentView(R.layout.activity_manage_action_send_textmessage);
etSendTextMessage = (EditText)findViewById(R.id.etSendTextMessage); etSendTextMessage = (EditText)findViewById(R.id.etSendTextMessage);

View File

@ -24,6 +24,7 @@ public class ActivityManageActionSetVariable extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
this.setContentView(R.layout.activity_manage_action_set_variable); this.setContentView(R.layout.activity_manage_action_set_variable);
etVariableSetKey = (EditText)findViewById(R.id.etVariableSetKey); etVariableSetKey = (EditText)findViewById(R.id.etVariableSetKey);

View File

@ -22,6 +22,7 @@ public class ActivityManageActionSpeakText extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
this.setContentView(R.layout.activity_manage_action_speak_text); this.setContentView(R.layout.activity_manage_action_speak_text);
etSpeakText = (EditText)findViewById(R.id.etTextToSpeak); etSpeakText = (EditText)findViewById(R.id.etTextToSpeak);

View File

@ -66,6 +66,7 @@ public class ActivityManageActionStartActivity extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_action_start_activity); setContentView(R.layout.activity_manage_action_start_activity);
lvIntentPairs = (ListView)findViewById(R.id.lvIntentPairs); lvIntentPairs = (ListView)findViewById(R.id.lvIntentPairs);

View File

@ -39,6 +39,7 @@ public class ActivityManageActionTriggerUrl extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
this.setContentView(R.layout.activity_manage_action_trigger_url); this.setContentView(R.layout.activity_manage_action_trigger_url);
etTriggerUrl = (EditText)findViewById(R.id.etTriggerUrl); etTriggerUrl = (EditText)findViewById(R.id.etTriggerUrl);

View File

@ -27,6 +27,7 @@ public class ActivityManageActionVibrate extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_action_vibrate); setContentView(R.layout.activity_manage_action_vibrate);
etVibratePattern = (EditText)findViewById(R.id.etVibratePattern); etVibratePattern = (EditText)findViewById(R.id.etVibratePattern);

View File

@ -27,6 +27,7 @@ public class ActivityManageActionWakeLock extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_action_wakelock); setContentView(R.layout.activity_manage_action_wakelock);
rbWakeLockActivate = (RadioButton)findViewById(R.id.rbWakeLockActivate); rbWakeLockActivate = (RadioButton)findViewById(R.id.rbWakeLockActivate);

View File

@ -23,6 +23,7 @@ public class ActivityManageActionWifi extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_action_wifi); setContentView(R.layout.activity_manage_action_wifi);
chkWifiRunAsRoot = (CheckBox)findViewById(R.id.chkWifiRunAsRoot); chkWifiRunAsRoot = (CheckBox)findViewById(R.id.chkWifiRunAsRoot);

View File

@ -59,6 +59,7 @@ public class ActivityManagePoi extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
this.setContentView(R.layout.activity_manage_specific_poi); this.setContentView(R.layout.activity_manage_specific_poi);
myLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); myLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

View File

@ -86,6 +86,7 @@ public class ActivityManageProfile extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
this.setContentView(R.layout.activity_manage_specific_profile); this.setContentView(R.layout.activity_manage_specific_profile);
checkBoxChangeSoundMode = (CheckBox)findViewById(R.id.checkBoxChangeSoundMode); checkBoxChangeSoundMode = (CheckBox)findViewById(R.id.checkBoxChangeSoundMode);

View File

@ -154,6 +154,7 @@ public class ActivityManageRule extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_specific_rule); setContentView(R.layout.activity_manage_specific_rule);
context = this; context = this;

View File

@ -32,6 +32,7 @@ public class ActivityManageTriggerBluetooth extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_bluetooth); setContentView(R.layout.activity_manage_trigger_bluetooth);
radioAnyBluetoothDevice = (RadioButton)findViewById(R.id.radioAnyBluetoothDevice); radioAnyBluetoothDevice = (RadioButton)findViewById(R.id.radioAnyBluetoothDevice);

View File

@ -28,6 +28,7 @@ public class ActivityManageTriggerBroadcast extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_broadcasts); setContentView(R.layout.activity_manage_trigger_broadcasts);
bBroadcastShowSuggestions = findViewById(R.id.bBroadcastShowSuggestions); bBroadcastShowSuggestions = findViewById(R.id.bBroadcastShowSuggestions);

View File

@ -20,6 +20,7 @@ public class ActivityManageTriggerCheckVariable extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_check_variable); setContentView(R.layout.activity_manage_trigger_check_variable);
etVariableKeyTrigger = (EditText) findViewById(R.id.etVariableKeyTrigger); etVariableKeyTrigger = (EditText) findViewById(R.id.etVariableKeyTrigger);

View File

@ -104,6 +104,7 @@ public class ActivityManageTriggerDeviceOrientation extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_device_orientation); setContentView(R.layout.activity_manage_trigger_device_orientation);
currentAzimuth = (TextView) findViewById(R.id.tvCurrentAzimuth); currentAzimuth = (TextView) findViewById(R.id.tvCurrentAzimuth);

View File

@ -39,6 +39,7 @@ public class ActivityManageTriggerNfc extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_nfc); setContentView(R.layout.activity_manage_trigger_nfc);
etNewNfcIdValue = (EditText)findViewById(R.id.etNewNfcIdValue); etNewNfcIdValue = (EditText)findViewById(R.id.etNewNfcIdValue);

View File

@ -258,6 +258,7 @@ public class ActivityManageTriggerNotification extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_notification); setContentView(R.layout.activity_manage_trigger_notification);
etNotificationTitle = (EditText)findViewById(R.id.etNotificationTitle); etNotificationTitle = (EditText)findViewById(R.id.etNotificationTitle);

View File

@ -35,6 +35,7 @@ public class ActivityManageTriggerPhoneCall extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_phone_call); setContentView(R.layout.activity_manage_trigger_phone_call);
etTriggerPhoneCallPhoneNumber = (EditText)findViewById(R.id.etTriggerPhoneCallPhoneNumber); etTriggerPhoneCallPhoneNumber = (EditText)findViewById(R.id.etTriggerPhoneCallPhoneNumber);

View File

@ -31,6 +31,7 @@ public class ActivityManageTriggerProfile extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_profile); setContentView(R.layout.activity_manage_trigger_profile);
bSaveTriggerProfile = (Button)findViewById(R.id.bSaveTriggerProfile); bSaveTriggerProfile = (Button)findViewById(R.id.bSaveTriggerProfile);

View File

@ -21,6 +21,7 @@ public class ActivityManageTriggerSubSystemState extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_subsystemstate); setContentView(R.layout.activity_manage_trigger_subsystemstate);
rbSubSystemStateWifi = (RadioButton)findViewById(R.id.rbSubSystemStateWifi); rbSubSystemStateWifi = (RadioButton)findViewById(R.id.rbSubSystemStateWifi);

View File

@ -26,6 +26,7 @@ public class ActivityManageTriggerTethering extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_tethering); setContentView(R.layout.activity_manage_trigger_tethering);
rbTetheringOn = (RadioButton) findViewById(R.id.rbTetheringOn); rbTetheringOn = (RadioButton) findViewById(R.id.rbTetheringOn);

View File

@ -35,6 +35,7 @@ public class ActivityManageTriggerTimeFrame extends Activity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_timeframe); setContentView(R.layout.activity_manage_trigger_timeframe);
startPicker = (TimePicker)findViewById(R.id.tpTimeFrameStart); startPicker = (TimePicker)findViewById(R.id.tpTimeFrameStart);

View File

@ -49,6 +49,7 @@ public class ActivityManageTriggerWifi extends Activity
protected void onCreate(@Nullable Bundle savedInstanceState) protected void onCreate(@Nullable Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_manage_trigger_wifi); setContentView(R.layout.activity_manage_trigger_wifi);
rbTriggerWifiConnected = (RadioButton) findViewById(R.id.rbTriggerWifiConnected); rbTriggerWifiConnected = (RadioButton) findViewById(R.id.rbTriggerWifiConnected);

View File

@ -79,6 +79,7 @@ public class ActivityPermissions extends Activity
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.permissions_activity); setContentView(R.layout.permissions_activity);
bCancelPermissions = (Button)findViewById(R.id.bCancelPermissions); bCancelPermissions = (Button)findViewById(R.id.bCancelPermissions);

View File

@ -16,6 +16,7 @@ public class ActivitySettings extends PreferenceActivity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
addPreferencesFromResource(layout.activity_settings); addPreferencesFromResource(layout.activity_settings);
if(BuildConfig.FLAVOR.equals(AutomationService.flavor_name_apk)) if(BuildConfig.FLAVOR.equals(AutomationService.flavor_name_apk))
@ -24,4 +25,11 @@ public class ActivitySettings extends PreferenceActivity
chkPrefUpdateCheck.setEnabled(true); chkPrefUpdateCheck.setEnabled(true);
} }
} }
@Override
protected void onResume()
{
super.onResume();
Miscellaneous.setDisplayLanguage(this);
}
} }

View File

@ -30,6 +30,7 @@ public class ActivityVolumeTest extends Activity
instance = this; instance = this;
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
setContentView(R.layout.activity_volume_calibration); setContentView(R.layout.activity_volume_calibration);
tvCurrentVolume = (TextView)findViewById(R.id.tvCurrentVolume); tvCurrentVolume = (TextView)findViewById(R.id.tvCurrentVolume);

View File

@ -4,7 +4,6 @@ import android.content.Context;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.util.Log; import android.util.Log;
import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
public class AsyncTasks public class AsyncTasks

View File

@ -12,8 +12,6 @@ import android.app.PendingIntent;
import android.app.Service; import android.app.Service;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.media.AudioManager; import android.media.AudioManager;
import android.os.Binder; import android.os.Binder;
import android.os.Build; import android.os.Build;
@ -22,7 +20,6 @@ import android.os.Environment;
import android.os.IBinder; import android.os.IBinder;
import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener; import android.speech.tts.TextToSpeech.OnInitListener;
import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
@ -39,7 +36,6 @@ import java.util.Calendar;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set;
@SuppressLint("NewApi") @SuppressLint("NewApi")
public class AutomationService extends Service implements OnInitListener public class AutomationService extends Service implements OnInitListener

View File

@ -760,7 +760,7 @@ public class Miscellaneous extends Service
else else
replacement = "unknownVariable"; replacement = "unknownVariable";
source = source.substring(0, pos1) + replacement + source.substring(pos2); source = source.substring(0, pos1) + replacement + source.substring(pos2 +1);
} }
// Miscellaneous.logEvent("i", "URL after replace", source); // Miscellaneous.logEvent("i", "URL after replace", source);
@ -2014,7 +2014,16 @@ public class Miscellaneous extends Service
{ {
if(!Settings.displayLanguage.equals(Settings.default_displayLanguage)) if(!Settings.displayLanguage.equals(Settings.default_displayLanguage))
{ {
Locale myLocale = new Locale(Settings.displayLanguage); Locale myLocale;
if(Settings.displayLanguage.contains("_"))
{
String[] parts = Settings.displayLanguage.split("_");
myLocale = new Locale(parts[0], parts[1]);
}
else
myLocale = new Locale(Settings.displayLanguage);
Resources res = context.getResources(); Resources res = context.getResources();
DisplayMetrics dm = res.getDisplayMetrics(); DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration(); Configuration conf = res.getConfiguration();

View File

@ -798,4 +798,5 @@
<string name="variablesOnlyForTypes">Variablen sind nur für die Parametertypen String und URI verfügbar</string> <string name="variablesOnlyForTypes">Variablen sind nur für die Parametertypen String und URI verfügbar</string>
<string name="intentParametersHint">Wenn Sie einen Parameter angeben möchten, müssen Sie auch auf \"Intent-Paar hinzufügen\" klicken. Andernfalls werden Ihre Änderungen nicht gespeichert.</string> <string name="intentParametersHint">Wenn Sie einen Parameter angeben möchten, müssen Sie auch auf \"Intent-Paar hinzufügen\" klicken. Andernfalls werden Ihre Änderungen nicht gespeichert.</string>
<string name="languagePolish">Polnisch</string> <string name="languagePolish">Polnisch</string>
<string name="languageChineseChina">Chinesisch (China)</string>
</resources> </resources>

View File

@ -797,4 +797,5 @@
<string name="variablesOnlyForTypes">Las variables solo están disponibles para los tipos de parámetro String y URI</string> <string name="variablesOnlyForTypes">Las variables solo están disponibles para los tipos de parámetro String y URI</string>
<string name="intentParametersHint">Si desea especificar un parámetro, también debe hacer clic en \"Agregar par de intención\". De lo contrario, los cambios no se guardarán.</string> <string name="intentParametersHint">Si desea especificar un parámetro, también debe hacer clic en \"Agregar par de intención\". De lo contrario, los cambios no se guardarán.</string>
<string name="languagePolish">Polaco</string> <string name="languagePolish">Polaco</string>
<string name="languageChineseChina">Chino (China)</string>
</resources> </resources>

View File

@ -797,4 +797,5 @@
<string name="variablesOnlyForTypes">Les variables ne sont disponibles que pour les types de paramètres String et URI</string> <string name="variablesOnlyForTypes">Les variables ne sont disponibles que pour les types de paramètres String et URI</string>
<string name="intentParametersHint">Si vous souhaitez spécifier un paramètre, vous devez également cliquer sur « Ajouter une paire d\'intentions ». Sinon, vos modifications ne seront pas enregistrées.</string> <string name="intentParametersHint">Si vous souhaitez spécifier un paramètre, vous devez également cliquer sur « Ajouter une paire d\'intentions ». Sinon, vos modifications ne seront pas enregistrées.</string>
<string name="languagePolish">Polonais</string> <string name="languagePolish">Polonais</string>
<string name="languageChineseChina">Chinois (Chine)</string>
</resources> </resources>

View File

@ -798,4 +798,5 @@
<string name="variablesOnlyForTypes">Le variabili sono disponibili solo per i tipi di parametro String e URI</string> <string name="variablesOnlyForTypes">Le variabili sono disponibili solo per i tipi di parametro String e URI</string>
<string name="intentParametersHint">Se si desidera specificare un parametro è necessario fare clic anche su \"Aggiungi coppia intento\". In caso contrario, le modifiche non verranno salvate.</string> <string name="intentParametersHint">Se si desidera specificare un parametro è necessario fare clic anche su \"Aggiungi coppia intento\". In caso contrario, le modifiche non verranno salvate.</string>
<string name="languagePolish">Polacco</string> <string name="languagePolish">Polacco</string>
<string name="languageChineseChina">Cinese (Cina)</string>
</resources> </resources>

View File

@ -796,5 +796,6 @@
<string name="variablesOnlyForTypes">Variabelen zijn alleen beschikbaar voor parametertypen Tekenreeks en URI</string> <string name="variablesOnlyForTypes">Variabelen zijn alleen beschikbaar voor parametertypen Tekenreeks en URI</string>
<string name="intentParametersHint">Als u een parameter wilt opgeven, moet u ook op \"Intentiepaar toevoegen\" klikken. Anders worden uw wijzigingen niet opgeslagen.</string> <string name="intentParametersHint">Als u een parameter wilt opgeven, moet u ook op \"Intentiepaar toevoegen\" klikken. Anders worden uw wijzigingen niet opgeslagen.</string>
<string name="languagePolish">Pools</string> <string name="languagePolish">Pools</string>
<string name="languageChineseChina">Chinees (China)</string>
</resources> </resources>

View File

@ -895,4 +895,5 @@
<string name="languageRussian">Rosyjski</string> <string name="languageRussian">Rosyjski</string>
<string name="languageFrench">Francuski</string> <string name="languageFrench">Francuski</string>
<string name="languagePolish">Polski</string> <string name="languagePolish">Polski</string>
<string name="languageChineseChina">Chiński (Chiny)</string>
</resources> </resources>

View File

@ -855,4 +855,5 @@
<string name="variablesOnlyForTypes">Переменные доступны только для типов параметров: String и URI</string> <string name="variablesOnlyForTypes">Переменные доступны только для типов параметров: String и URI</string>
<string name="intentParametersHint">Если вы хотите указать параметр, вам также нужно нажать «Добавить пару намерений». В противном случае ваши изменения не будут сохранены.</string> <string name="intentParametersHint">Если вы хотите указать параметр, вам также нужно нажать «Добавить пару намерений». В противном случае ваши изменения не будут сохранены.</string>
<string name="languagePolish">Польский</string> <string name="languagePolish">Польский</string>
<string name="languageChineseChina">Китайский (Китай)</string>
</resources> </resources>

View File

@ -0,0 +1,800 @@
<resources>
<string name="ruleActivate">激活规则 %1$s</string>
<string name="profileActivate">激活配置文件 %1$s</string>
<string name="ruleActivateToggle">在切换模式下激活规则 %1$s</string>
<string name="addPoi">添加位置</string>
<string name="addRule">添加规则</string>
<string name="poiList">位置列表:</string>
<string name="ruleList">规则列表:</string>
<string name="pleaseEnterValidName">请输入有效的名字。</string>
<string name="pleaseSpecifiyTrigger">请至少指定一个触发器。</string>
<string name="pleaseSpecifiyAction">请至少指定一个动作。</string>
<string name="serviceWontStart">没有定义规则。服务不会启动。</string>
<string name="serviceStarted">Automation 服务已启动。</string>
<string name="version">版本 %1$s。</string>
<string name="distanceBetween">GPS 位置和网络位置之间的距离是 %1$d 米。最小半径应该是这个值+1米。</string>
<string name="positioningWindowNotice">如果您在建筑物中,强烈建议您将设备放在窗户旁边,直到获得位置。否则即使能获得位置,也可能需要很长时间。</string>
<string name="gettingPosition">获取位置。请稍等…</string>
<string name="yes"></string>
<string name="no"></string>
<string name="pleaseEnterValidLatitude">请输入有效的纬度。</string>
<string name="pleaseEnterValidLongitude">请输入有效的经度。</string>
<string name="pleaseEnterValidRadius">请输入有效的正数半径。</string>
<string name="selectOneDay">至少选择一天。</string>
<string name="whatToDoWithRule">对规则做什么?</string>
<string name="whatToDoWithPoi">对位置做什么?</string>
<string name="whatToDoWithProfile">对情景模式做什么?</string>
<string name="delete">删除</string>
<string name="deleteCapital">删除</string>
<string name="serviceStopped">Automation 服务已停止。</string>
<string name="logServiceStopping">停止服务。</string>
<string name="stillGettingPosition">仍在获取位置</string>
<string name="lastRule">最后的规则:</string>
<string name="at"></string>
<string name="service">服务:</string>
<string name="getCurrentPosition">获取当前位置</string>
<string name="savePoi">保存位置</string>
<string name="deletePoi">删除位置</string>
<string name="latitude">纬度</string>
<string name="longitude">经度</string>
<string name="ruleName">规则名称</string>
<string name="triggers">触发器</string>
<string name="triggersComment">用“与”连接(所有条件必须同时成立)</string>
<string name="addTrigger">添加触发器</string>
<string name="actions">动作</string>
<string name="actionsComment">(将按顺序执行)</string>
<string name="addAction">添加动作</string>
<string name="saveRule">保存规则</string>
<string name="monday">星期一</string>
<string name="tuesday">星期二</string>
<string name="wednesday">星期三</string>
<string name="thursday">星期四</string>
<string name="friday">星期五</string>
<string name="saturday">星期六</string>
<string name="sunday">星期日</string>
<string name="start">开始</string>
<string name="end">结束</string>
<string name="save">保存</string>
<string name="urlToTrigger">触发网址:</string>
<string name="urlLegend">变量:\n您可以使用以下变量。触发后它们将替换为您设备上的对应值。文本中要包含方括号。\n\n[uniqueid] - 您设备的唯一 ID\n[serialnr] - 您设备的序列号(&lt; Android 9\n[latitude] - 您设备的纬度\n[longitude] - 您设备的经度\n[phonenr] - 最后来电或去电的号码\n[d] - 日2 位数字,带前导零\n[m] - 月,数字表示,带前导零\n[Y] - 年完整数字表示4 位数字\n[h] - 时12 小时制,带前导零\n[H] - 时24 小时制,带前导零\n[i] - 分,带前导零\n[s] - 秒,带前导零\n[ms] - 毫秒\n[notificationTitle] - 最后通知的标题\n[notificationText] - 最后通知的文本\n[variable-变量名] - 自定义变量的值</string>
<string name="wifi">WLAN</string>
<string name="activating">启用</string>
<string name="deactivating">停用</string>
<string name="bluetoothFailed">未能触发蓝牙。这个设备有蓝牙吗?</string>
<string name="urlTooShort">网址必须至少包含 10 个字符。</string>
<string name="enterPhoneNumberAndText">输入电话号码和短信。</string>
<string name="selectTypeOfTrigger">选择触发器类型</string>
<string name="entering">进入</string>
<string name="leaving">离开</string>
<string name="noPoisSpecified">尚未指定任何位置。请先添加位置。</string>
<string name="started">开始</string>
<string name="stopped">停止</string>
<string name="connected">连接</string>
<string name="disconnected">断开</string>
<string name="selectPoi">选择位置</string>
<string name="selectTypeOfAction">选择动作类型</string>
<string name="selectSoundProfile">选择情景模式</string>
<string name="whatToDoWithTrigger">对触发器做什么?</string>
<string name="whatToDoWithAction">对动作做什么?</string>
<string name="radiusHasToBePositive">半径必须是正数。</string>
<string name="poiStillReferenced">还有引用此位置的规则 (%1$s)。现在不能删除它。</string>
<string name="generalSettings">常规设置</string>
<string name="startAtSystemBoot">开机时启动</string>
<string name="onOff">开/关</string>
<string name="writeLogFile">写入日志文件</string>
<string name="useTextToSpeechOnNormalSummary">响铃模式时使用文字转语音</string>
<string name="useTextToSpeechOnVibrateSummary">振动模式时使用文字转语音</string>
<string name="useTextToSpeechOnSilentSummary">静音模式时使用文字转语音</string>
<string name="useTextToSpeechOnNormalTitle">响铃模式 TTS</string>
<string name="useTextToSpeechOnVibrateTitle">振动模式 TTS</string>
<string name="useTextToSpeechOnSilentTitle">静音模式 TTS</string>
<string name="positioningSettings">定位设置</string>
<string name="listenToWifiState">如果可能,监听 WLAN 状态变化</string>
<string name="wifiState">WLAN 状态</string>
<string name="listenToAccelerometerState">WLAN 不可用时监测设备移动</string>
<string name="accelerometer">加速度计</string>
<string name="accelerometerTimer">手机信号塔保持不变 X 分钟后,使用加速度计</string>
<string name="cellMastIdleTime">手机信号塔等待时间</string>
<string name="accelerometerThresholdDescription">加速度计移动阈值</string>
<string name="accelerometerThreshold">加速度计阈值</string>
<string name="positioningThresholds">定位阈值</string>
<string name="minimumDistanceChangeForGpsLocationUpdates">GPS 位置更新的最小距离变化</string>
<string name="distanceForGpsUpdate">GPS 更新距离 [m]</string>
<string name="minimumDistanceChangeForNetworkLocationUpdates">网络位置更新的最小距离变化</string>
<string name="distanceForNetworkUpdate">网络更新距离 [m]</string>
<string name="satisfactoryAccuracyGps">通过 GPS 获取位置时的精度(以米为单位)</string>
<string name="gpsAccuracy">GPS 精度 [m]</string>
<string name="satisfactoryAccuracyNetwork">通过手机信号塔获取位置时的精度(以米为单位)</string>
<string name="networkAccuracy">网络位置精度 [m]</string>
<string name="minimumTimeForLocationUpdates">位置更新的最小时间间隔(以毫秒为单位)</string>
<string name="timeForUpdate">更新时间 [毫秒]</string>
<string name="soundSettings">声音设置</string>
<string name="showHelp">显示帮助</string>
<string name="rules">规则</string>
<string name="helpTextRules">规则中的所有触发器都是用“与”连接的。规则仅在满足所有触发器时才应用。如果您想要“或”,请创建另一个规则。\n触发器和条件是作为同义词使用的。所有的触发器都是条件而最后一个满足其要求值的条件可以称为触发器因为它是导致规则执行的“最后一块拼图”。</string>
<string name="timeframes">时间范围</string>
<string name="helpTextTimeFrame">指定时间范围规则时有两种选择。您可以选择进入或离开时间范围。无论哪种方式,规则都只会触发一次。因此,如果您创建一个使用触发器“进入时间范围 XYZ”的规则让它将响铃模式更改为振动这并不意味着手机会在时间范围结束时自动更改为响铃。如果想要的话您需要指定另一个规则使用另一个时间范围。</string>
<string name="helpTextSound">在主屏幕上,您可以使用“锁定声音更改”来暂时禁用基于规则的声音更改。例如,您可能在通常允许响铃的情况或地点,但这一次响铃会打扰。一旦配置的时间过去,此功能将自动停用。点击 + 按钮以添加给定的时间。当此功能启用时,您可以使用切换按钮将其停用(即重新启用基于规则的声音更改)。</string>
<string name="toggableRules">可切换规则</string>
<string name="helpTextToggable">规则有一个称为“可切换”的设置。它的意思是执行规则后,相同触发器再次触发时,规则会以相反方式再次执行(如果适用的话)。目前这只能和 NFC 标签一起使用。如果在关联了可切换规则时触碰两次标签,就会执行与当前状态相反的操作,例如 WLAN 当前开启时将其关闭。</string>
<string name="helpTextProcessMonitoring">如果指定了使用进程监控的规则,这个应用就会每 X 秒检查一次该进程X 可以在设置中更改)。我知道这可能有点慢,但持续监控会很快耗尽电池电量。并且该事件没有来自操作系统的广播。</string>
<string name="helpTitleEnergySaving">节能</string>
<string name="helpTextEnergySaving">很多 Android 设备制造商试图通过限制应用的后台活动来节省电量。不幸的是这通常会导致这些应用无法正常工作Automation 就是其中之一。请看这个<a href="https://dontkillmyapp.com/">网页</a>,查找如何从这些限制中排除 Automation。</string>
<string name="speedMaximumTimeBetweenLocations">确定速度的两个位置之间最长时间。</string>
<string name="speedMaximumTime">时间 [分钟]</string>
<string name="exceeds">超过</string>
<string name="dropsBelow">低于</string>
<string name="settingsCategoryNoiseLevelMeasurements">噪声级测量</string>
<string name="timeBetweenNoiseLevelMeasurementsSummary">噪声级测量之间的秒数</string>
<string name="timeBetweenNoiseLevelMeasurementsTitle">噪声级测量之间的秒数</string>
<string name="lengthOfNoiseLevelMeasurementsSummary">每次噪声级测量的时长(以秒为单位)</string>
<string name="lengthOfNoiseLevelMeasurementsTitle">每次噪声级测量的时长</string>
<string name="referenceValueForNoiseLevelMeasurementsSummary">噪声级测量的物理参考值</string>
<string name="referenceValueForNoiseLevelMeasurementsTitle">噪声测量参考</string>
<string name="logLevelSummary">日志级别1=最低5=最高)</string>
<string name="logLevelTitle">日志级别</string>
<string name="ruleActive">启用规则</string>
<string name="triggerPointOfInterest">位置</string>
<string name="triggerTimeFrame">时间范围</string>
<string name="triggerCharging">电池充电</string>
<string name="triggerUsb_host_connection">USB 连接到电脑</string>
<string name="triggerSpeed">速度</string>
<string name="triggerNoiseLevel">背景噪声级</string>
<string name="actionSetWifi">WLAN</string>
<string name="actionSetBluetooth">蓝牙</string>
<string name="actionSetUsbTethering">USB 网络共享</string>
<string name="actionSetWifiTethering">WLAN 网络共享</string>
<string name="actionSetBluetoothTethering">蓝牙网络共享</string>
<string name="actionSetDisplayRotation">屏幕旋转</string>
<string name="actionTurnWifiOn">打开 WLAN</string>
<string name="actionTurnWifiOff">关闭 WLAN</string>
<string name="actionTurnBluetoothOn">打开蓝牙</string>
<string name="actionTurnBluetoothOff">关闭蓝牙</string>
<string name="actionTriggerUrl">触发网址</string>
<string name="actionChangeSoundProfile">更改情景模式</string>
<string name="actionTurnUsbTetheringOn">打开 USB 网络共享</string>
<string name="actionTurnUsbTetheringOff">关闭 USB 网络共享</string>
<string name="actionTurnWifiTetheringOn">打开 WLAN 网络共享</string>
<string name="actionTurnWifiTetheringOff">关闭 WLAN 网络共享</string>
<string name="actionTurnBluetoothTetheringOn">打开蓝牙网络共享</string>
<string name="actionTurnBluetoothTetheringOff">关闭蓝牙网络共享</string>
<string name="actionTurnAirplaneModeOn">打开飞行模式</string>
<string name="actionTurnAirplaneModeOff">关闭飞行模式</string>
<string name="actionEnableScreenRotation">启用屏幕旋转</string>
<string name="actionDisableScreenRotation">禁用屏幕旋转</string>
<string name="screenRotationEnabled">屏幕旋转已启用。</string>
<string name="screenRotationDisabled">屏幕旋转已禁用。</string>
<string name="screenRotationAlreadyEnabled">屏幕旋转已经是启用的。</string>
<string name="screenRotationAlreadyDisabled">屏幕旋转已经是禁用的。</string>
<string name="noPoisDefinedShort">没有定义位置。</string>
<string name="activePoi">活动位置:</string>
<string name="closestPoi">最近的位置:</string>
<string name="overview">概述</string>
<string name="poi">位置</string>
<string name="pois">位置</string>
<string name="helpTextPoi">位置由 GPS 坐标和半径组成。因为手机信号塔定位很不精确(但快速、省电),所以不要将半径指定得太小。创建新位置时,此应用会给出建议的最小半径。</string>
<string name="serviceNotRunning">服务未运行。</string>
<string name="general">常规</string>
<string name="generalText">要使用此程序,您必须设置规则。规则包含触发器,例如到达指定区域或进入某个时间。完成后点击主屏幕上的开/关按钮。</string>
<string name="failedToTriggerBluetooth">未能触发蓝牙。这个设备有蓝牙吗?</string>
<string name="startServiceAfterAppUpdate">应用更新后自动启动服务(如果之前是运行的)。</string>
<string name="startServiceAfterAppUpdateShort">更新后启动服务</string>
<string name="wifiConnection">WLAN 连接</string>
<string name="wifiName">WLAN 名称</string>
<string name="enterWifiName">输入 WLAN 名称。留空表示任何 WLAN。</string>
<string name="cancel">取消</string>
<string name="starting">开始</string>
<string name="stopping">停止</string>
<string name="connecting">连接</string>
<string name="disconnecting">断开</string>
<string name="exceeding">超过</string>
<string name="droppingBelow">低于</string>
<string name="connectedToWifi">连接到 WLAN \"%1$s\"</string>
<string name="disconnectedFromWifi">与 WLAN \"%1$s\" 断开连接</string>
<string name="anyWifi">任何 WLAN</string>
<string name="cantStopIt">无法停止。</string>
<string name="settingsCategoryHttp">HTTP(s) 请求</string>
<string name="httpAcceptAllCertificatesTitle">接受所有证书</string>
<string name="httpAcceptAllCertificatesSummary">跳过 SSL 证书的有效性检查(不建议启用)</string>
<string name="httpAttemptsSummary">HTTP 请求因连接原因失败时的尝试次数</string>
<string name="httpAttemptsTitle">HTTP 尝试次数</string>
<string name="httpAttemptsTimeoutSummary">HTTP 请求超时 [秒]</string>
<string name="httpAttemptsTimeoutTitle">超时 [秒]</string>
<string name="httpAttemptGapSummary">下一次尝试之前暂停 [秒]</string>
<string name="httpAttemptGapTitle">暂停 [秒]</string>
<string name="runManually">手动运行</string>
<string name="serviceHasToRunForThat">必须运行服务,才能执行此操作。</string>
<string name="gpsComparison">GPS 比较</string>
<string name="timeoutForGpsComparisonsTitle">GPS 超时 [秒]</string>
<string name="timeoutForGpsComparisonsSummary">尝试获取 GPS 位置进行比较的最长时间(以秒为单位)。如果超时就会应用最后已知的位置。</string>
<string name="rememberLastActivePoiSummary">如果您在某个位置,重启设备或此应用时离开该位置,此应用将在下次启动时运行离开该位置相关的规则。</string>
<string name="rememberLastActivePoiTitle">记住最后活动位置</string>
<string name="muteTextToSpeechDuringCallsTitle">通话时静音</string>
<string name="muteTextToSpeechDuringCallsSummary">通话时将文字转语音静音</string>
<string name="anotherPoiByThatName">已经有另一个同名的位置。</string>
<string name="anotherRuleByThatName">已经有另一个同名的规则。</string>
<string name="startOtherActivity">启动另一个程序</string>
<string name="selectApplication">选择应用</string>
<string name="selectPackageOfApplication">选择软件包</string>
<string name="selectActivityToBeStarted">选择所选软件包的活动</string>
<string name="errorStartingOtherActivity">启动其他活动时出错</string>
<string name="anotherAppIsRunning">另一个应用启动/停止</string>
<string name="settingsCategoryProcessMonitoring">进程监控</string>
<string name="timeBetweenProcessMonitoringsTitle">进程监控之间的秒数</string>
<string name="timeBetweenProcessMonitoringsSummary">值越低,电池用量越高</string>
<string name="processes">进程</string>
<string name="processMonitoring">进程监控</string>
<string name="settings">设置</string>
<string name="settingsErased">设置已删除。</string>
<string name="settingsSetToDefault">设置为默认值。</string>
<string name="batteryLevel">电池电量</string>
<string name="selectSpeed">选择速度</string>
<string name="selectBattery">选择电池电量</string>
<string name="privacy">隐私政策</string>
<string name="privacyConfirmationText">现在将在您的设备上打开浏览器,从开发者的网站加载隐私政策。</string>
<string name="waitBeforeNextAction">下个动作前等待</string>
<string name="wakeupDevice">唤醒设备</string>
<string name="waitBeforeNextActionEnterValue">输入下个动作之前等待的时间(以毫秒为单位)。</string>
<string name="wakeupDeviceValue">输入设备保持唤醒的最短时间以毫秒为单位。0 表示默认值。</string>
<string name="enterAPositiveValidNonDecimalNumber">输入一个有效的正整数。</string>
<string name="moveUp">向上移动</string>
<string name="moveDown">向下移动</string>
<string name="cantMoveUp">无法向上移动项目。它已经在顶部了。</string>
<string name="cantMoveDown">无法向下移动项目。它已经在底部了。</string>
<string name="airplaneMode">飞行模式</string>
<string name="activate">启用</string>
<string name="deactivate">停用</string>
<string name="airplaneModeSdk17Warning">从 Android 4.2 版本开始,此功能仅在您的设备已获得 root 权限时才有效。</string>
<string name="addIntentValue">添加 Intent 对</string>
<string name="parameterName">参数名称</string>
<string name="parameterValue">参数值</string>
<string name="parameterType">参数类型</string>
<string name="selectTypeOfIntentPair">选择 Intent 对的类型。</string>
<string name="enterNameForIntentPair">输入 Intent 对的名称。</string>
<string name="enterValueForIntentPair">输入 Intent 对的值。</string>
<string name="whatToDoWithIntentPair">对 Intent 对做什么?</string>
<string name="gettingListOfInstalledApplications">正在获取已安装应用列表…</string>
<string name="timeFrameWhichDays">在星期几?</string>
<string name="insideOrOutsideTimeFrames">时间范围之内还是之外?</string>
<string name="selectToggleDirection">打开还是关闭?</string>
<string name="name">名称</string>
<string name="radiusWithUnit">半径 [米]</string>
<string name="status">状态</string>
<string name="actionDataConnection">移动数据连接</string>
<string name="actionSetDataConnectionOn">打开移动数据</string>
<string name="actionSetDataConnectionOff">关闭移动数据</string>
<string name="roaming">漫游</string>
<string name="activated">启用</string>
<string name="deactivated">停用</string>
<string name="until"></string>
<string name="application">应用</string>
<string name="is"></string>
<string name="phoneCall">通话</string>
<string name="with"></string>
<string name="phoneNumber">电话号码</string>
<string name="enterPhoneNumberBlankForAny">输入电话号码。留空表示任何号码。</string>
<string name="enterPhoneNumber">输入电话号码。</string>
<string name="phoneDirection">选择通话\n方向</string>
<string name="any">任何</string>
<string name="incoming">来电</string>
<string name="outgoing">去电</string>
<string name="incomingAdjective">来电</string>
<string name="outgoingAdjective">去电</string>
<string name="anyNumber">任何号码</string>
<string name="number">号码</string>
<string name="nfcTag">NFC 标签</string>
<string name="closeTo">接近</string>
<string name="withLabel">ID 为</string>
<string name="deviceDoesNotHaveNfc">这个设备似乎没有 NFC。</string>
<string name="nfcReadTag">从标签中读取 ID</string>
<string name="nfcWriteTag">写入标签</string>
<string name="nfcEnterValidIdentifier">输入有效的标签标识符(如“家门”)。</string>
<string name="nfcTagWrittenSuccessfully">标记写入成功。</string>
<string name="nfcTagWriteError">写入标签时出错。标签在范围内吗?</string>
<string name="nfcTagDiscovered">发现标签。</string>
<string name="nfcBringTagIntoRange">请将 NFC 标签置于范围内。</string>
<string name="nfcTagFoundWithText">找到标签,文本为:</string>
<string name="nfcUnsupportedEncoding">不支持的编码:</string>
<string name="nfcNoNdefIntentBut">没有 NFC NDEF Intent但是</string>
<string name="nfcNotSupportedInThisAndroidVersionYet">此 Android 版本尚不支持 NFC。</string>
<string name="cantRunRule">无法运行规则。</string>
<string name="nfcApplyTagToRule">将标签应用到规则</string>
<string name="nfcTagReadSuccessfully">标签读取成功。</string>
<string name="nfcValueNotSuitable">存储的值不适合。</string>
<string name="nfcNoTag">没有标签。</string>
<string name="newNfcId">写入新的 NFC ID</string>
<string name="useExistingTag">使用现有的 NFC 标签</string>
<string name="newId">新 ID</string>
<string name="currentId">当前 ID</string>
<string name="nfcTagDataNotUsable">标签数据不可用,请重新写入。</string>
<string name="nfcBringTagIntoRangeToRead">请将标签置于读取范围内。</string>
<string name="toggleRule">切换规则</string>
<string name="toggling">切换</string>
<string name="toggle">切换</string>
<string name="overlapBetweenPois">检测到与位置 %1$s 重叠了 %2$s 米。请至少将半径减少该值。</string>
<string name="none"></string>
<string name="anyLocation">任何位置</string>
<string name="invalidPoiName">位置名称无效。</string>
<string name="eraseSettings">清除设置</string>
<string name="defaultSettings">默认设置</string>
<string name="areYouSure">你确定吗?</string>
<string name="activityDetection">活动检测</string>
<string name="android.permission.ACTIVITY_RECOGNITION">活动检测</string>
<string name="detectedActivity">检测到的活动:</string>
<string name="detectedActivityInVehicle">在车辆中(汽车/公共汽车)</string>
<string name="detectedActivityOnBicycle">在自行车上</string>
<string name="detectedActivityOnFoot">步行或跑步</string>
<string name="detectedActivityStill">静止</string>
<string name="detectedActivityUnknown">未知</string>
<string name="detectedActivityTilting">倾斜</string>
<string name="detectedActivityWalking">步行</string>
<string name="detectedActivityRunning">跑步</string>
<string name="detectedActivityInvalidStatus">无效活动</string>
<string name="selectTypeOfActivity">选择活动类型</string>
<string name="triggerOnlyAvailableIfPlayServicesInstalled">此触发器仅在已安装 Google Play 服务时可用。</string>
<string name="activityDetectionFrequencyTitle">活动检测频率 [秒]</string>
<string name="activityDetectionFrequencySummary">尝试检测活动之间的秒数。</string>
<string name="activityDetectionRequiredProbabilityTitle">活动检测概率</string>
<string name="activityDetectionRequiredProbabilitySummary">达到此概率时,活动被接受为确定发生。</string>
<string name="incomingCallFrom">来自 %1$s 的来电。</string>
<string name="outgoingCallTo">去电至 %1$s。</string>
<string name="actionSpeakText">朗读文字</string>
<string name="textToSpeak">要朗读的文字</string>
<string name="toggleNotAllowed">目前仅允许切换有 NFC 标签触发器的规则。请参阅帮助以获取更多信息。</string>
<string name="errorReadingPoisAndRulesFromFile">从文件中读取位置和规则时出错。</string>
<string name="noDataChangedReadingAnyway">似乎没有保存过数据更改。但内存中可能有更改需要回滚。正在重新读取文件。</string>
<string name="bluetoothConnection">蓝牙连接</string>
<string name="bluetoothConnectionTo">蓝牙连接到 %1$s</string>
<string name="bluetoothDisconnectFrom">与 %1$s 断开蓝牙连接</string>
<string name="bluetoothDeviceInRange">蓝牙设备 %1$s 在范围内。</string>
<string name="bluetoothDeviceOutOfRange">蓝牙设备 %1$s 不在范围内。</string>
<string name="anyDevice">任何设备</string>
<string name="noDevice">无设备</string>
<string name="selectDeviceFromList">列表中的一个</string>
<string name="connectionToDevice">连接到设备</string>
<string name="disconnectionFromDevice">与设备断开连接</string>
<string name="deviceInRange">设备在范围内</string>
<string name="deviceOutOfRange">设备不在范围内</string>
<string name="selectDeviceOption">选择设备选项。</string>
<string name="selectConnectionOption">选择连接选项。</string>
<string name="triggerHeadsetPlugged">耳机连接</string>
<string name="actionPlayMusic">打开音乐播放器</string>
<string name="headsetConnected">耳机(类型:%1$s已连接</string>
<string name="headsetDisconnected">耳机(类型:%1$s已断开连接</string>
<string name="headphoneSimple">无麦克风</string>
<string name="headphoneMicrophone">有麦克风</string>
<string name="headphoneAny">均可</string>
<string name="headphoneSelectType">选择耳机类型</string>
<string name="whatsThis">这是什么?</string>
<string name="privacyLocationingTitle">仅私人定位</string>
<string name="privacyLocationingSummary">避免可能会将您的位置发送给提供商(如 Google的定位方法。这将仅使用 GPS所以可能较慢或不够可靠。</string>
<string name="noiseDetectionHint">如果您认为噪声检测不正确(根据您指定的值),请注意每部手机都有差别。所以您可以在设置中更改“噪声测量参考”。更多信息请参阅 https://zh.wikipedia.org/wiki/分贝 。您可以使用主屏幕上的音量校准器来校准您的设备。</string>
<string name="hint">提示</string>
<string name="selectNoiseLevel">选择噪声级</string>
<string name="showOnMap">在地图上显示</string>
<string name="noMapsApplicationFound">在您的设备上找不到地图应用。</string>
<string name="locationEngineNotActive">定位未激活。</string>
<string name="addProfile">添加情景模式</string>
<string name="profile">情景模式</string>
<string name="soundMode">声音模式</string>
<string name="volumes">音量</string>
<string name="incomingCallsRingtone">来电提示音</string>
<string name="notificationRingtone">通知提示音</string>
<string name="hapticFeedback">触感反馈(触摸屏幕时振动)</string>
<string name="volumeMusicVideoGameMedia">音乐、视频、游戏等媒体</string>
<string name="volumeRingtoneNotifications">铃声和通知</string>
<string name="volumeAlarms">闹钟</string>
<string name="change">更改</string>
<string name="audibleSelection">触摸提示音(进行屏幕选择时的声音)</string>
<string name="screenLockUnlockSound">屏幕锁定/解锁提示音</string>
<string name="vibrateWhenRinging">响铃时振动</string>
<string name="profiles">情景</string>
<string name="soundModeNormal">正常</string>
<string name="soundModeVibrate">振动</string>
<string name="soundModeSilent">静音</string>
<string name="enterAname">输入名称。</string>
<string name="noChangeSelectedProfileDoesntMakeSense">未选择更改。情景模式没有意义。</string>
<string name="noProfilesCreateOneFirst">您的配置中没有情景模式。请先创建一个。</string>
<string name="errorActivatingProfile">激活情景模式时出错:</string>
<string name="anotherProfileByThatName">已经有另一个同名的情景模式。</string>
<string name="invalidProfileName">情景模式名称无效。</string>
<string name="errorWritingFile">写入设置文件时出错。</string>
<string name="unknownError">未知错误。</string>
<string name="noWritableFolderFound">找不到可写目录,无法保存配置文件。</string>
<string name="usbTetheringFailForAboveGingerbread">这很可能不起作用,因为您使用的是 Android 2.3 以上版本。您可以改用 WLAN 网络共享。</string>
<string name="usingNewThreadForRuleExecution">使用新线程激活规则。</string>
<string name="startNewThreadForRuleExecution">启动新线程激活规则。</string>
<string name="newThreadRules">新线程</string>
<string name="showIcon">显示图标</string>
<string name="showIconWhenServiceIsRunning">服务运行时显示图标(隐藏仅在 Android 7 以下有效)。如果您使用的是更高版本,请转到系统设置 - Automation - 通知禁用“Service notification”。</string>
<string name="ruleHistory">规则历史(最近的在前):</string>
<string name="someOptionsNotAvailableYet">部分选项已禁用,它们目前还无法使用。它们将在以后的程序版本中加入。</string>
<string name="lockSoundChanges">锁定声音更改</string>
<string name="noProfileChangeSoundLocked">情景模式将不会激活。最后激活的情景模式已被锁定。</string>
<string name="currentVolume">当前音量</string>
<string name="enterValidReferenceValue">输入有效的参考值。</string>
<string name="volumeTest">音量校准</string>
<string name="volumeCalibrationExplanation">要计算噪声监测的分贝值,您需要指定一个所谓的物理参考值。请阅读维基百科以获取更多信息。每个手机的参考值很可能是不同的。调整拖动条以更改设定的物理参考值。参考值越高,分贝值越低。将持续每 %1$s 秒执行一次测量,结果显示在下方。找到合适的值后按返回键。</string>
<string name="settingsWillTakeTime">部分设置将在某些环境设置更改或服务重新启动后应用。</string>
<string name="rootExplanation">您需要 root 手机才能使用此功能。之后您需要“手动运行规则”来显示超级用户权限提示。出现超级用户弹窗时,您需要始终允许应用执行此操作。否则,手机无人值守时规则将无法生效。</string>
<string name="errorWritingConfig">写入配置时出错。有可写存储吗?</string>
<string name="phoneNrReplacementError">无法在变量中插入最后一个电话号码。未找到号码。</string>
<string name="username">用户名</string>
<string name="password">密码</string>
<string name="useAuthentication">使用身份验证</string>
<string name="permissionsTitle">所需权限</string>
<string name="permissionsExplanation">所需权限的说明</string>
<string name="ok">确定</string>
<string name="disabledFeatures">禁用的功能</string>
<string name="theFollowingPermissionsHaveBeenDenied">以下权限已被拒绝:</string>
<string name="permissionsExplanationGeneric">该应用当前以受限模式运行,已停用部分功能。完整运行需要权限。如果您想使用所有功能,必须在以下权限对话框中授予权限,否则某些规则将无法执行。下面给出了所需权限的解释。准备好后请点击“继续”。</string>
<string name="permissionsExplanationSmall">要启用您正尝试使用的功能,需要更多权限。点击继续请求权限。</string>
<string name="continueText">继续</string>
<string name="rule">规则</string>
<string name="storeSettings">读取和保存设置</string>
<string name="featuresDisabled">警告功能已禁用Automation 以受限模式运行。点击这里查看更多信息。</string>
<string name="ruleLegend">绿 = 启用,红 = 禁用,黄 = 权限不足</string>
<string name="systemSettingsNote1">需要修改系统设置的权限(即使简单的设置,如打开蓝牙或 WLAN也需要权限。点击“继续”后将弹出一个窗口您需要对 Automation 启用此权限。然后按返回键。</string>
<string name="systemSettingsNote2">之后将在下一个对话框中请求其他权限。</string>
<string name="appRequiresPermissiontoAccessExternalStorage">Automation 需要访问外部存储以读取设置和规则。</string>
<string name="mainScreenPermissionNote">Automation 需要更多权限才能完整运行。点击此文本以了解更多信息并请求权限。</string>
<string name="invalidDevice">无效设备</string>
<string name="logFileMaxSizeSummary">最大日志文件大小(以兆字节为单位)。超出后会轮替。</string>
<string name="logFileMaxSizeTitle">最大日志文件大小 [Mb]</string>
<string name="android.permission.READ_CALL_LOG">读取通话记录</string>
<string name="android.permission.READ_CALENDAR">读取日历条目</string>
<string name="android.permission.ACCESS_FINE_LOCATION">获取确切位置</string>
<string name="android.permission.ACCESS_COARSE_LOCATION">获取粗略位置</string>
<string name="readLocation">获取位置</string>
<string name="android.permission.INTERNET">通过网络连接发送数据</string>
<string name="android.permission.ACCESS_NETWORK_STATE">读取设备的网络状态</string>
<string name="android.permission.ACCESS_WIFI_STATE">读取设备的 WLAN 状态</string>
<string name="android.permission.BLUETOOTH">更改蓝牙设置</string>
<string name="android.permission.BLUETOOTH_ADMIN">更改蓝牙设置</string>
<string name="android.permission.NFC">使用 NFC 模块</string>
<string name="android.permission.VIBRATE">让手机振动</string>
<string name="android.permission.WAKE_LOCK">保持手机唤醒</string>
<string name="android.permission.MODIFY_AUDIO_SETTINGS">更改音频设置</string>
<string name="android.permission.RECORD_AUDIO">录制音频</string>
<string name="android.permission.PROCESS_OUTGOING_CALLS">检测拨出电话</string>
<string name="android.permission.MODIFY_PHONE_STATE">更改设备设置</string>
<string name="android.permission.READ_PHONE_STATE">检测手机状态</string>
<string name="android.permission.READ_EXTERNAL_STORAGE">读取存储</string>
<string name="android.permission.WRITE_EXTERNAL_STORAGE">写入存储</string>
<string name="android.permission.GET_TASKS">检测正在运行的进程</string>
<string name="android.permission.WRITE_SETTINGS">更改设备设置</string>
<string name="android.permission.RECEIVE_BOOT_COMPLETED">检测设备重启</string>
<string name="android.permission.WRITE_SECURE_SETTINGS">更改设备设置</string>
<string name="android.permission.BATTERY_STATS">读取电池状态</string>
<string name="android.permission.CHANGE_BACKGROUND_DATA_SETTING">更改数据连接</string>
<string name="android.permission.SEND_SMS">发送短信</string>
<string name="android.permission.READ_CONTACTS">读取联系人数据</string>
<string name="android.permission.ACCESS_NOTIFICATION_POLICY">覆盖请勿打扰设置</string>
<string name="theseAreThePermissionsRequired">需要这些权限:</string>
<string name="ruleXrequiresThis">规则“%1$s”需要这个。</string>
<string name="profileXrequiresThis">情景模式“%1$s”需要这个。</string>
<string name="helpTextActivityDetection">此功能可以检测您当前是否在旅途中,以及是否步行或乘坐哪种车辆(在一定程度上)。此功能并非 Automation 完全内置,而是由 Google Play 服务提供。技术上它不会给出是/否结果,而是会返回一个百分比,代表对状态检测的确定程度。您可以设置 Automation 会接受结果的百分比值。两点说明1) 可能同时出现多种状态。例如您可能在行驶的公共汽车内行走。2) 这种传感器相对耗电。如果可能,您可以考虑使用替代方案,例如要求连接到汽车的免提设备以检测您正在驾驶。</string>
<string name="sendTextMessage">发送短信</string>
<string name="textToSend">要发送的文本</string>
<string name="textMessageAnnotations">您可以直接输入电话号码,或者使用通讯录选项选择一个。但请注意:这里保存的是号码,而不是联系人。如果您更改了所选联系人的电话号码,则需要更新此规则。它不会自动更新。</string>
<string name="importNumberFromContacts">从通讯录导入号码</string>
<string name="android9RecordAudioNotice">如果您正在使用噪声级触发器:不幸的是,从 Android 9 (Pie) 开始Google 决定禁止后台应用使用麦克风。所以这个触发器不再有效,无法触发任何规则。</string>
<string name="android10WifiToggleNotice">不幸的是Google 决定在 Android 10 中删除此功能,不再允许常规应用打开或关闭 WLAN。只有当您的设备已获得 root 权限时,它才能继续工作,否则恐怕就没有效果了。</string>
<string name="messageNotShownAgain">此消息不会再次显示。</string>
<string name="chooseActivityHint">在最后一个选择窗口中您需要选择一个特定的活动。简而言之这就像所选应用程序的特定窗口。如果您不知道选哪一个通常最好选择名称中包含“main”或“launcher”的一个。</string>
<string name="edit">编辑</string>
<string name="clickAndHoldForOptions">点击并按住项目以获取选项。</string>
<string name="positioningEngine">定位引擎</string>
<string name="googleSarcasm">感谢 Google 的无限智慧和保护所有人隐私的不懈努力(讽刺),所有可能用于发送短信或读取手机状态的触发器和操作都被删除了,因为 Google 认为它们有风险。</string>
<string name="startAutomationAsService">启动 Automation 服务</string>
<string name="setScreenBrightness">设置屏幕亮度</string>
<string name="setScreenBrightnessEnterValue">输入所需的亮度(从 0 到 100</string>
<string name="autoBrightness">启用自动亮度</string>
<string name="apply">应用</string>
<string name="brightnessAuto">自动亮度</string>
<string name="brightnessManual">手动亮度</string>
<string name="autoBrightnessNotice">如果使用自动亮度,下面设置的亮度值可能不会应用很长时间。</string>
<string name="screenLockSoundNotice">在运行 Android 6.0 或更高版本的设备上,屏幕锁定声音无法再自动更改。无论此处如何设置,都不会以任何方式起作用。</string>
<string name="startScreen">启动屏幕</string>
<string name="startScreenSummary">选择启动应用时打开的屏幕。</string>
<string name="executeRulesAndProfilesWithSingleClickTitle">单击运行规则/配置文件。</string>
<string name="googleLocationChicanery">为支持基于位置的规则和速度检测,本应用会收集位置数据,即使在关闭或未使用状态下也仍会持续收集。</string>
<string name="googleLocationChicaneryOld">此应用收集位置数据,以确定您当前是否位于您创建的位置之一。此外,如果您在规则中使用速度触发器,它还用于确定您当前的速度。即使在关闭或未使用状态下(仅当服务激活时),也仍会持续收集。</string>
<string name="android.permission.ACCESS_BACKGROUND_LOCATION">在后台获取位置。</string>
<string name="deviceDoesNotHaveBluetooth">该设备似乎没有蓝牙。您仍然可以继续配置,但它很可能没有效果。</string>
<string name="manageLocations">创建或编辑位置</string>
<string name="error">错误</string>
<string name="featureNotInFdroidVersion">此功能基于非自由软件,因此在 F-Droid 版本中不可用。</string>
<string name="settingsReferringToRestrictedFeaturesInFdroid">您的设置和/或规则目前正在使用 F-Droid 版本中无法提供的非自由软件功能。这包括检测您当前的身体活动。</string>
<string name="settingsReferringToRestrictedFeaturesInGoogle">您的设置和/或规则目前正在使用 Google Play 版本中无法提供的功能。其中包括与电话和短信相关的任何功能。</string>
<string name="publishedOn">发布于</string>
<string name="displayNewsOnMainScreen">在主屏幕上显示应用新闻</string>
<string name="displayNewsOnMainScreenDescription">仅是关于此应用的公告,大概每年 1-2 条,不会更多。</string>
<string name="filesHaveBeenMovedTo">Automation 现在使用另一个路径来保存您的文件。您所有的 Automation 文件都已移至此处:“%s”。不再需要外部存储权限您可以撤销它。它将在未来的版本中被删除。</string>
<string name="locationDisabled">位置已禁用</string>
<string name="locationEngineDisabledShort">无法继续在后台确定位置。点击此处了解原因。</string>
<string name="locationEngineDisabledLong">不幸的是,无法继续确定您的位置。感谢谷歌的无限智慧与和蔼可亲。\\n\\n让我进一步解释一下。Android 10 开始引入了一项新权限,需要这个权限才能在后台确定您的位置(当然对于本应用是必需的)。虽然我认为这总体上是个好主意,但它给开发人员带来的骚扰却并非如此。\\n\\n开发应用时可以通过遵守一组要求来尝试获得此权限。不幸的是我的应用的新版本在三个月内不断被拒绝。我满足了所有的要求Google 糟糕的开发支持却声称我没有。在向他们证明我确实做到了之后——我得到的回应是“我不能再帮助你了”。最后我放弃了。\\n\\n因此Google Play 版本无法再使用您的位置作为触发器。我唯一的其他选择是将此应用从商店中完全删除。\\n\\n非常抱歉但我已尽我所能与没有帮助的“支持”争论了。\\n\\n好消息您仍然可以使用这个功能\\n\\nAutomation 现在是开源的,可以在 F-Droid 中找到。这是一个真正关心您的隐私的应用商店——而不仅仅是表现地像这样。只需备份您的配置文件,卸载此应用,从 F-Droid 重新安装它,恢复您的配置文件即可。\\n\\n点击此处了解更多信息</string>
<string name="filesStoredAt">配置和日志文件保存在文件夹 %1$s 中。点击此文本以打开文件管理器。不幸的是,这只适用于有 root 权限的设备。对于所有其他设备:只需使用导出按钮进行备份。</string>
<string name="notification">通知</string>
<string name="title">标题</string>
<string name="text">文本</string>
<string name="directionStringEquals">等于</string>
<string name="directionStringContains">包含</string>
<string name="directionStringStartsWith">开头是</string>
<string name="directionStringEndsWith">结尾是</string>
<string name="directionStringNotEquals">不等于</string>
<string name="anyApp">任何应用</string>
<string name="notificationTriggerExplanation">此触发器将响应其他应用在通知区域打开(或关闭)通知。您可以指定通知必须来自的另一个应用。如果不指定,则来自任何其他应用的通知都会触发。您还可以指定标题或通知正文中必须有或没有的字符串。比较不区分大小写。</string>
<string name="postsNotification">%1$s 发布通知</string>
<string name="removedNotification">来自 %1$s 的通知已删除</string>
<string name="notificationAppears">通知出现</string>
<string name="notificationDisappears">通知消失</string>
<string name="direction">方向</string>
<string name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">读取系统通知</string>
<string name="playSound">播放声音</string>
<string name="alwaysPlay">始终播放</string>
<string name="alwaysPlayExplanation">如果启用此设置,则始终播放声音。如果停用,则仅当手机未处于静音或振动状态时播放。但启用时不会更改音量,例如手机在响铃模式时,媒体音量也不会自动增加。因此,如果媒体音量处于静音状态,您也不会听到声音。</string>
<string name="selectSoundFile">选择声音文件</string>
<string name="fileDoesNotExist">文件不存在。</string>
<string name="noFileManageInstalled">没有安装文件管理器。</string>
<string name="shareConfigAndLogFilesWithDev">附加配置和日志文件。</string>
<string name="shareConfigAndLogExplanation">这将开始写一封新电子邮件,以配置和日志文件作为 zip 附件。它不会自动发送,您仍然需要点击“发送”。比如您也可以将收件人更改为您自己。</string>
<string name="startAppChoiceNote">这里有 2 个常规选项:\n\n1. 您可以通过选择活动来启动程序。这就像预先选择应用的特定屏幕/窗口。注意这可能并不总是有效,因为应用的窗口可能会相互交互,如传递参数。直接启动一个没有交互过的特定屏幕时,窗口可能会立即关闭(所以它不会真的显示)。还是试试吧!您可以手动输入活动路径,但建议使用“选择”按钮。若要手动输入,请在上方字段中输入应用包名,在下方字段中输入活动的完整路径。\n\n2. 按动作选择:除选择特定窗口外,您还可以按动作启动程序。这就像大喊“我想要 xyz”如果安装了支持的应用它就会启动。典型的例子是启动浏览器——您可能安装了多个浏览器通常有一个是默认的。这里您需要手动输入包名是可选的。注意不会解析变量。例如如果想启动相机使用“MediaStore.ACTION_IMAGE_CAPTURE”是不行的。您必须查看 Android 文档并使用此变量的实际值来代替在本例中为“android.media.action.IMAGE_CAPTURE”。</string>
<string name="errorRunningRule">运行规则时出错。</string>
<string name="cantFindSoundFile">找不到声音文件 %1$s无法播放。</string>
<string name="addParameters">添加参数</string>
<string name="com.wireguard.android.permission.CONTROL_TUNNELS">控制 WireGuard 应用的隧道</string>
<string name="startAppSelectionType">选择应用\n的方法</string>
<string name="startAppByActivity">按活动</string>
<string name="startAppByAction">按动作</string>
<string name="enterValidAction">输入有效的动作</string>
<string name="enterPackageName">输入有效的包名。</string>
<string name="state">状态</string>
<string name="phoneNumberExplanation">您可以输入特定的远程电话号码,但不是必填的。若要指定一个号码,可以从通讯录中选择或手动输入。此外,还可以使用正则表达式。要测试正则表达式,建议使用这个页面:</string>
<string name="importConfiguration">导入配置</string>
<string name="exportConfiguration">导出配置</string>
<string name="moreSettings">更多设置</string>
<string name="configurationExportedSuccessfully">配置导出成功。</string>
<string name="ConfigurationExportError">导出配置时出错。</string>
<string name="rulesImportedSuccessfully">规则和位置导入成功。</string>
<string name="rulesImportError">导入规则和位置时出错。</string>
<string name="configurationImportedSuccessfully">配置导入成功。</string>
<string name="prefsImportError">导入设置时出错。</string>
<string name="noApplicableFilesFoundInDirectory">该目录中找不到适用的文件。</string>
<string name="noFilesImported">无法导入任何文件。</string>
<string name="notAllFilesImported">并非所有适用的文件都能导入。</string>
<string name="importExportExplanation">点击导入或导出时,您可以选择导入或导出文件的目录。导出时可能会覆盖现有文件。</string>
<string name="intentDataComment">如果参数是 Uri 类型并指定名称为“IntentData”不区分大小写则该参数将不会作为普通参数用 putExtra() 添加,而是用 setData() 添加到 Intent 中。</string>
<string name="stringNotAllowed">不允许使用字符串 %1$s。</string>
<string name="startAppStartType">选择启动类型</string>
<string name="startAppByStartActivity">通过 startActivity()</string>
<string name="startAppBySendBroadcast">通过 sendBroadcast()</string>
<string name="openExamplesPage">打开示例网页</string>
<string name="packageName">包名</string>
<string name="activityOrActionName">活动/动作名称</string>
<string name="warning">警告</string>
<string name="ringing">响铃</string>
<string name="from"></string>
<string name="to"></string>
<string name="matching">匹配</string>
<string name="loadWifiList">加载 WLAN 列表</string>
<string name="needLocationPermForWifiList">您的设备已连接过的 WLAN 列表可用于确定您去过的地点。因此,加载 WLAN 列表需要位置权限。若要从列表中选择 WLAN就需要授予该权限。如果不想这样您仍然可以手动输入 WLAN 名称。</string>
<string name="noKnownWifis">您的设备上没有已知的 WLAN。</string>
<string name="urlToTriggerExplanation">此功能不会打开浏览器,而是在后台触发网址。例如可以使用此功能向智能家居发送命令。</string>
<string name="automaticUpdateCheck">检查更新</string>
<string name="automaticUpdateCheckSummary">仅适用于 APK 版本。</string>
<string name="updateAvailable">有可用更新。要打开浏览器下载吗?</string>
<string name="locationFound">位置已找到。建议的最小半径为 %1$d 米。</string>
<string name="locationFoundInaccurate">只能找到精度有限的位置。可能不太可靠。建议的最小半径为 %1$d。</string>
<string name="clone">克隆</string>
<string name="noLocationCouldBeFound">无法找到位置,超时时间 %1$s 秒已到。</string>
<string name="pleaseGiveBgLocation">下一个屏幕中请转到权限 - 位置,选择“始终允许”以允许 Automation 在后台确定您的位置。</string>
<string name="vibrate">振动</string>
<string name="test">测试</string>
<string name="VibrateExplanation">输入振动时间,后跟逗号,然后是暂停时间。可以根据需要连接任意数量的振动(同样用逗号分隔)。例如,模式 100,500,500,1000,100 会振动 100、等待 500、振动 500、等待 1000、振动 100 毫秒。如果发现丢掉了一次振动,请尝试增加它之前的暂停。</string>
<string name="pleaseEnterValidVibrationPattern">请输入有效的振动模式。</string>
<string name="newsOptIn">您愿意在主屏幕上接收有关此应用的新闻吗(仅重要的)?它们是从开发者的网站下载的。不会有侵入性通知,只是打开应用时主屏幕上显示文本。</string>
<string name="top">顶部</string>
<string name="bottom">底部</string>
<string name="tabsPlacement">标签栏位置</string>
<string name="tabsPlacementSummary">选择标签栏的位置。</string>
<string name="wifiApi30">因为 Google 又破坏了 Android 的部分功能,从 API 30 开始只能显示当前可见的 WLAN而不是设备已连接过的所有 WLAN。</string>
<string name="silentTriggersDnd">注意:在较新的设备上,静音模式通常会触发勿扰。如果您的设备出现这种情况,建议改用正常模式并将所有音量降低为零。</string>
<string name="tones">提示音</string>
<string name="miscellaneous">杂项</string>
<string name="dnd">勿扰</string>
<string name="dndOff">关闭勿扰</string>
<string name="dndPriority">仅限优先事项通知</string>
<string name="dndAlarms">仅限闹钟</string>
<string name="dndNothing">完全阻止</string>
<string name="dndRemarks">详细设置(如允许通话、选择特定号码等)只能在系统设置更改。</string>
<string name="automationNotificationsIgnored">如果不选择特定应用,而是选择“任何应用”,则会忽略来自 Automation 的通知以避免循环。</string>
<string name="repeatEveryXseconds">每 x 秒重复一次</string>
<string name="repeatEveryXsecondsWithVariable">每 %1$s 秒重复一次</string>
<string name="enterRepetitionTime">请输入正整数的重复时间。</string>
<string name="elementSkipped">无法读取配置文件的某个元素。该文件可能是由较新的程序版本创建的。</string>
<string name="donate">捐赠</string>
<string name="btTetheringNotice">此功能已确认在 Android 8.0 之前有效。从某个更高版本开始它就失效了,但是由于缺少物理设备,我不知道是哪个版本。在 Android 11 上它肯定失效了。如果您有两者之间的版本,请告诉我此功能是否有效。</string>
<string name="notice">注意</string>
<string name="deviceOrientation">设备方向</string>
<string name="tolerance">公差 (0-180)</string>
<string name="orientationAzimuth">方位角:</string>
<string name="orientationPitch">俯仰角:</string>
<string name="orientationRoll">倾侧角:</string>
<string name="enterValidNumbersIntoAllFields">请在所有字段中输入有效数字。</string>
<string name="deviceOrientationExplanation">设备移动时以下数字会更新。以下是设备的当前方向(以度为单位)。如果处于所需的方向,请点击应用按钮将当前值复制到所需字段。因为再次达到这个精确方向的可能性很小,所以还必须输入公差。公差是方向可以在两侧偏离的度数。因此 15° 对应 30° 的总角度,两侧各 15°。如果您只关心某个轴请为其他两个轴指定 180° 的公差。</string>
<string name="wouldCurrentlyApply">当前符合吗?</string>
<string name="deviceIsInCertainOrientation">设备处于特定方向</string>
<string name="toleranceOf180OnlyAllowedIn2Fields">仅允许 2 个公差字段为 180不允许 3 个均为此值。否则触发器将始终应用。</string>
<string name="unknown">未知</string>
<string name="orientation">方向</string>
<string name="triggerWrong">这个触发器有问题。无法正确加载。</string>
<string name="turnScreenOnOrOff">打开或关闭屏幕</string>
<string name="turnScreenOn">打开屏幕</string>
<string name="turnScreenOff">关闭屏幕</string>
<string name="mustApply">必须符合</string>
<string name="deviceOrientationTimeAcceptIntervalTitle">信号频率</string>
<string name="deviceOrientationTimeAcceptIntervalSummary">每 x 毫秒接收一次新的运动信号</string>
<string name="deviceOrientationSettings">设备方向设置</string>
<string name="android.permission.BIND_DEVICE_ADMIN">设备管理员</string>
<string name="deviceAdminNote">您创建的至少 1 条规则需要设备管理员权限。</string>
<string name="explanationDeviceOrientationDirection">如果选中该复选框,则要求设备必须处于您指定的方向。如果未选中,任何不符合设定的方向都可接受。</string>
<string name="permissionsRequiredNotAvailable">您的规则需要权限,而已安装的 Automation 版本无法请求这些权限。</string>
<string name="smsDialogNotice">如果您没有在本程序中使用过发送短信操作Android 可能会显示一个额外的确认对话框,请求您允许发送消息。如果希望此动作可在后台运行,您需要选中“始终允许”复选框并确认。建议手动运行一次此规则以触发此确认对话框。</string>
<string name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS">从电池优化中排除</string>
<string name="recommendedForBetterReliability">推荐,可提高可靠性</string>
<string name="needsToBeActive">需要激活</string>
<string name="checkSettings">检查设置</string>
<string name="profileActive">情景模式 %1$s 已激活</string>
<string name="profileNotActive">情景模式 %1$s 未激活</string>
<string name="profileTriggerCheckSettings">如果未禁用此复选框,则仅检查所选情景模式是否上次激活。从外部更改任何声音相关设置都没有影响。然而,如果启用此复选框,则当前音频设置确实需要和情景模式中定义的相同。注意:目前尚不支持检查铃声文件。</string>
<string name="ruleXIsUsingProfileY">无法删除此情景模式。规则 %1$s 引用了情景模式 %2$s。</string>
<string name="profileCouldNotBeDeleted">无法删除情景模式。</string>
<string name="noRepetition">无重复</string>
<string name="usingAuthentication">使用身份验证</string>
<string name="toNumber">到号码</string>
<string name="message">信息</string>
<string name="onDays">在星期中的</string>
<string name="notSet">未设置</string>
<string name="takeLauncherActivity">自动查找</string>
<string name="pickActivityManually">手动选择</string>
<string name="launcherOrManualExplanation">简易模式Automation 可以尝试自动识别该程序的启动器活动,或者您也可以手动选择该应用的一个活动。您想要怎么做?</string>
<string name="launcherNotFound">无法识别此应用的启动器活动。必须手动选择。</string>
<string name="createNotification">创建通知</string>
<string name="enterTitle">输入标题。</string>
<string name="enterText">输入文本。</string>
<string name="info">信息</string>
<string name="profileWasNotFound">此规则使用的情景模式似乎已不存在。已选择按字母顺序排列的第一个。</string>
<string name="notificationCloseActionExplanation">若不指定任何条件,则此动作将关闭所有通知。因此,建议至少指定应用、标题或文本之一。</string>
<string name="closeNotifications">关闭通知</string>
<string name="comparisonCaseInsensitive">比较不区分大小写</string>
<string name="profileWarning">此处的设置可能会导致您无法再注意到手机中的某些内容,甚至可以让您的起床闹钟静音。所以无论怎样设置——强烈建议测试,在 Android 更新之后也要再测试。</string>
<string name="ifString">如果</string>
<string name="emailContactNotice">电子邮件是向我报告错误、提出问题或建议的首选联系方式。前往控制中心了解更多信息。\n许多问题无法立即解答需要进行一些技术研究。所以请耐心等待。</string>
<string name="controlCenter">控制中心</string>
<string name="sendEmailToDev">向开发者发送电子邮件</string>
<string name="screenIs">屏幕 %1$s</string>
<string name="on">开启</string>
<string name="off">关闭</string>
<string name="unlocked">解锁</string>
<string name="selectDesiredState">选择所需状态</string>
<string name="screenState">屏幕状态</string>
<string name="featureCeasedToWorkLastWorkingAndroidVersion">由于 Google 的无限智慧,已知可以使用此功能的最后一个 Android 版本是 %1$s。您可以配置它但它可能没有任何效果。</string>
<string name="actionMediaControl">控制媒体播放</string>
<string name="selectCommand">选择命令</string>
<string name="playPause">切换播放/暂停</string>
<string name="play">播放</string>
<string name="pause">暂停</string>
<string name="previous">上一个</string>
<string name="next">下一个</string>
<string name="android.permission.MEDIA_CONTENT_CONTROL">控制媒体播放</string>
<string name="stop">停止</string>
<string name="pleaseSelectActionValue">请选择一个动作!</string>
<string name="actionMediaControlNotice">注意此操作可能不适用于所有播放器。即使适用,也可能不是每个按钮都可用。</string>
<string name="musicPlaying">音乐播放</string>
<string name="selectParameters">选择参数</string>
<string name="musicIsPlaying">正在播放音乐</string>
<string name="musicIsNotPlaying">未在播放音乐</string>
<string name="musicPlayingDetection">音乐播放检测</string>
<string name="musicCheckFrequencyTitle">检测频率 [ms]</string>
<string name="musicCheckFrequencySummary">检测之间的毫秒数</string>
<string name="locationNotWorkingOn12">目前获取位置似乎在 Android 12 设备上无效。如果在你的设备上无效,我很抱歉。我找到原因后会尽快解决。所以如果圆圈不停止旋转,你就知道为什么了。</string>
<string name="lastProfile">最后的情景模式:</string>
<string name="queryAllPackages">获取已安装应用列表</string>
<string name="timeFrameDaysHint">如果您使用的时间范围跨过午夜,希望触发器在午夜之后也应用,您还需要选择第二天。</string>
<string name="featureNotInGooglePlayVersion">此功能在 Google Play 版本中不再可用。\n\nGoogle 时常欺负开发者。要想继续使用某些功能,就必须提交文件。不幸的是,文件被拒绝的可能性为 99%。这很像 Asterix 漫画/电影中的情况。\n\n以前我花了数周时间与他们争论这类情况但不断遭到拒绝 - 要么是被机器人拒绝,要么是和机器人同样聪明的人。最后我只能决定是从 Play 商店中完全删除此应用,还是删除此功能。\n如果您需要这些功能请考虑使用我网站上的 APK 版本或 F-Droid 中的版本。</string>
<string name="startActivityInsertManually">此限制仅涉及应用选择,不涉及实际启动。因此,如果您知道应用名称,您仍然可以手动输入它。</string>
<string name="deviceStarts">设备启动</string>
<string name="serviceStarts">服务启动</string>
<string name="deviceIsStarting">设备正在启动</string>
<string name="serviceIsStarting">服务正在启动</string>
<string name="broadcastReceived">收到广播</string>
<string name="broadcastNotReceived">未收到广播</string>
<string name="explanationBroadcastTrigger">您手机上的大多数事件将通过在整个操作系统中广播来“发布”。\n例如打开/关闭飞行模式将触发这样的广播。这些广播不是自动可见/可听的,但如果某个应用(如 Automation感兴趣它可以连接到广播。当广播发生时它就会收到通知并可以做出反应。\n\n您可以在此处定义应用将等待的广播事件。您可以手动输入从某处复制粘贴或从建议列表中选择一个。由于此触发器应该非常灵活我无法提供有关这些项目的解释。\n\n建议列表并不完整。请访问以下网址查看 Android 文档。\n此外任何应用都可以发送自定义事件当然这些事件不会出现在 Android 文档中。\n\n许多广播需要特定权限才能工作。我会尝试在我知道需要的地方请求权限。如果您认为输入的动作需要某个权限请告诉我。\n\n“未收到”表示自服务启动后尚未收到这种广播。响应某些参数正在开发中。</string>
<string name="broadcastReceivedTitle">收到广播</string>
<string name="logsExplanation">为避免不必要的存储损耗,默认不保存日志。因此,如果您遇到问题,请先在设置中启用日志,并将日志级别设置为 5然后重现问题。只有这样才能附加日志。</string>
<string name="broadcastsShowSuggestions">显示建议</string>
<string name="selectBroadcast">选择广播</string>
<string name="lockedWithoutSecurity">锁定(仅滑动,无 PIN</string>
<string name="lockedWithSecurity">锁定(使用 PIN 等)</string>
<string name="lockedCommentScreenMustBeOff">任何锁定状态都只能在屏幕关闭时检测到。</string>
<string name="emailPretext">如果您想报告错误、提出建议或问题,请在电子邮件中写下内容。不要只给我发送附件和默认邮件正文。除非我们已经在对话中,否则我会忽略这些。</string>
<string name="sendBroadcast">发送广播</string>
<string name="enterBroadcast">输入广播操作。</string>
<string name="broadcastExplanation">此动作允许通过 Android 消息系统发送广播。这对用户不可见,但侦听该特定广播的应用可以响应广播发送。</string>
<string name="directionStringDoesNotContain">不包含</string>
<string name="runExecutable">运行脚本或可执行文件</string>
<string name="path">路径</string>
<string name="parameters">参数</string>
<string name="chooseExecutable">选择可执行文件</string>
<string name="runAsRoot">以 root 身份运行</string>
<string name="selectValidExecutable">选择有效的可执行文件。</string>
<string name="fileNotExecutable">该文件不是可执行文件。</string>
<string name="wifiExplanation1">以 Android Q 或更高版本为目标平台的应用无法再打开或关闭 WLAN。请将此限制归咎于 Google而不是我。您可以通过 root 您的设备并选中下面的复选框来绕过此限制。也可以从 F-Droid 或我的网站下载此应用,因为这些版本不强制以最新的 API 级别为目标平台。</string>
<string name="wifiExplanation2">当启用飞行模式时,应用只能使用 root 权限切换 WLAN。</string>
<string name="usingRoot">使用 root</string>
<string name="runExecutableExplanation">您可以在此处选择将作为动作执行的脚本或可执行文件。\n\n但是您必须自己处理一些先决条件。Google 已经让运行常规 Android 应用以外的任何程序变得非常困难。\n\n1. 该脚本需要标记为可执行。在普通的 Android 系统(没有 root这实际上是困难的部分。\n\n2. 这也意味着 Automation 必须能够执行文件,而不仅仅是所有者或组。\n\n3. 如果是脚本,则必须在脚本的标头中指定有效的 shell。\n\n如果无法满足上述要求您也可以尝试将一个 shell 指定为实际的可执行文件(例如 /system/bin/sh将脚本作为参数。这对至少一个用户有效。</string>
<string name="tetheringActive">网络共享已激活</string>
<string name="tetheringNotActive">网络共享未激活</string>
<string name="tetheringState">网络共享状态</string>
<string name="regularExpressionsIfEquals">如果选择“等于”,您可以输入正则表达式。</string>
<string name="enter_a_number">输入一个数字。</string>
<string name="duration">持续时间 [ms]</string>
<string name="keepDeviceAwake">保持设备唤醒</string>
<string name="wakeLockTimeout">指定超时</string>
<string name="wakeLockExplanation">启用会保持屏幕打开,停用则允许屏幕关闭。要保持打开状态,可以输入一个持续时间(之后屏幕就可以关闭),也可以无限期保持打开。在后一种情况下,您需要创建另一个保持唤醒操作(在本规则或其他规则中)并选择停用。</string>
<string name="mayUseRegularExpressions">此处也可以输入正则表达式。</string>
<string name="simplyDismissNotification">直接关闭</string>
<string name="clickNotificationButton">点击一个按钮</string>
<string name="withButton">使用按钮 %1$s</string>
<string name="subSystemState">子系统状态</string>
<string name="bluetooth">蓝牙</string>
<string name="locationRequiredToDetermineWifiName">要获取 WLAN SSID应用需要位置权限。由于 Google 版本无法获取该权限,使用此触发器时只能不指定 SSID。因此只能用于检测 WLAN 是否连接。</string>
<string name="usb">USB</string>
<string name="type">类型</string>
<string name="cable">网线</string>
<string name="tetheringBluetoothNotPossible">目前无法检测蓝牙网络共享。只有其他连接方式才会激活此触发器。</string>
<string name="startPhoneCall">拨打电话号码</string>
<string name="android.permission.CALL_PHONE">拨打电话号码</string>
<string name="makePhoneCallExplanation1">此处可以输入一个电话号码,该号码会无提示直接拨打。可以用它来进行如调整呼叫转移等设置。请自行搜索所需的代码。</string>
<string name="endPhoneCall">结束通话</string>
<string name="android.permission.ANSWER_PHONE_CALLS">结束通话</string>
<string name="setVariable">设置变量</string>
<string name="deleteVariable">删除变量</string>
<string name="VariableKey">变量名</string>
<string name="variableValue">变量值</string>
<string name="setVariableExplanation">如果将变量设置为空值,它将被删除。</string>
<string name="enterVariableKey">输入变量名。</string>
<string name="checkVariable">检查变量</string>
<string name="checkVariableExplanation">如果值留空,则变量必须未设置才能满足条件。</string>
<string name="variableCheckString">如果变量 %1$s 是 %2$s</string>
<string name="variableCheckStringDeleted">如果变量 %1$s 未设置</string>
<string name="messageType">消息类型</string>
<string name="sms">短信</string>
<string name="mms">彩信</string>
<string name="attachment">附件</string>
<string name="chooseFile">选择文件</string>
<string name="startAppByStartService">通过 startService()</string>
<string name="showToastsForEvents">显示消息框</string>
<string name="showToastsForEventsSummary">当规则执行等事件发生时显示消息框</string>
<string name="notificationAccessAndroid13">点击“确定”后,选择 Automation然后选择“授予通知使用权”然后选择“允许”。\n\n在某些系统上此设置是灰色的。这种情况下需要前往“设置”->“应用”->“Automation”->3点菜单->解除这些限制。之后返回这里。</string>
<string name="displayLanguage">显示语言</string>
<string name="displayLanguageSummary">为应用设置自定义语言</string>
<string name="wifiMonitoringAlsoRequiresThis">如果触发器使用当前的 WLAN 连接,则也需要此权限。</string>
<string name="copyTextToClipboard">将文本复制到剪贴板</string>
<string name="textToCopy">要复制的文本</string>
<string name="android.permission.SYSTEM_ALERT_WINDOW">显示在其他应用的上层</string>
<string name="overlayPermissionHint">点击“确定”后,您将转到一个系统对话框。请在其中选择 Automation 并允许“显示在其他应用的上层”。</string>
<string name="variablesOnlyForTypes">变量仅适用于 String 和 URI 参数类型</string>
<string name="languageSystemDefault">系统默认</string>
<string name="languageEnglish">英语</string>
<string name="languageGerman">德语</string>
<string name="languageItalian">意大利语</string>
<string name="languageSpanish">西班牙语</string>
<string name="languageDutch">荷兰语</string>
<string name="languageRussian">俄语</string>
<string name="languageFrench">法语</string>
<string name="languagePolish">波兰语</string>
<string name="languageChineseChina">中文(中国)</string>
<string name="intentParametersHint">若要指定一个参数,还必须点击“添加 Intent 对”,否则更改不会保存。</string>
</resources>

View File

@ -31,7 +31,8 @@
<item name="5">@string/languageDutch</item> <item name="5">@string/languageDutch</item>
<item name="6">@string/languageRussian</item> <item name="6">@string/languageRussian</item>
<item name="7">@string/languageFrench</item> <item name="7">@string/languageFrench</item>
<item name="7">@string/languagePolish</item> <item name="8">@string/languagePolish</item>
<item name="9">@string/languageChineseChina</item>
</string-array> </string-array>
<string-array name="displayLanguageValues"> <string-array name="displayLanguageValues">
@ -44,6 +45,7 @@
<item name="6">ru</item> <item name="6">ru</item>
<item name="7">fr</item> <item name="7">fr</item>
<item name="8">pl</item> <item name="8">pl</item>
<item name="9">zh_CN</item>
</string-array> </string-array>
<string-array name="tabsPlacementOptions"> <string-array name="tabsPlacementOptions">
@ -66,4 +68,5 @@
<string name="languageRussian">Russian</string> <string name="languageRussian">Russian</string>
<string name="languageFrench">French</string> <string name="languageFrench">French</string>
<string name="languagePolish">Polish</string> <string name="languagePolish">Polish</string>
<string name="languageChineseChina">Chinese (China)</string>
</resources> </resources>

View File

@ -0,0 +1,4 @@
* Behoben: [Variablenname] wurde am Ende fälschlicherweise durch ein ] ersetzt
* Behoben: Benutzerdefinierte Sprache einstellen
* Behoben: Sonderzeichen beim Ausführen von Telefonanrufen wurden nicht kodiert
* Hinzugefügt: Chinesische Übersetzung (vereinfacht)

View File

@ -0,0 +1,4 @@
* Fixed: [variable-name] was incorrectly replaced with an ] at the end
* Fixed: Set custom language
* Fixed: Special characters in making phone call action were not encoded
* Added: Chinese translation (simplified)

View File

@ -0,0 +1,4 @@
* Corregido: [variable-name] fue reemplazado incorrectamente por un ] al final
* Corregido: Establecer idioma personalizado
* Corregido: Los caracteres especiales al realizar la acción de llamada telefónica no estaban codificados
* Añadido: traducción al chino (simplificada)

View File

@ -0,0 +1,4 @@
* Correction : [nom_variable] a été remplacé à tort par un ] à la fin
* Corrigé: Définir la langue personnalisée
* Correction : les caractères spéciaux dans l'action d'appel téléphonique n'étaient pas codés
* Ajouté: Traduction chinoise (simplifiée)

View File

@ -0,0 +1,4 @@
* Risolto: [nome-variabile] è stato erroneamente sostituito con un ] alla fine
* Risolto: imposta la lingua personalizzata
* Risolto: i caratteri speciali nell'effettuare un'azione di chiamata telefonica non sono stati codificati
* Aggiunto: traduzione cinese (semplificata)

View File

@ -0,0 +1,4 @@
* Opgelost: [variabele-naam] is ten onrechte vervangen door een ] aan het einde
* Opgelost: Stel aangepaste taal in
* Opgelost: Speciale tekens bij het maken van telefoongesprek actie waren niet gecodeerd
* Toegevoegd: Chinese vertaling (vereenvoudigd)

View File

@ -0,0 +1,4 @@
* Naprawiono: [zmienna-nazwa] została niepoprawnie zastąpiona ] na końcu
* Naprawiono: Ustaw niestandardowy język
* Naprawiono: Znaki specjalne w wykonywaniu czynności połączenia telefonicznego nie były kodowane
* Dodano: Chińskie tłumaczenie (uproszczone)

View File

@ -0,0 +1,4 @@
* Исправлено: [имя-переменной] было неправильно заменено на ] в конце
* Исправлено: Установить пользовательский язык
* Исправлено: Специальные символы при совершении действия телефонного звонка не кодировались
* Добавлено: Китайский перевод (упрощенный)

View File

@ -0,0 +1,4 @@
* 修复:[变量名]末尾被错误地替换为]
* 修复:设置自定义语言
* 修复:拨打电话动作时的特殊字符未编码的问题
* 新增:中文翻译(简体)

View File

@ -0,0 +1,64 @@
创建由触发器和动作组成的规则。典型的例子是“在公司将手机静音”等。
以下是支持的触发器和动作列表:
支持的触发器:
* 位置
* 日期/时间
* 充电状态
* 电池电量
* USB 已连接到电脑
* 您当前的速度
* 背景噪声(仅 Android 7 以下)
* WLAN 连接
* 其他应用运行
* 飞行模式
* 漫游状态
* NFC 标签
* 蓝牙连接
* 耳机连接
* 通话中
* 其他应用的通知
* 设备方向(陀螺仪)
* 情景模式是否激活
* 其他应用的广播
* 已设置的变量
支持的动作:
* 更改 WLAN 状态
* 更改蓝牙状态
* 切换 USB 网络共享
* 切换 WLAN 网络共享
* 切换蓝牙网络共享
* 切换自动屏幕旋转
* 发出 HTTP 请求
* 更改铃声/声音设置
* 启动另一个应用
* 等待(在其他动作之间)
* 打开或关闭屏幕
* 切换飞行模式
* 切换移动数据连接
* 朗读文字
* 打开音乐播放器
* 更改屏幕亮度
* 发送短信
* 播放声音文件
* 创建通知
* 设置变量
* 发起通话
保持这个应用在各种不同硬件、Android 版本的大量更改中正常运行是很困难的。我可以在模拟器中测试,但这样不能显示所有的错误。
因此,如果某个功能无法在您的设备上运行——请告诉我。多年来,我已经修复了几乎所有合理地报告给我的错误。但为此我依赖于您的输入。
如果您有问题并考虑和我联系,请
- 首先更新到最新版本,看看您的问题是否也存在。
- 首先检查这个已知问题列表https://server47.de/automation/index.php#knownProblems
捐赠当然是好事,但不是激励我的唯一方式 :-)
* 如果您想支持我,您还可以在 Google Play (https://play.google.com/store/apps/details?id=com.jens.automation2) 对这个应用留下好评。
* 如果您喜欢这个应用,若可以用电子邮件给我发几句友好的话,我将不胜感激。
* 此外,我随时欢迎您提供翻译应用的帮助。我自己会说英语、德语和一些西班牙语,意大利语和俄语已经完成了。其他所有语言我都非常欢迎。
* 如果您在平面设计方面有天赋或经验,有一些更好图标的想法,请告诉我。
* 如果您有一个有趣的用例,或找到了一种方法来组合触发器与动作实现特别的事情,并且您认为值得放在示例页面 (https://server47.de/automation/examples.html) ,请告诉我。
可以在此处找到各个权限的解释https://server47.de/automation/permissions.php

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

View File

@ -0,0 +1 @@
通过创建规则自动化您设备上的事项。