2017-04-18 2458 views
0

我写的辅助服务,以避免USSD请求过程中AlertWindow开幕:Xamarin.Android:如何开启无障碍服务永久

[Service(Label = "BalanceAccessibilityService", Permission = "android.permission.BIND_ACCESSIBILITY_SERVICE")] 
[IntentFilter(new string[] { "android.accessibilityservice.AccessibilityService" })] 
public class BalanceAccessibilityService : AccessibilityService 
{ 
    static readonly string Tag = "SmsService:" + typeof(BalanceAccessibilityService).Name; 
    protected override void OnServiceConnected() 
    { 
     base.OnServiceConnected(); 
     AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
     info.Flags = AccessibilityServiceFlags.Default; 
     info.PackageNames = new string[] { "com.android.phone" }; 
     info.EventTypes = EventTypes.WindowStateChanged; 
     info.FeedbackType = FeedbackFlags.Generic; 
     SetServiceInfo(info); 
    } 

    public override void OnAccessibilityEvent(AccessibilityEvent e) 
    { 
     Log.Info(Tag, $"onAccessibilityEvent: type = {e.EventType.ToString()} package = {e.PackageName}"); 

     AccessibilityNodeInfo info = e.Source; 

     if (e.EventType == EventTypes.WindowStateChanged && !e.PackageName.Equals("com.android.phone")) 
      return; 
     if (e.EventType == EventTypes.WindowContentChanged && (info == null || !info.ClassName.Equals("android.widget.TextView"))) 
      return; 
     if (e.EventType == EventTypes.WindowContentChanged && TextUtils.IsEmpty(info.Text)) 
      return; 
     if (Build.VERSION.SdkInt >= BuildVersionCodes.M) 
      PerformGlobalAction(GlobalAction.Back); 
     else 
     { 
      Intent intent = new Intent(Intent.ActionCloseSystemDialogs); 
      SendBroadcast(intent); 
     } 
    } 

    public override void OnInterrupt() 
    { 
     Log.Info(Tag, "OnInterrupt"); 
    } 
} 

所有的工作,但问题是,当我的应用程序停止设置开关 - >辅助功能 - >服务 - > BalanceAccessibilityService关闭。因此,如果我再次启动我的应用程序而无需再次用手切换此切换器,则我的服务无法启动。现在,我用这样的代码,开关等它在MainActivity的onCreate方法:

 Intent intent = new Intent(Settings.ActionAccessibilitySettings); 
     StartActivityForResult(intent, 0); 

,但我认为这是不正常的,因为其他服务,如电网无污染或Android援助是足够多的将其切换一次,他们永远不会自行关闭。 有人可以告诉我我犯了什么错误吗?

+1

您是否每次都使用VS启动您的应用程序? –

+0

@ ElvisXia-MSFT,我不确定我是否试图用手启动它...我现在尝试 – Hermann

+0

@ ElvisXia-MSFT,是的,非常感谢!问题是我使用Xamarin Studio启动我的应用程序。 – Hermann

回答

0

我使用Xamarin Studio启动我的应用程序。在这种情况下停止应用程序服务关闭后。如果我通过手动启动应用程序服务不会关闭