সতর্কতা: গুগল প্লে লঙ্ঘন
গুগল হুমকি দিয়েছে প্লে স্টোর থেকে অ্যাপ্লিকেশনগুলি অ্যাক্সেসযোগ্যতার উদ্দেশ্যে অ্যাক্সেসযোগ্যতার পরিষেবাগুলি ব্যবহার করলে তারা সরানোর হুমকি দেয় । তবে এটি পুনর্বিবেচনা করা হচ্ছে বলে জানা গেছে ।
উপকারিতা
- অ্যান্ড্রয়েড 7.1 (এপিআই 25) এর মাধ্যমে অ্যান্ড্রয়েড 2.2 (এপিআই 8) এ পরীক্ষিত এবং কাজ করছে।
- ভোটদানের প্রয়োজন নেই।
GET_TASKS
অনুমতি প্রয়োজন হয় না ।
অসুবিধেও
- প্রতিটি ব্যবহারকারীর অবশ্যই অ্যান্ড্রয়েডের অ্যাক্সেসযোগ্যতার সেটিংসে পরিষেবাটি সক্ষম করতে হবে।
- এটি 100% নির্ভরযোগ্য নয়। মাঝেমধ্যে ইভেন্টগুলি অফ-অর্ডারে আসে।
- পরিষেবাটি সর্বদা চলমান।
- যখন কোনও ব্যবহারকারী এটি সক্ষম করার চেষ্টা করে
AccessibilityService
, কোনও অ্যাপ্লিকেশন যদি স্ক্রিনে ওভারলে রাখে তবে তারা ঠিক আছে বোতামটি টিপতে পারবেন না। এমন কিছু অ্যাপ্লিকেশনগুলি যা ভেলিস অটো ব্রাইটনেস এবং লাক্স। এটি বিভ্রান্তিকর হতে পারে কারণ ব্যবহারকারীরা জানেন না কেন তারা বোতামটি টিপতে পারে না বা কীভাবে এটি ব্যবহার করতে পারে।
AccessibilityService
প্রথম পর্যন্ত বর্তমান কার্যকলাপ জানবে না পরিবর্তন কার্যকলাপের।
উদাহরণ
সেবা
public class WindowChangeDetectingService extends AccessibilityService {
@Override
protected void onServiceConnected() {
super.onServiceConnected();
//Configure these here for compatibility with API 13 and below.
AccessibilityServiceInfo config = new AccessibilityServiceInfo();
config.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
config.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
if (Build.VERSION.SDK_INT >= 16)
//Just in case this helps
config.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
setServiceInfo(config);
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
if (event.getPackageName() != null && event.getClassName() != null) {
ComponentName componentName = new ComponentName(
event.getPackageName().toString(),
event.getClassName().toString()
);
ActivityInfo activityInfo = tryGetActivity(componentName);
boolean isActivity = activityInfo != null;
if (isActivity)
Log.i("CurrentActivity", componentName.flattenToShortString());
}
}
}
private ActivityInfo tryGetActivity(ComponentName componentName) {
try {
return getPackageManager().getActivityInfo(componentName, 0);
} catch (PackageManager.NameNotFoundException e) {
return null;
}
}
@Override
public void onInterrupt() {}
}
Andro আইডি
এটি আপনার প্রকাশ্যে মার্জ করুন:
<application>
<service
android:label="@string/accessibility_service_name"
android:name=".WindowChangeDetectingService"
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/accessibilityservice"/>
</service>
</application>
পরিষেবা তথ্য
এটি রাখুন res/xml/accessibilityservice.xml
:
<?xml version="1.0" encoding="utf-8"?>
<!-- These options MUST be specified here in order for the events to be received on first
start in Android 4.1.1 -->
<accessibility-service
xmlns:tools="http://schemas.android.com/tools"
android:accessibilityEventTypes="typeWindowStateChanged"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagIncludeNotImportantViews"
android:description="@string/accessibility_service_description"
xmlns:android="http://schemas.android.com/apk/res/android"
tools:ignore="UnusedAttribute"/>
পরিষেবা সক্ষম করা হচ্ছে
অ্যাপ্লিকেশনটির প্রতিটি ব্যবহারকারীর AccessibilityService
এটির ব্যবহারের জন্য স্পষ্টভাবে সক্রিয় করতে হবে। কীভাবে এটি করা যায় তার জন্য এই স্ট্যাকওভারফ্লো উত্তরটি দেখুন ।
নোট করুন যে কোনও অ্যাপ্লিকেশন যদি স্ক্রিনে ভেলিস অটো উজ্জ্বলতা বা লাক্সের উপর কোনও ওভারলে স্থাপন করে থাকে তবে অ্যাক্সেসযোগ্যতা পরিষেবা সক্ষম করার চেষ্টা করার সময় ব্যবহারকারী অ্যাক্সেসযোগ্যতা পরিষেবা সক্ষম করার চেষ্টা করতে পারবেন না।