2017-04-18 2464 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啓動我的應用程序。在這種情況下停止應用程序服務關閉後。如果我通過手動啓動應用程序服務不會關閉