一种智能终端悬浮窗权限设置方法与流程

文档序号:11154527阅读:来源:国知局

技术特征:

1.一种智能终端悬浮窗权限设置方法,其特征在于:

获取智能终端系统自带的信息,判断其是否为特定的机型;

如果是,则判断其是否具有使用悬浮窗的权限,如果没有使用悬浮窗的权限,则在程序运行时自动跳转到权限开启界面,然后在权限开启界面上弹出一个半透明的全屏引导框,引导用户开启此应用的悬浮窗使用权限。

2.根据权利要求1所述的智能终端悬浮窗权限设置方法,其特征在于:

事先将特定机型系统版本划分类别,当使用悬浮窗的权限没有使用权限时,则会根据之前的机型和版本的分类,跳转到相应的权限开启界面。

3.根据权利要求1或2所述的智能终端悬浮窗权限设置方法,其特征在于:

所述在权限开启界面上弹出一个半透明的全屏引导框,引导用户开启此应用的悬浮窗使用权限进一步包括:

半透明的窗口中根据不同的机型的具体情况给予不同的提示信息。

4.根据权利要求2-3任一所述的智能终端悬浮窗权限设置方法,其特征在于:

所述根据之前的机型和版本的分类,跳转到相应的权限开启界面具体包括:

使用miui.intent.action.APP_PERM_EDITOR作为action值来进行创建Intent,所述action值为启动Android组件的一种动作值;

使用Intent的setClassName方法将包名为com.miui.securitycenter的安全中心应用的包名,类名为com.miui.permcenter.permissions.AppPermissionsEditorActivity的安全中心的一个界面的类名设置给新创建的Intent,用于管理悬浮窗权限,然后使用Intent的putExtra方法将"extra_pkgname"作为第一个参数,当前应用包名作为第二个参数传递给Intent;

使用startActivity方法启动此Intent,将安全中心的此权限管理界面调用出来;

在将界面调出后,通过启动界面新建的Handler对象延迟发送一个N毫秒的消息,其中N为正整数;

在N毫秒后,如果收到此消息,再使用startActivity方法创建一个全屏半透明的Activity界面,覆盖并显示在之前的权限管理开启界面之上;在创建引导界面时设置引导性的文字;确认后,进入到权限开启界面,完成权限开启设置。

5.根据权利要求2-4任一所述的智能终端悬浮窗权限设置方法,其特征在于:

根据系统提供的品牌名称和自身系统的版本信息,把机型进行归类,判断当前机型属于哪种特定机型,具体如下:

使用系统预定义的用来表示系统的品牌字符串类型的常量,Build.BRAND常量来判断当前机型是否属于我们要处理的特定机型;

利用java运行时环境,调用Runtime.getRuntime().exec()方法启动一个adb shell指令getprop,并且传递给其MIUI系统的属性ro.miui.ui.version.name,通过读取这个shell指令的输出流返回值,得到对应的版本号。

6.根据权利要求2-5任一所述的智能终端悬浮窗权限设置方法,其特征在于:

根据不同的Android系统版本,使用不同的方式来进行判断应用有没有使用悬浮窗的权限进一步包括:

根据系统整型常量Build.VERSION.SDK_INT判断当前系统的版本号是否大于等于19,即是否是Android4.4.2及以上的版本:

如果是Android4.4.2以下的系统;首先,通过当前Context得到包管理器PackageManager,然后调用其getApplicationInfo方法,得到当前应用的信息,然后判断其flags属性与0x8000进行逻辑与的结果是不是等于0x8000,即flags标志的第17位是不是1,如果是1,说明它有使用悬浮窗的权限,否则就没有;

如果是Android4.4.2及以上的系统;首先通过Context的getSystemService方法,传递appops参数得到AppOpsManager应用程序使用情况管理器对象,然后通过java反射程序使用情况管理器对象的方法checkOp,判断其的返回值是否为系统预置的整型常量MODE_ALLOWED,如果相等,说明应用具有了使用悬浮窗的权限,否则没有此权限。

7.根据权利要求2-6任一所述的智能终端悬浮窗权限设置方法,其特征在于:所述根据之前的机型和版本的分类,跳转到相应的权限开启界面进一步包括:

S501:启动带有悬浮窗功能的应用程序;

S502:进入程序的启动界面;

S503:创建一个Handler对象用于处理消息,其中使用new Handler()方式创建一个Handler对象;

S504:在启动界面的onCreate()方法中开始处理引导流程;

S505:进入到特定机型及版本检测流程中判断当前的机型是否满足需要特定处理的条件;

S506:判断当前机型及版本是否需要特定处理:通过特定机型及版本检测流程的返回值,确定当前机型及版本是否需要继续进行引导;如果判断结果为否,则执行S5507;如果判断结果为是,则执行S5508;

S507:如果经过检测当前机型不属于特定机型及版本,那就跳过引导流程,程序执行正常的启动流程;继续执行S507;

S508:进入到悬浮窗是否开启检测流程,检测当前的悬浮窗权限是否开启;

S509:根据权限检测流程的返回值,判断当前悬浮窗权限是否开启了,如果已经开启;如果判断为是,则执行S5010;如果判断为否,则执行S5011;

S5010:悬浮窗权限已经开启:如果权限检测流程返回true,说明悬浮窗权限已经开启,那就跳过引导流程,继续执行S5021;

S5011:根据特定机型及版本进行分类,使用不同的启动参数来启动引导流程;

S5012:由不同的分类信息构造合适的Intent,使用Context的startActivity方法先启动权限管理窗口;不同的分类信息指的是需要跳转到的权限管理界面的类名以及包名不同,并且有的权限开启界面还要传递当前的包名信息,或者带有其他不同参数,使用Context的startActivity方法启动权限管理窗口;

S5013:判断启动过程有无异常发生:在使用Context的startActivity方法启动权限管理窗口时需要调用java的try--catch机制对执行情况进行监控;如果判断为有异常发生,则执行S5014;如果没有异常发生,则执行S5015;

S5014:构造Intent,使得startActivity方法执行后能够跳转过去;继续执行S5015;

S5015:调用创建好的Handler对象,并延迟N毫秒发送一个针对此机型及版本的消息:调用之前创建的Handler对象,使用其sendEmptyMessageDelayed方法发送一个针对此机型及版本的消息,此消息是针对此机型及版本定义好的适配消息,只针对此机型及版本作处理;其中N为正整数。

S5016:Handler收到消息后,创建一个全屏半透明的Activity窗口作为引导窗口,并将消息传递给此窗口;

S5017:然后调用finish()方法将当前启动窗口结束,等待权限开启的结果;

S5018:引导窗口根据传递来的参数,确定显示的引导内容,并在此界面显示一个确认按钮;点击后可以关闭此引导界面。

S5019:点击确认按钮或者系统返回键,退出引导界面,进入到权限开启界面;

S5020:判断是否开启了悬浮窗权限:如果判断结果为否,则返回S501;如果判断结果为是,则执行S5022;

S5021:程序执行正常启动流程;

S5022:应用进入待机状态,可使用悬浮窗功能。

8.根据权利要求2-7任一所述的智能终端悬浮窗权限设置方法,其特征在于:特定机型及版本的检测流程进一步包括:

S601:进入特定机型及版本检测流程,对机型和机型所属的版本等信息进行判断;

S602:通过系统自带的字符串常量Build.BRAND来获取机型的品牌信息,该常量代表了机型的品牌信息;

S603:判断此品牌是否为需要特定处理的机型;如果判断为否,则执行S606;如果判断为否,则执行S604;

S604:判断当前机型的版本信息是否是需要特定处理的版本;通过执行一个getprop命令的shell指令,并且传递给它当前系统的一个属性值名称;如果判断为否,则执行S606;如果判断为是,则执行S605;

S605:结束判断,确定当前为特定机型及版本,需要特定处理,返回true:如果当前机型属于特定机型,以及特定机型中的某个需要处理的版本,返回true;继续执行607;

S606:当前不需特定处理,跳出检测,返回false:继续执行S607;

S607:结束特定机型及版本检测流程,将返回值传递给引导流程。

9.根据权利要求2-8任一所述的智能终端悬浮窗权限设置方法,其特征在于:悬浮窗是否开启的检测流程进一步包括:

S701:进入悬浮窗是否开启检测流程,对当前的应用进行检测,判断其是否已经获取到了悬浮窗使用权;

S702:获取当前系统的版本号整型值Build.VERSION.SDK_INT;

S703:判断Build.VERSION.SDK_INT是否大于等于19:判断Build.VERSION.SDK_INT是否大于等于19;如果判断结果为是,则执行S709;如果为否,则执行S704;

S704:根据当前Context的getPackageManager()方法得到系统的包管理器PackageManager对象;如果Build.VERSION.SDK_INT小于19,根据当前Context的getPackageManager()方法获取到系统的包管理器PackageManager对象;

S705:由当前应用程序的包名,调用PackageManager对象的getApplicationInfo()方法,得到当前应用程序的详情信息ApplicationInfo;

S706:ApplicationInfo中的属性flags和0x8000进行逻辑与操作:返回的ApplicationInfo类型的变量是一个类对象,包含有当前应用的详细信息,包括但不限于包名,类名,主题,flags属性,显示的lebel信息;检测flags属性与0x8000进行逻辑与操作;

S707:判断以上过程是否有异常发生;如果有异常发生,则执行S7013,如果没有异常发生,则执行S708;

S708:判断结果是否等于0x8000;如果判断结果为否,则执行S7013;如果判断结果为是,则执行S7014;

S709:根据当前Context的getSystemService()方法以及参数"appops"得到系统的应用程序使用情况管理器AppOpsManager对象:如果大于等于19,将"appops"字符串传递给Context的getSystemService()方法,得到系统的应用程序使用情况管理器AppOpsManager对象;继续执行S7010;

S7010:利用反射技术得到AppOpsManager对象中的checkOp方法,并传递给它当前应用的uid和包名,调用执行此方法:然后利用反射技术得到AppOpsManager对象中的checkOp方法,并传递给它当前应用的用户IDuid和包名;其中uid通过Binder的静态类方法getCallingUid()方法得到,包名可以通过Context的getPackageName()方法得到;执行checkOp方法后,将得到一个整型返回值,返回值表示是否有权限;继续执行S7011;

S7011:判断以上过程是否有异常发生;如果判断有异常发生,则执行S7013;如果判断无异常发生,则执行S7012;

S7012:判断执行的结果是否等于MODE_ALLOWED(0);如果等于此值表示当前应用具有了悬浮窗权限,否则没有;如果判断结果为是,则执行S7014;

S7013:返回false,表示当前应用无权限:如果经过检测应用没有悬浮窗使用权限,则返回false;继续执行S7015;

S7014:返回true,表示当前应用有权限:如果经过检测应用具有悬浮窗使用权限,则返回true;继续执行S7015

S7015:退出悬浮窗是否开启检测流程并将检测的返回值传递给引导流程。

10.根据权利要求1-9任一所述的智能终端悬浮窗权限设置方法,其特征在于:

使用Build.MODEL检测智能终端品牌;和/或

使用Dialog对话框或者采用自定义View的方式实现全屏半透明的引导页窗口。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1