2017-06-27 8 views
2

私はバックグラウンドで連続して動作するアプリケーションを作成し、浮動オーバーレイTextViewを表示します(android.permission.SYSTEM_ALERT_WINDOW権限を使用して)。スクリーンオーバーレイが検出されました| (Android 6.x)Lenovo、Redmi&Samsung Devices

Lenovo Androidデバイスに問題があります。他のアプリケーションがユーザーの許可を求めると、「画面オーバーレイが検出されました」という警告ダイアログが表示されます。 Redmi 3S Primeデバイスで同じアプリケーションをテストしている間に、許可ダイアログの「許可」ボタンはクリックできません。アプリケーションで浮動オーバーレイTextViewをオフにするまでです。

このデバイス固有の問題を解決するソリューションはありますか?可能な解決策の1つは、許可ダイアログが閉じているときに表示されているフローティングオーバーレイをユーザーが見ることができる間にフローティングTextViewを無効にすることですが、アプリから他のフォアグラウンドアプリケーションに対してアクセス許可ダイアログを開く/閉じる状態を検出する方法は問題です。

+0

ランタイムオーバレイ許可をリクエストしましたか? ACTION_MANAGE_OVERLAY_PERMISSION。これは上記のreqの上です。android M –

+0

私はすでにACTION_MANAGE_OVERLAY_PERMISSIONを使用しています。これは私の問題を解決しません。 –

+0

@ HimanshuMohta build.gradle(app)ファイルでtargetSdkVersionを21に減らしてみましたか?時にはそれは動作します。 – TdSoft

答えて

4

示唆してくださいは...残念ながら、AndroidのOSに固有のものであるようだ、と私の知る限りでは、他のアプリがアクセス権を要求しているときを検出する方法はありません。他のアプリとのやりとりの一般的な流れはプッシュ方式でインテントを送信することです。理論的にはになる可能性があります。これは実用的な解決策ではありません。

私は完全に間違っている可能性がありますが、私はまだこの問題に対するプログラム的な解決策を見ていません。あなたのアプリがこの問題を引き起こす可能性があることをユーザーに警告し、迅速な一時的な無効化ボタンをユーザーに提供することをお勧めします。

+0

同じことをするGoogle Playでアプリを見ました。アプリケーション名はNetwork Monitor Miniですが、これをどう対処するかわかりません –

2

私のアプリケーションから許可ダイアログのオープン/クローズ状態を検出するにはどうすればよいですか?

  • 最初のアクティビティののonCreate

    公共最終静的INT PERM_REQUEST_CODE_DRAW_OVERLAYS = 1234でこのチェックを実行するために、この方法は、下記実施します。

    'android.permission.SYSTEM_ALERT_WINDOW'

    マニフェストで

    • に関連する他のアプリで

    /** * 許可を描画するためのオーバーレイ/、 Android M以上のポップアップの問題を解決しました "画面オーバーレイが検出されました - この権限を変更するにはアプリが画面に描画するための権限を付与されていない場合はアプリは「>あなたが最初の設定から画面オーバーレイをオフにする必要があり

    • をetting、テント&
    • を作成
にその目的地を設定します

設定。

あなたのアプリのページにユーザーを直接送信するために:ACTION_MANAGE_OVERLAY_PERMISSION

& は*

"パッケージ" の形でURIを追加します。

注:ユーザーをアプリの完全なリストに送信するには、代わりにURIを無視します。結果を確認するために、活動に呼び出され

public void permissionToDrawOverlays() { 
     if (android.os.Build.VERSION.SDK_INT >= 23) { //Android M Or Over 
      if (!Settings.canDrawOverlays(this)) { 
       Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); 
       startActivityForResult(intent, PERM_REQUEST_CODE_DRAW_OVERLAYS); 
      } 
     } 
    } 

@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == PERM_REQUEST_CODE_DRAW_OVERLAYS) { 
      if (android.os.Build.VERSION.SDK_INT >= 23) { //Android M Or Over 
       if (!Settings.canDrawOverlays(this)) { 
        // ADD UI FOR USER TO KNOW THAT UI for SYSTEM_ALERT_WINDOW permission was not granted earlier... 
       } 
      } 
     } 
      } 

NOTE設定内のユーザー行動の返却:コードとエキス上gistを以下から取得されます。

・ホープこのことができます!!! ..

+0

実際に私のアプリケーションではなく、他のアプリケーションの許可ダイアログのオープン/クローズ状態を検出したいと考えています。私は他のアプリが許可を要求しようとすると、私のアプリでflotingウィンドウを削除したいと思います。他のアプリケーションの許可ダイアログが閉じられると再びフローティングウィンドウを追加します。 –

+0

@HimanshuMohta U havは、どのように他のアプリが自分のステータスを変更するための権限を与えることができます...それはセキュリティリスクのようなものです...彼らはあなたがそうするようなことを許可すれば他のアプリには、私はそれが実際に可能になるとは思わない....とにかく... – PN10

+0

何か誤解がありますので編集しました。 Google Playのアプリも同じ機能を果たしているため、これも可能です。アプリ名はNetwork Monitor Miniです –

2

デバイスからEsエクスプローラのデータをクリアしてから、デバイスを再起動してください。

0

は、デバッグビルドの使用してみてください - targetSdkVersion 22

署名APK後のアプリケーション正常に動作します(すべてのtargetSdkVersion(S)用)。

関連する問題