Как получить ключевые события в сервисе?

$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;
6
задан user388759 12 July 2010 в 15:51
поделиться

3 ответа

Да, операции Android получают KeyEvents только тогда, когда у них есть фокус.

Единственный способ «глобально» зафиксировать нажатие кнопки «Назад» - это создать InputMethod , чтобы можно было перехватывать события аппаратных клавиш. Помните, что использование вашего собственного InputMethod не позволит вам использовать пользовательские клавиатуры, например Swiftkey .

Пытались ли вы связаться с HTC по этому поводу?

1
ответ дан 17 December 2019 в 18:09
поделиться

Можно получить события кнопки аппаратного ключа при помощи сервиса доступности, только необходимо включить сервис путем движения в настройки доступности после установки приложения. Вот код

    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"/>
0
ответ дан 17 December 2019 в 18:09
поделиться

Служба не имеет пользовательского интерфейса, поэтому она не получает никаких данных от пользователя.

Теперь, если у вас было действие, которое управляло службой, вы могли бы заставить службу делать что-то особенное при нажатии клавиши возврата во время вашего действия.

1
ответ дан 17 December 2019 в 18:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: