$ip = "";
if (!empty($_SERVER["HTTP_CLIENT_IP"]))
{
//check for ip from share internet
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
// Check for the Proxy User
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
else
{
$ip = $_SERVER["REMOTE_ADDR"];
}
echo $ip;
Да, операции Android получают KeyEvents
только тогда, когда у них есть фокус.
Единственный способ «глобально» зафиксировать нажатие кнопки «Назад» - это создать InputMethod , чтобы можно было перехватывать события аппаратных клавиш.
Помните, что использование вашего собственного InputMethod
не позволит вам использовать пользовательские клавиатуры, например Swiftkey .
Пытались ли вы связаться с HTC по этому поводу?
Можно получить события кнопки аппаратного ключа при помощи сервиса доступности, только необходимо включить сервис путем движения в настройки доступности после установки приложения. Вот код
public class AccessiblityService extends AccessibilityService {
@Override
protected void onServiceConnected() {
super.onServiceConnected();
Log.d(TAG, "service is connected");
}
@Override
public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
Log.d(TAG, "onAccessibiltyEvent" + accessibilityEvent.toString());
}
@Override
public void onInterrupt() {
}
// here you can intercept the keyevent
@Override
protected boolean onKeyEvent(KeyEvent event) {
return handleKeyEvent(event);
}
private boolean handleKeyEvent(KeyEvent event) {
int action = event.getAction();
int keyCode = event.getKeyCode();
if (action == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
//do something
return true;
case KeyEvent.KEYCODE_VOLUME_UP: {
//do something
return true;
}
}
}
return false;
}
}
manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.mypackagename">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<service
android:name=".AccessiblityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service" />
</service>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
, accessibility_service.xml //создает его в "xml" каталоге
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:canRequestFilterKeyEvents="true"
android:accessibilityFlags="flagRequestFilterKeyEvents"/>
Служба не имеет пользовательского интерфейса, поэтому она не получает никаких данных от пользователя.
Теперь, если у вас было действие, которое управляло службой, вы могли бы заставить службу делать что-то особенное при нажатии клавиши возврата во время вашего действия.