Je pense qu'il pourrait y avoir un moyen de faire que si vous faites votre application un AccessibilityService
(mais vous devez l'activer manuellement après l'installation). Ensuite, dans votre classe AccessibilityService, à l'intérieur de la méthode onAccessibilityEvent
, vous pouvez explorer les vues (récursivement) et effectuer des clics - dans l'exemple ci-dessous, il cliquera sur l'élément TalkBack dans les paramètres - après il devrait basculer le bouton bascule sur l'écran suivant (le astuce est que vous pouvez cliquer sur parent non le point de vue de commutateur lui-même) - Je n'ai pas essayé ce code :)
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
AccessibilityNodeInfo source = event.getSource();
if(event.getEventType()==AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED)
explore(source);
}
private void explore(AccessibilityNodeInfo view){
int count = view.getChildCount();
for(int i=0; i<count; i++){
AccessibilityNodeInfo child = view.getChild(i);
if(!MODE_TALK_BACK_SCREEN){
if(child.getText()!=null && child.getText().toString().toLowerCase().contains("TalkBack")){
child.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
MODE_TALK_BACK_SCREEN=true;
return;
}
}else{
if("ToggleButton".equals(child.getClassName().toString())){ //there ony one toggle button on the screen
child.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
performGlobalAction(GLOBAL_ACTION_BACK);
performGlobalAction(GLOBAL_ACTION_BACK);//need to go back two time - i don't know if that will work :)
return;
}
}
explore(child);
child.recycle();
}
maintenant si vous les paramètres d'accessibilité ouverts avec Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
il effectue des clics pour vous - vous devrait en quelque sorte couvrir avec toast en plein écran ou service avec vue
Je travaille actuellement sur bascule en mode avion automatique et il fonctionne - devrait donc faire le travail dans votre cas
jeter un oeil sur mon serviceconfig.xml
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:packageNames="com.android.settings"
android:accessibilityEventTypes="typeWindowStateChanged"
android:accessibilityFlags="flagDefault"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:canRetrieveWindowContent="true"
android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity"
/>
Est-ce que votre application va être signé une application système? –
Ça pourrait l'être. Est-ce nécessaire pour que cela fonctionne? – John
Cochez cette autre publication sur StackOverflow, [cliquez ici] (http: // stackoverflow.com/questions/10061154/comment-programmer-activer-désactiver-accessibilité-service-dans-android) – Ethan