Android 6.0 以上版本提示“检测到屏幕叠加层”的问题,规避方法

android 6.0 检测到屏幕叠加层的问题,是google针对用户安全的机制。

但是此机制很影响用户的体验感。


在fragment的规避方法是,安装第三应用。如果存在SYSTEM_ALERT_WINDOW 权限。默认关闭此应用的此权限。


在PMS中:

                case POST_INSTALL: {
                    if (DEBUG_INSTALL) Log.v(TAG, "Handling post-install for " + msg.arg1);
                    PostInstallData data = mRunningInstalls.get(msg.arg1);
                    mRunningInstalls.delete(msg.arg1);
                    boolean deleteOld = false;


                    if (data != null) {
                        InstallArgs args = data.args;
                        PackageInstalledInfo res = data.res;


                        if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) {
                            final String packageName = res.pkg.applicationInfo.packageName;
                            res.removedInfo.sendBroadcast(false, true, false);
                            Bundle extras = new Bundle(1);
                            extras.putInt(Intent.EXTRA_UID, res.uid);


                            // Now that we successfully installed the package, grant runtime
                            // permissions if requested before broadcasting the install.
                            if ((args.installFlags
                                    & PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0) {
                                grantRequestedRuntimePermissions(res.pkg, args.user.getIdentifier(),
                                        args.installGrantPermissions);
                            }


                            // Determine the set of users who are adding this
                            // package for the first time vs. those who are seeing
                            // an update.
                            int[] firstUsers;
                            int[] updateUsers = new int[0];
                            if (res.origUsers == null || res.origUsers.length == 0) {
                                firstUsers = res.newUsers;
                            } else {
                                firstUsers = new int[0];
                                for (int i=0; i<res.newUsers.length; i++) {
                                    int user = res.newUsers[i];
                                    boolean isNew = true;
                                    for (int j=0; j<res.origUsers.length; j++) {
                                        if (res.origUsers[j] == user) {
                                            isNew = false;
                                            break;
                                        }
                                    }
                                    if (isNew) {
                                        int[] newFirst = new int[firstUsers.length+1];
                                        System.arraycopy(firstUsers, 0, newFirst, 0,
                                                firstUsers.length);
                                        newFirst[firstUsers.length] = user;
                                        firstUsers = newFirst;
                                    } else {
                                        int[] newUpdate = new int[updateUsers.length+1];
                                        System.arraycopy(updateUsers, 0, newUpdate, 0,
                                                updateUsers.length);
                                        newUpdate[updateUsers.length] = user;
                                        updateUsers = newUpdate;
                                    }
                                }
                            }
                            sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED,
                                    packageName, extras, null, null, firstUsers);
                            final boolean update = res.removedInfo.removedPackage != null;
                            if (update) {
                                extras.putBoolean(Intent.EXTRA_REPLACING, true);
                            }
                            sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED,
                                    packageName, extras, null, null, updateUsers);
                            if (update) {
                                sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED,
                                        packageName, extras, null, null, updateUsers);
                                sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED,
                                        null, null, packageName, null, updateUsers);


                                // treat asec-hosted packages like removable media on upgrade
                                /* SPRD: support double sdcard
                                 * Add support for install apk to internal sdcard @{
                                 * @orig
                                 * if (res.pkg.isForwardLocked() || isExternal(res.pkg)) {
                                 */
                                if (res.pkg.isForwardLocked() || isExternal(res.pkg) || isInternalSd(res.pkg)) {
                                     /* @} */
                                    if (DEBUG_INSTALL) {
                                        Slog.i(TAG, "upgrading pkg " + res.pkg
                                                + " is ASEC-hosted -> AVAILABLE");
                                    }
                                    int[] uidArray = new int[] { res.pkg.applicationInfo.uid };
                                    ArrayList<String> pkgList = new ArrayList<String>(1);
                                    pkgList.add(packageName);
                                    sendResourcesChangedBroadcast(true, true,
                                            pkgList,uidArray, null);
                                }
                            }
                            if (res.removedInfo.args != null) {
                                // Remove the replaced package's older resources safely now
                                deleteOld = true;
                            }


                            // If this app is a browser and it's newly-installed for some
                            // users, clear any default-browser state in those users
                            if (firstUsers.length > 0) {
                                // the app's nature doesn't depend on the user, so we can just
                                // check its browser nature in any user and generalize.
                                if (packageIsBrowser(packageName, firstUsers[0])) {
                                    synchronized (mPackages) {
                                        for (int userId : firstUsers) {
                                            mSettings.setDefaultBrowserPackageNameLPw(null, userId);
                                        }
                                    }
                                }
                            }
                            // Log current value of "unknown sources" setting
                            EventLog.writeEvent(EventLogTags.UNKNOWN_SOURCES_ENABLED,
                                getUnknownSourcesSettings());
                            
                        /*SUN:jicong.wang modify for system alert window off start {@*/
                        String[] pkgs = getAppOpPermissionPackages(Manifest.permission.SYSTEM_ALERT_WINDOW);
                        for (String pkg : pkgs) {
                            //Log.d(TAG,"SUN:jicong.wang system alert window permission pkg is "+pkg);
                            if (pkg.equals(packageName)) {
                                 Log.d(TAG,"SUN:jicong.wang system alert window permission off pkg is "+pkg);
                                AppOpsManager appops = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
                                appops.setMode(AppOpsManager.OP_SYSTEM_ALERT_WINDOW, res.pkg.applicationInfo.uid, packageName, AppOpsManager.MODE_ERRORED);                                
                            }
                        }
                        /*SUN:jicong.wang modify for system alert window off end @}*/
                        }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: OPPO R9的Android 6.版本是一款非常流畅的操作系统,具有更好的性能和更多的功能。它提供了更好的多任务处理能力,更好的电池寿命和更好的安全性能。此外,它还提供了更好的用户体验,使用户可以更轻松地使用手机。总的来说,OPPO R9的Android 6.版本是一款非常出色的操作系统,值得用户使用。 ### 回答2: OPPO R9是一款搭载Android 6.0(Marshmallow)操作系统的手机,该系统带来了诸多新功能,使手机更加易用、稳定和安全。 Android 6.0的最大特点是Doze模式,能够在手机处于静止状态时减少耗电和网络流量。当你将手机放置一段时间后,这种模式就会被启动,手机会进入深度休眠状态,而只在接收到紧急通知时才会唤醒。另外,6.0还引入了应用权限的精细化控制,让用户能够更好地管理和控制自己的手机。 此外,6.0还带来了更灵活的通知管理,在锁屏和主屏幕上都可以查看通知,而且用户还可以自定义通知的优先级和提示方式。另外,6.0还优化了文件管理器和存储空间的管理,更方便用户管理和清理垃圾文件。 总之,OPPO R9搭载的Android 6.0系统功能更加全面,优化了电池续航表现和通知管理,提升了用户体验和安全性,是一款十分优秀的手机系统。 ### 回答3: oppo r9是OPPO手机品牌推出的一款手机,其所搭载的操作系统是Android6.0版本Android 6.0版本Android系统中重要的一个版本,它发行于2015年,代号为“Marshmallow”,这个版本有着很多的新增特性和改进的地方,其中最重要的一点是在安全方面做了大量的优化,保证了手机用户的数据隐私和手机安全,同时优化了电池续航能力,优化了声音效果和触摸体验等,提高了系统的稳定性和流畅度。 在OPPO R9中搭载Android 6.0版本后,它不仅保留了Android系统本身的优势,还结合了OPPO自身手机的特点进行了优化。例如OPPO R9搭载了自家的ColorOS 3.0系统,其UI界面设计简洁美观,搭载了丰富实用的智能功能和个性化定制设置,让用户拥有更加个性化的手机体验。 此外,OPPO R9作为一款音乐手机,其在音乐体验上也进行了优化,在系统面对音质进行了优化,让人们在听歌时拥有更加流畅舒适的体验。 总之,OPPO R9搭载了Android 6.0版本的操作系统,该版本不仅优化了手机的安全性和电池续航能力,并且还融合了OPPO R9手机的特点进行了优化,从而提供了更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值