shweta Kumari
shweta Kumari

Reputation: 1

Not Recieving any Accessibility Event at all

I'm not Recieving any Accessibility Event when app is minimized (in android 14) but it works fine in android 10

Manifest:

<?xml version="1.0" encoding="utf-8"?>

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission
        android:name="android.permission.PACKAGE_USAGE_STATS"
        tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
    <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    
    
    <queries>
        <intent>
            <action android:name="android.intent.action.MAIN" />
        </intent>
    </queries>

    <application
        android:name="MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name="MainActivity"
            android:exported="true">
            <intent-filter>
                <action
                    android:name="android.intent.action.MAIN" />
                <category
                    android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name="CrashActivity" />
        <service
            android:name="ScreenshotService"
            android:foregroundServiceType="mediaProjection"
            android:permission="android.permission.FOREGROUND_SERVICE" />


        <service
            android:name="MyAccessibilityService"
            android:exported="true"
            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_config" />
        </service>


    </application>
</manifest>

Accessibility service:

package aman.astau;

import android.accessibilityservice.AccessibilityService;
import android.app.NotificationManager;
import android.content.Context;
import android.app.NotificationChannel;
import android.app.Notification;
import android.os.Build;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Toast;
import androidx.core.app.NotificationCompat;

public class MyAccessibilityService extends AccessibilityService {

    private static final String CHANNEL_ID = "accessibility_service_channel";
    private static final int NOTIFICATION_ID = 1;

    @Override
    public void onCreate() {
        super.onCreate();
        // Create the notification channel
        createNotificationChannel();
        // Create a persistent notification
        Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
                .setContentTitle("Accessibility Service")
                .setContentText("The service is running in the background")
                .setSmallIcon(android.R.drawable.ic_dialog_info)
                .build();
        
        // Start the service in the foreground
        startForeground(NOTIFICATION_ID, notification);
    }

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        Toast.makeText(getApplicationContext(), "something happened", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onInterrupt() {
        // Handle interruptions (e.g., if the service is turned off)
        Toast.makeText(getApplicationContext() , "interrupted" , 0).show();
    }

    private void createNotificationChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = "Accessibility Service Channel";
            String description = "Channel for accessibility service";
            int importance = NotificationManager.IMPORTANCE_DEFAULT;
            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
            channel.setDescription(description);

            // Register the channel with the system
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            if (notificationManager != null) {
                notificationManager.createNotificationChannel(channel);
            }
        }
    }
}

Config

<accessibility-service
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:notificationTimeout="1000"
    android:canRetrieveWindowContent="true"
    android:canRequestFilterKeyEvents="true"
    android:accessibilityFlags="flagDefault|flagReportViewIds|flagIncludeNotImportantViews"
    android:description="@string/accessibility_service_description" />

I want it work like it worked in android 10

One thing to note - "Mt manager" or "current Activity" etc apps are able to display the whole class names of app

Upvotes: 0

Views: 27

Answers (1)

Aman Raj Aryan
Aman Raj Aryan

Reputation: 1

It's my own question, so the problem is that code was(is) working fine for the purpose, but back then I relied on toast message for logging it worked in android 10 but in android 14, I guess toast message aren't displayed when application is minimised , afterwards I used Log for checking and found it that it is already working fine.

TL;DR - use Log instead of Toast

Upvotes: 0

Related Questions