2016-11-07 9 views
1

私の主な用途はオーバーレイで、オーバーレイはサービスから実行されています。SYSTEM_ALERT_WINDOWを使用するサービスでスクリーンオーバーレイを検出しない

Androidのセキュリティは、私は、ユーザーが権限を変更しようとすると、「検出された画面のオーバーレイ」を避けたい素敵な"Screen Overlay Detected"

追加します。だから...私はAccessiblityServiceを検出して追加する:

しかし、今でも私はこのメッセージがポップしているのを見る。 (私のサービスが止まると...)。

Twilightは問題ありません。

私には何が欠けていますか?

p.s. - 私はまた、署名されたAPKを構築しようとしましたが、まったく同じ動作を見ました。

答えて

1

これを解決できたようです。

a)stopServiceはサービスが停止することを保証していません。 hereを説明したように :これらのバインディングのすべてが削除されるまで

それは破壊されることはありません。サービスのライフサイクルの詳細については、サービスのドキュメントを参照してください。

b)私はstopSelf()という名前のインテントを送信してサービスを停止することができました。 しかし、プロセスの終了/開始は遅くなる可能性があります。

c)最高の解像度:Androidでは表示の視認性がチェックされているようです。サービスを殺すか、何かもっと複雑なことをする必要はありません。

現在の方法私はそれをやっています: - アクセシビリティサービス(既に私のアプリケーションで使用されています)は、 "com.google.android.packageinstaller"というクラスに洗練されていますが、 "com.android.packageinstaller.permission.ui .ManagePermissionsActivityアヒル 『」一度、このクラスでは検出

  • は、我々はする意図を送信』、そして私たちが出ているとき、我々は背中にしている別の意図を送ります。

  • サービスによってこれらの呼び出しを処理します。限りのAndroid 6.xでは、この "オーバーレイアラートが" なしで表示されているいくつかのデバイス上のバグがあるよう

    [ourView].setVisibility(View.INVISIBLE); // when permission settings shown

    [ourView].setVisibility(View.VISIBLE); // when normal flow

+0

将来これを読む人のフォローアップ Android Oの時点では、GoogleがSYSTEM_ALERT_WINDOWのサポートを終了しているようです。 サックシステムの場合、これらの回避策は必要ないかもしれません。特に、ステータスバーなどのシステムコンポーネントをオーバレイしたい場合に便利です。 –

0

何らかの理由で(私の分析データに基づくデバイスの2〜5%で)、最良の解決策は、targetSdkを22に定義することによって許可プロセス全体を回避することです。ターゲットSDTをダウングレードできないように注意してください新しいバージョンまたはこれは、ユーザーがアプリのunisntall/installを必要とする更新すると、INSTALL_FAILED_PERMISSION_DOWNGRADEエラーを引き起こします。

関連する問題