懸浮窗權限請求,示例:
package com.sc.demo;
import android.content.Intent;
import android.os.Bundle;
import com.sc.permission.FloatTool;
import android.app.Activity;
import com.sci.androidpermission.R;
/**
* 權限請求示例
*/
public class MainActivity extends Activity
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// this.setContentView(R.layout.activity_main);
FloatTool.RequestOverlayPermission(this);
}
/** Activity執行結果 */
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
FloatTool.onActivityResult(requestCode, resultCode, data, this);
}
}
package com.sc.permission;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
/**
* FloatTool.java:應用懸浮窗權限請求
*
* AndroidMainifest.xml中添加: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
*
* 用法:
* 1、請求懸浮窗權限:FloatTool.RequestOverlayPermission(this);
* 2、處理懸浮窗權限請求結果:FloatTool.onActivityResult(requestCode, resultCode, data, this);
* -----
* 2019-9-19 下午3:10:34
* scimence
*/
public class FloatTool
{
public static boolean CanShowFloat = false;
private static final int REQUEST_OVERLAY = 5004;
/** 動態請求懸浮窗權限 */
public static void RequestOverlayPermission(Activity Instatnce)
{
if (Build.VERSION.SDK_INT >= 23)
{
if (!Settings.canDrawOverlays(Instatnce))
{
String ACTION_MANAGE_OVERLAY_PERMISSION = "android.settings.action.MANAGE_OVERLAY_PERMISSION";
Intent intent = new Intent(ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + Instatnce.getPackageName()));
Instatnce.startActivityForResult(intent, REQUEST_OVERLAY);
}
else
{
CanShowFloat = true;
}
}
}
/** 浮窗權限請求,Activity執行結果,回調函數 */
public static void onActivityResult(int requestCode, int resultCode, Intent data, final Activity Instatnce)
{
// Toast.makeText(activity, "onActivityResult設置權限!", Toast.LENGTH_SHORT).show();
if (requestCode == REQUEST_OVERLAY) // 從應用權限設置界面返回
{
if(resultCode == Activity.RESULT_OK)
{
CanShowFloat = true; // 設置標識爲可顯示懸浮窗
}
else
{
CanShowFloat = false;
if (!Settings.canDrawOverlays(Instatnce)) // 若當前未允許顯示懸浮窗,則提示授權
{
AlertDialog.Builder builder = new AlertDialog.Builder(Instatnce);
builder.setCancelable(false);
builder.setTitle("懸浮窗權限未授權");
builder.setMessage("應用需要懸浮窗權限,以展示浮標");
builder.setPositiveButton("去添加 權限", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
RequestOverlayPermission(Instatnce);
}
});
builder.setNegativeButton("拒絕則 退出", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
// 若拒絕了所需的權限請求,則退出應用
Instatnce.finish();
System.exit(0);
}
});
builder.show();
}
}
}
}
}