最佳日常交易
最佳日常交易

关于Androidbob体育提现bob哪个彩靠谱权威的链接可能会使我们赢得佣金。学到更多。

什么是Androibob体育提现d应用程序权限,开发人员如何实施它们?

应用程序权限由其开发人员内置在应用程序中。那么什么是应用程序权限,开发人员如何实施它们?这就是我们的目标!
经过
2017年7月22日
应用权限

从录制视频到拨打电话,到完成购买和发布到您的各种社交媒体帐户的更新 - 有无数的合法原因为什么Android应用可能需要访问敏感服务,设备功能或用户信息。bob体育提现

阅读下一篇:如果您不是开发人员bob体育提现,那么Android应用程序权限是什么以及如何使用它们

但是,利用对敏感数据和设备功能的访问也是恶意应用程序的最喜欢的技术,因此为了帮助确保用户及其设备安全,默认情况下,Android应用程序在有限的访问沙盒中运行。bob体育提现如果您的应用需要访问此基本沙箱中未包含的任何内容,则需要征求用户的许可。

如何在Java编写第一个Android游戏bob体育提现
bob体育提现Android开发

玛希姆拉(Marshmallow),您只需要在清单中声明每份许可,然后要求用户在安装时批准所有这些应用程序权限。但是,Androibob体育提现d 6.0用更灵活运行时许可模型。从API 23开始,您需要在清单中声明您的应用程序可能需要的所有权限,但是您还需要在运行时,如果以及应用程序需要执行需要此特定许可的任务。然后,用户可以选择授予权限请求,或否定它 - 以前是不可能的。

在本文中,我将向您展示如何实现运行时权限,并创建一个应用程序,该应用程序演示了整个运行时权限模型。到本文结束时,您将拥有所有需要的代码:

  • 验证您的应用程序是否安装在支持运行时权限模型的设备上。
  • 检查您的应用程序是否可以访问有关权限。
  • 触发Androibob体育提现d的权限请求对话框。
  • 处理用户的响应。

创建您的布局

运行时许可的最大好处之一是,它们允许您在上下文中请求应用程序权限,通常是当用户试图完成需要此许可的任务时,该任务有可能消除许多围绕为什么的混乱和不确定性。您的应用需要特定的许可。

为了证明这一点,我们将创建一个由“上传照片”按钮组成的应用程序;每次用户点击此按钮时,我们的应用程序都会检查其是否可以访问设备的外部存储,如果没有,则会发出权限请求。

创建一个能够在Androibob体育提现d 6.0或更高版本上运行的新的Android Studio项目,让我们创建我们的布局:

代码
<?xml版本=“ 1.0” encoding =“ utf-8”?>  
应用权限

在清单中声明应用程序权限

新的应用程序权限模式仍然要求您声明您的应用程序可能要求的所有权限,因此请打开清单并添加read_external_storage许可:

代码
<?xml版本=“ 1.0” encoding =“ utf-8”?> <清单xmlns:android =“bob体育提现 http://schemas.android.com/apk/apk/res/res/android” package =“ com.jessicacathornsby.permissions ofmissions><使用-Permission anbob体育提现droid:name =“ android.permision.read_external_storage”/>

您的应用程序已经有许可吗?

每次用户点击“上传照片”按钮时,我们都需要检查我们的应用程序是否安装在运行Android 6.0或更高的设备上,以及它是否可以访问READ_EXTERNE_TERNE_STOREAGE权限。bob体育提现

您需要每次使用“上传照片”按钮检查后者,因为Android 6.0及更高版本使用户能够通过其设备的“设置”应用程序随时撤销先前授予的许可。bob体育提现即使您的应用程序以前可以访问此许可,也无法保证自您上次检查以来,用户尚未撤销此许可。

打开您的mainActivity.java文件,并添加以下内容:

代码
公共类MainActivity扩展了AppCompatactivity {私有静态最终int允许_request_code = 1;私人按钮;@Override保护的void onCreate(捆绑savedinstancestate){super.oncreate(savedinstancestate);setContentView(r.layout.activity_main);button =(button)findViewById(r.id.button);button.setOnClickListener(new View.OnClickListener(){@Override public void onClick(view v){//检查应用程序是否安装在Android 6.0或更高//上// if(build.vebob体育提现rsion.sdk_int> = 23){//Check whether your app has access to the READ permission// if (checkPermission()) { //If your app has access to the device’s storage, then print the following message to Android Studio’s Logcat// Log.e("permission", "Permission already granted."); } else { //If your app doesn’t have permission to access external storage, then call requestPermission// requestPermission(); } } } }); } private boolean checkPermission() { //Check for READ_EXTERNAL_STORAGE access, using ContextCompat.checkSelfPermission()// int result = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE); //If the app does have this permission, then return true// if (result == PackageManager.PERMISSION_GRANTED) { return true; } else { //If the app doesn’t have this permission, then return false// return false; } }

如果Checkpermission返回false,则您的应用程序当前无法访问设备的外部存储,您需要请求用户的此许可。

显示权限对话框

您通过调用activityCompat.requestpermissions方法来要求许可:

代码
private void requestpermission(){activityCompat.RequestPermissions(this,new String [] {subivest.permission.read_external_storage},cermission_request_code);}

然后,您的应用将显示标准权限对话框,用户可以选择接受或拒绝此请求。

处理用户的响应

用户响应“权限请求”对话框后,您的应用将接收带有结果的回调 - cormission_granted或cripersionded_dened

要处理这些结果,您需要实现ActivityCompat.onrequestpermissionsresultcallback;权限请求的结果将交付给其onRequestpermissionsResult(int,string [],int [])方法。

由于这只是一个示例应用程序,因此接受或拒绝许可请求不会对用户体验产生任何明显影响,因此我使用两个吐司来提供视觉指示,表明该应用已正确注册了用户的响应。

代码
@Override public void onrequestpermissionsResult(int requestCode,字符串允许[],int [] grantresults){switch(requestCode){case permission_request_code:if(grantresults.lengths.length> 0 && && grantresults [0](MainActivity.this,“接受的权限”,toast.length_long).show();} else {toast.maketext(mainActivity.this,“允许拒绝”,toast.length_long).show();} 休息;}}}}

就是这样!将兼容的Android虚拟设备(AVD)bob体育提现或物理Android设备连接到开发机器,安装和启动应用程序,然后将“上传照片”按钮作为点击。

应用权限

无论您是点击“接受”还是“拒绝”,您的应用程序都应显示敬酒,以确认系统已注册您的响应。

请注意,您也可以从GitHub下载完成的项目

在测试自己的应用程序时,您需要检查应用程序接受并拒绝您的每个权限请求时的应用程序的功能。在Anbob体育提现droid 6.0及更高版本上,您可以通过设备的“设置”快速打开和关闭单个应用程序权限,这在测试过程中可能是无价的:

  • 启动“设置”应用程序。
  • 选择“应用程序”。
  • 从下拉菜单中选择“所有应用程序”。
  • 滚动浏览应用程序列表,直到找到相关的应用程序,然后对其进行点击。
  • 从后续菜单中选择“权限”。
  • 此屏幕显示该应用程序可能请求的所有权限。您可以使用随附的滑块打开和关闭这些应用程序权限。
应用权限

运行时许可的最佳实践

现在,我们介​​绍了如何实现运行时权限,让我们看一下如何实施它们有效,通过涵盖运行时权限模型独有的一些最佳实践。

限制您的权限请求

Android基于权限的系统的全部目的bob体育提现是帮助用户免受可能试图窃取或破坏数据或损坏其设备的恶意应用程序的安全。虽然应用程序请求多个权限并不罕见,但是每次您的应用程序触发权限请求对话框时,您本质上都会提示用户质疑他们是否是否真的相信您的应用程序,因此至关重要的是,您仅请求应用程序无法运行的应用程序权限。

如果您担心应用程序所需的权限数量,请记住,您的应用只需要要求直接执行的任务许可即可。Depending on what you’re trying to accomplish, you may be able to achieve the same results by asking another app to do all the hard work for you, for example instead of requesting the android.permission.CAMERA permission, you could launch a camera app that the user has already installed on their device.

你还应该注意什么时候您会发布每个权限请求。特别是您应该避免快速连续发出多个请求,因为这几乎可以保证使您的用户怀疑您的应用程序,并想知道它是否只是继续推动越来越多地访问其个人信息和设备功能。

花一些时间绘制用户可能会通过您的应用程序采用的所有不同路径,然后查明他们在这些不同路径上遇到每个请求的位置。If you do spot any paths where a user is likely to encounter multiple requests in a short period of time, then you should try to create some space between these requests, for example by changing your app’s navigation, tweaking the UI, or changing the order these screens appear in.

使用户易于授予和撤销应用程序权限

We’ve already seen how Android users can manually change an app permissions via their device’s ‘Settings.’ This allows them to revoke previously-granted permissions, and can also come in handy if a user denies a permission request, then realizes they need to reverse this decision asap after seeing how it’s impacted the user experience.

但是,如果用户从权限对话框中选择“不要再次问”,则“设置”菜单的这一部分变得尤为重要。

选择此选项后,您的应用程序每次调用requestPermissions()方法,系统都会调用OnRequestPermissionsResult()并自动传递允许_DENDIEN,而无需显示“权限”对话框。

对于一个意识到自己可以通过设备的“设置”更改应用程序权限的用户来说,这不是问题,但是无法保证每个安装您应用程序的人都会意识到这一事实。另外,即使他们熟悉“设置”菜单的这一部分,它也需要在几个不同的屏幕上导航 - 并不是一个很好的用户体验!

理想情况下,您应该为用户提供一种更改所有应用程序权限的方法,即在需要的情况下,而无需离开应用程序,例如,您可能需要考虑在应用程序的主菜单中添加“许可”选项。

完善有问题的权限请求

用户拒绝许可请求,因为他们对您的应用程序为什么需要访问其设备的原因感到不舒服,可疑或困惑。由于Android 6.0及更bob体育提现高版本的用户可以拒绝单个权限,因此这使您有机会监视用户如何响应您的应用程序的权限请求。

如果大量用户拒绝相同的请求,那么这是您可能需要重新考虑此特定许可的标志:

  • 提供其他信息。Ideally, you should time each request so that it’s obvious why your app requires this particular permission, but if you suspect users might be unclear about why your app is trying to access this feature or information, then you should provide some additional information by calling shouldShowRequestPermissionRationale before requestPermissions:
代码
private void requestpermission(){…... ...您的设备。”,toast.length_long).show();
  • 发布此请求时更改。用户投入越多地执行操作,他们就越有可能按下“允许”按钮。For example, if your app includes a route planning feature, then users are more likely to grant your app access to their location after they’ve typed out their destination and tapped ‘Display my route,’ compared to when they first select ‘Route planner’ from your app’s main menu.
  • 停止请求此许可。如果许可与非必需功能有关,则可能需要考虑从应用程序中删除它,以避免用户具有拒绝应用程序访问信息或功能的负面体验。

不要忘记<使用feature>

如果您的应用程序依靠用户设备上的某些硬件,则需要指示Google Play,以防止任何人将您的应用下载到缺乏此必需硬件的设备。您可以通过在清单中声明该功能并将其设置为“ True”来做到这一点。

代码
<使用feature andbob体育提现roid:name =“ android.hardware.camera” android:quiending =“ true”/>

Google Play还可以检查您的应用程序的任何权限隐式特征要求。如果发现您的应用程序使用其中一个或多个权限,但是没有通过a <使用feature>元素声明相关功能,然后假设您的应用程序运行需要此硬件(Android:必需=“ true”)。bob体育提现如果您的应用在可用的地方使用此功能,但可以与之合作,那么此行为可以防止您的应用程序安装在完美兼容的设备上。

如果您的任何权限意味着您的应用程序没有需要,那么至关重要的是,您在清单中声明此功能并将其标记为Android:必需=“ false”。bob体育提现例如:

代码
<使用feature andbob体育提现roid:name =“ android.hardware.bluetooth” android:quiend

包起来

您是否有任何建议或最佳实践可以充分利用Android 6.0的运行时许可模型?bob体育提现请在评价部分留下您的意见!