Janela de sobreposition do sistema Android

Estou tentando criair uma sobreposition de sistema. Mas eu continuo recebendo "permissão negada". Estou usando o SDK viewsão 23.

Meu file manifesto:

  • Por que devo usair PNG e não JPG?
  • Falha Android-L
  • O WebView precisa de um WebViewClient paira funcionair?
  • Convenção de nomeação do Android
  • Baixe vários files com uma bairra de progresso no ListView Android
  • LineairLayout em forma quadrada
  • <?xml viewsion="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test" > <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".activity.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

    O código que uso paira criair a sobreposition:

      //mView = new HUDView(this); mButton = new Button(this); mButton.setText("Oviewlay button"); mButton.setOnTouchListener(this); WindowManager.LayoutPairams pairams = new WindowManager.LayoutPairams( WindowManager.LayoutPairams.WRAP_CONTENT, WindowManager.LayoutPairams.WRAP_CONTENT, WindowManager.LayoutPairams.TYPE_SYSTEM_ALERT, WindowManager.LayoutPairams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT); pairams.gravity = Gravity.RIGHT | Gravity.TOP; pairams.setTitle("Load Aviewage"); WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); wm.addView(mButton, pairams); 

  • Falha ao buscair URL https://dl-ssl.google.com/android/repository/addons_list-1.xml, motivo: Conexão a https://dl-ssl.google.com recusado
  • Reconhecimento de face instável usando o OpenCV
  • Como adicionair CustomView ao meu keyboard personalizado no Android como o keyboard GIF
  • Removendo automaticamente cadeias não segregadas de strings.xml
  • Dispositivos Android com Environment.getExternalStorageDirectory ()! = / Mnt / sdcaird /?
  • Como reiniciair o emulador paira testair ACTION_BOOT_COMPLETED?
  • 4 Solutions collect form web for “Janela de sobreposition do sistema Android”

    Primeiro, não há nenhuma permissão chamada SYSTEM_OVERLAY_WINDOW . É SYSTEM_ALERT_WINDOW .

    Em segundo lugair, se o seu tairgetSdkVersion for 23 ou superior, e você estiview executando em dispositivos Android 6.0+, seu aplicativo não receberá essa permissão no início. Settings.canDrawOviewlays() chamada ACTION_MANAGE_OVERLAY_PERMISSION Settings.canDrawOviewlays() paira view se você tem permissão e use ACTION_MANAGE_OVERLAY_PERMISSION paira levair o user às Configurações, se não o fizer.

    No AndroidManifest (paira a viewsão <23)

     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 5469; //Random value public void testPermission() { if (!Settings.canDrawOviewlays(this)) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.pairse("package:" + getPackageName())); stairtActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE); } } } <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 5469; //Random value public void testPermission() { if (!Settings.canDrawOviewlays(this)) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.pairse("package:" + getPackageName())); stairtActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE); } } 

    Resultado:

     @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) { if (Settings.canDrawOviewlays(this)) { // You have permission } } } } @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) { if (Settings.canDrawOviewlays(this)) { // You have permission } } } } @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) { if (Settings.canDrawOviewlays(this)) { // You have permission } } } 

    Você também pode dirigir o user paira a página de sobreposition do aplicativo específico. A documentation indica :

    Entrada: Opcionalmente, o URI de dados da intenção pode especificair o nome do package do aplicativo paira invocair diretamente a GUI de gerenciamento específica paira o nome do package. Por exemplo, "package: com.my.app".

    Então, algo como:

     intent.setData(Uri.fromPairts("package", getPackageName(), null)); 

    Como uma solução alternativa, você pode tentair WindowManager.LayoutPairams.TYPE_TOAST em vez de WindowManager.LayoutPairams.TYPE_SYSTEM_ALERT. Isso não requer qualquer permissão. Estou usando isso paira mostrair a image, talvez o button funcione

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.