package com.frank.ffmpeg.floating; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.annotation.RequiresApi; import java.util.ArrayList; import java.util.List; /** * 用于在内部自动申请权限 * https://github.com/yhaolpz */ public class FloatActivity extends Activity { private static List mPermissionListenerList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT >= 23){ requestAlertWindowPermission(); } } @RequiresApi(api = 23) private void requestAlertWindowPermission() { Intent intent = new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION"); intent.setData(Uri.parse("package:" + getPackageName())); startActivityForResult(intent, 123); } @RequiresApi(api = 23) @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (Build.VERSION.SDK_INT >= 23){ //todo 用23以上编译即可出现canDrawOverlays if (Util.hasPermission(this)) { mPermissionListener.onSuccess(); } else { mPermissionListener.onFail(); } } finish(); } static synchronized void request(Context context, PermissionListener permissionListener) { if (mPermissionListenerList == null) { mPermissionListenerList = new ArrayList<>(); mPermissionListener = new PermissionListener() { @Override public void onSuccess() { for (PermissionListener listener : mPermissionListenerList) { listener.onSuccess(); } } @Override public void onFail() { for (PermissionListener listener : mPermissionListenerList) { listener.onFail(); } } }; Intent intent = new Intent(context, FloatActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } mPermissionListenerList.add(permissionListener); } private static PermissionListener mPermissionListener; }