Служба доступности Android не получает уведомления в oreo - PullRequest
0 голосов
/ 21 сентября 2018

Я добавил доступность Android в свое приложение, и оно отлично работает с устройствами pre oreo, но в oreo я не могу получать вторичные уведомления для приложения.

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

например,

  1. уведомление1 получено от WhatsApp, сервис может его прочитать
  2. уведомление2 получено от WhatsApp, сервис не может прочитать
  3. Уведомление3получено из Gmail, сервис может прочитать
  4. уведомлено4 получено из Gmail, сервис не может прочитать
  5. уведомление5 получено из WhatsApp, сервис не может прочитать

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

Мой код доступа,

    public class NotificationService extends AccessibilityService {

    @Override
    public void onAccessibilityEvent(AccessibilityEvent evt) {
     Toast.makeText(this, "Got event from " + evt.getPackageName(), 
    Toast.LENGTH_SHORT)
            .show();
      }

      @Override
  public void onInterrupt() { }
}

Мой файл манифеста:

<application>
    <activity
        android:name=".MyActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service android:name=".NotificationService" android:enabled="true" 
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
        <meta-data
            android:name="android.accessibilityservice"
            android:resource="@xml/accessibility_service_config" />
        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>
    </service>
</application>

1 Ответ

0 голосов
/ 21 сентября 2018

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

  // To check if service is enabled
        public boolean isAccessibilitySettingsOn(Context mContext) {
            int accessibilityEnabled = 0;
            final String service = getPackageName() + "/" + CustomAccessiblityService.class.getCanonicalName();
            try {
                accessibilityEnabled = Settings.Secure.getInt(
                        mContext.getApplicationContext().getContentResolver(),
                        android.provider.Settings.Secure.ACCESSIBILITY_ENABLED);
                Log.v(getString(R.string.app_name), "accessibilityEnabled = " + accessibilityEnabled);

                //accessibilityEnabled = Settings.Secure.getInt(this.getContentResolver(), Settings.Secure.ACCESSIBILITY_ENABLED);

            } catch (Settings.SettingNotFoundException e) {
                Log.e(getString(R.string.app_name), "Error finding setting, default accessibility to not found: "
                        + e.getMessage());
            }
            TextUtils.SimpleStringSplitter mStringColonSplitter = new TextUtils.SimpleStringSplitter(':');

            if (accessibilityEnabled == 1) {
                Log.v(getString(R.string.app_name), "***ACCESSIBILITY IS ENABLED*** -----------------");
                String settingValue = Settings.Secure.getString(
                        mContext.getApplicationContext().getContentResolver(),
                        Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
                if (settingValue != null) {
                    mStringColonSplitter.setString(settingValue);
                    while (mStringColonSplitter.hasNext()) {
                        String accessibilityService = mStringColonSplitter.next();

                        Log.v(getString(R.string.app_name), "-------------- > accessibilityService :: " + accessibilityService + " " + service);
                        if (accessibilityService.equalsIgnoreCase(service)) {
                            Log.v(getString(R.string.app_name), "We've found the correct setting - accessibility is switched on!");
                            return true;
                        }
                        else{
                            startActivityForResult(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS), 0);
                        }
                    }
                }
            } else {
                Log.v(getString(R.string.app_name), "***ACCESSIBILITY IS DISABLED***");
                startActivityForResult(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS), 0);
            }

            return false;
        }

Попробуйте использовать этот метод в своем сервисе, чтобы не пропустить уведомление снова и снова.Надеюсь, это поможет.Пожалуйста, примите ответ, если это поможет.Благодарю.

...