
在我的应用程序中,我在android 6中遇到屏幕覆盖问题
我试图打开但是为此我需要为屏幕叠加提供权限
我跟着this我无法融入我的活动
我也试过this似乎都在工作,所以我想在我的活动中整合它们
这是我的活动:
public class MainActivity extends Activity { public static final int R_PERM = 123; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.data); setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); if ((CheckPermission(this, Manifest.permission.CAMERA)) && (CheckPermission(this, Manifest.permission.READ_PHONE_STATE)) && (CheckPermission(this, Manifest.permission.NFC))) { PermHandling(); } else { RequestPermission(MainActivity.this, Manifest.permission.CAMERA, R_PERM); RequestPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE, R_PERM); RequestPermission(MainActivity.this, Manifest.permission.NFC, R_PERM); //NewPermHandling(); } } private voID PermHandling() { //My app internal parts.... //Here my stuff works... } //private voID NewPermHandling(){ //} @OverrIDe public voID onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) { switch (permsRequestCode) { case R_PERM: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { PermHandling(); } else { //Toast.makeText(this, "Please Grant Permissions other wise app will close.!", Toast.LENGTH_SHORT).show(); } return; } } } public voID RequestPermission(Activity thisActivity, String Permission, int Code) { if (ContextCompat.checkSelfPermission(thisActivity, Permission) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Permission)) { } else { ActivityCompat.requestPermissions(thisActivity, new String[]{Permission}, Code); } } } public boolean CheckPermission(Context context, String Permission) { if (ContextCompat.checkSelfPermission(context, Permission) == PackageManager.PERMISSION_GRANTED) { return true; } else { return false; } }}任何人都可以建议我如何在我的活动中给予屏幕方向权限
所以用户不需要给它或担心它请帮助
在这里我试过,但我不知道PERM_REQUEST_CODE_DRAW_OVERLAYS
任何人请帮助我我的活动这不是重复或我要求的其他东西如何在我的活动中添加它
解决方法:
以下是使用自定义叠加层禁用拉动通知的示例代码.它适用于以下AndroID版本和6.
清单中所需的权限:
<uses-permission androID:name="androID.permission.ACTION_MANAGE_OVERLAY_PERMISSION" /> <uses-permission androID:name="androID.permission.SYstem_ALERT_WINDOW" /> 禁用拉动通知
private voID disablePullNotificationtouch() { try { Log.v("App", "disable Pull Notification"); private HUDVIEw mVIEw = new HUDVIEw(this); int statusbarHeight = (int) Math.ceil(25 * getResources().getdisplayMetrics().density); Log.v("App", "" + statusbarHeight); WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.MATCH_PARENT, statusbarHeight, WindowManager.LayoutParams.TYPE_SYstem_ERROR, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, //disables status bar PixelFormat.transparent); //transparent params.gravity = Gravity.CENTER | Gravity.top; WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); wm.addVIEw(mVIEw, params); } catch (Exception e) { Log.v("App", "Exception: " + e.getMessage()); } } // code to post/handler request for permission public final static int REQUEST_CODE = -1010101; @RequiresAPI(API = Build.VERSION_CODES.M) public voID checkDrawOverlayPermission() { Log.v("App", "Package name: " + getApplicationContext().getPackagename()); // check if we already have permission to draw over other apps if (!Settings.canDrawOverlays(context)) { Log.v("App", "Requesting Permission" + Settings.canDrawOverlays(context)); // if not construct intent to request permission Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getApplicationContext().getPackagename())); / request permission via start activity for result startActivityForResult(intent, REQUEST_CODE); } else { Log.v("App", "We already have permission for it."); disablePullNotificationtouch(); } } @TargetAPI(Build.VERSION_CODES.M) @OverrIDe protected voID onActivityResult(int requestCode, int resultCode, Intent data) { Log.v("App", "OnActivity Result."); //check if received result code // is equal our requested code for draw permission if (requestCode == REQUEST_CODE) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Settings.canDrawOverlays(this)) { disablePullNotificationtouch(); } } } }修改后的代码
public class MainActivity extends Activity { public static final int REQUEST_PERMISSION = 123; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.data); setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Log.v("App", "Build Version Greater than or equal to M: " + Build.VERSION_CODES.M); checkDrawOverlayPermission(); } else { Log.v("App", "OS Version Less than M"); //No need for Permission as less then M OS. } if ((CheckPermission(this, Manifest.permission.CAMERA)) && (CheckPermission(this, Manifest.permission.READ_PHONE_STATE)) && (CheckPermission(this, Manifest.permission.NFC))) { PermHandling(); } else { RequestPermission(MainActivity.this, Manifest.permission.CAMERA, REQUEST_PERMISSION); RequestPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE, REQUEST_PERMISSION); RequestPermission(MainActivity.this, Manifest.permission.NFC, REQUEST_PERMISSION); //NewPermHandling(); } } private voID PermHandling() { //My app internal parts.... //Here my stuff works... } //private voID NewPermHandling(){ //} @OverrIDe public voID onRequestPermissionsResult(int permissionRequestCode, String[] permissions, int[] grantResults) { if (permissionRequestCode != REQUEST_PERMISSION) { return; } if (grantResults.length && grantResults[0] == PackageManager.PERMISSION_GRANTED) { PermHandling(); } else { // Ask the user to grant the permission } } public voID RequestPermission(Activity thisActivity, String Permission, int Code) { if (ContextCompat.checkSelfPermission(thisActivity, Permission) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Permission)) {} else { ActivityCompat.requestPermissions(thisActivity, new String[] { Permission }, Code); } } } public final static int REQUEST_CODE = -1010101; @RequiresAPI(API = Build.VERSION_CODES.M) public voID checkDrawOverlayPermission() { Log.v("App", "Package name: " + getApplicationContext().getPackagename()); // Check if we already have permission to draw over other apps if (!Settings.canDrawOverlays(context)) { Log.v("App", "Requesting Permission" + Settings.canDrawOverlays(context)); // if not construct intent to request permission Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getApplicationContext().getPackagename())); // request permission via start activity for result startActivityForResult(intent, REQUEST_CODE); //It will call onActivityResult Function After you press Yes/No and go Back after giving permission } else { Log.v("App", "We already have permission for it."); // disablePullNotificationtouch(); // Do your stuff, we got permission captain } } @TargetAPI(Build.VERSION_CODES.M) @OverrIDe protected voID onActivityResult(int requestCode, int resultCode, Intent data) { Log.v("App", "OnActivity Result."); //check if received result code // is equal our requested code for draw permission if (requestCode == REQUEST_CODE) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Settings.canDrawOverlays(this)) { // Permission Granted by Overlay // Do your Stuff } } } } public boolean CheckPermission(Context context, String Permission) { if (ContextCompat.checkSelfPermission(context, Permission) == PackageManager.PERMISSION_GRANTED) { return true; } else { return false; } }}如果你从一个活动而不是从服务中调用它,startActivityForResult将调用onActivityResult.阅读更多关于它here
总结以上是内存溢出为你收集整理的android – 如何在我的活动上提供屏幕覆盖权限全部内容,希望文章能够帮你解决android – 如何在我的活动上提供屏幕覆盖权限所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)