精华内容
下载资源
问答
  • permission
    千次阅读 多人点赞
    2021-08-27 13:42:22

    前言

    uses-permission和permission的区别

            permission定义权限

            uses-permission申请权限

    uses-permission(权限申请)

    介绍

            Android 应用必须请求访问敏感用户数据(例如联系人和短信)或某些系统功能(例如相机和互联网访问)的权限。每个权限都由一个唯一的标签标识。例如,需要发送 SMS 消息和访问互联网的应用程序必须在清单中包含以下内容:

    <manifest ... >
        <uses-permission android:name="android.permission.SEND_SMS"/>
        <uses-permission android:name="android.permission.INTERNET" />
        ...
    </manifest>
    

    添加自定义权限,如:

    <manifest ... >
        <uses-permission android:name="com.scc.userprovider.permissionread"/>
    <uses-permission android:name="com.scc.userprovider.permissionwrite"/>
        ...
    </manifest>
    

            权限不仅用于请求系统功能。你还可以限制其他应用与你的应用组件交互的方式。如何自定义权限请往下看。

    官方权限大全

    站内权限大全

    permission(自定义权限)

    介绍

            你的应用可以使用 声明安全权限,可用于限制对此应用或其他应用的特定组件或功能的访问,例如 ContentProvider。

    <permission 
        android:description="string resource"
        android:icon="drawable resource"
        android:label="string resource"
        android:name="string"
        android:permissionGroup="string"
        android:protectionLevel=["normal" | "dangerous" |
                               "signature" | ...] />
    

    android:description:权限说明。此属性必须设置为对字符串资源的引用

    例如:

      <permission 
        android:description="哈哈可读说明"
        .../>
    

    报错:AAPT: error: '哈哈可读说明' is incompatible with attribute description (attr) reference.

    • android:icon:权限的图标。

    • android:label向用户显示的权限的名称。可将此标签直接设置为原始字符串。不过,当准备好发布应用时,应将标签设置为对字符串资源的引用,以便可以像界面中的其他字符串一样进行本地化。

    • android:name:用于引用权限的名称。(例如,在元素和应用组件的 permission 属性中)

    • android:permissionGroup:将此权限分配给一个组。如果未设置此属性,则此权限不会属于某个组。

    • android:protectionLevel: 说明权限中隐含的潜在风险,并指示系统在确定是否将权限授予请求授权的应用时应遵循的流程。下表列出了所有基本权限类型。

      • normal:默认值。具有较低风险的权限。系统会自动向在安装时请求授权的应用授予此类权限,无需征得用户的明确许可(但用户始终可以选择在安装之前查看这些权限)。

      • dangerous:具有较高风险的权限。由于此类权限会带来潜在风险,因此系统可能不会自动向请求授权的应用授予此类权限

      • signature 只有在请求授权的应用使用与声明权限的应用相同的证书进行签名时系统才会授予的权限。如果证书匹配,则系统会在不通知用户或征得用户明确许可的情况下自动授予权限。

      • signatureOrSystem不要使用此选项,因为 signature 保护级别应足以满足大多数需求,无论应用安装在何处,该保护级别都能正常发挥作用。signatureOrSystem权限适用于以下特殊情况:多个供应商将应用内置到一个系统映像中,并且需要明确共享特定功能,因为这些功能是一起构建的。

    permission样例

    应用Demo(com.scc.cp)和其他应用(com.scc.ha)

    1.先使用定义一个权限

        <permission android:description="@string/permission_description"
            android:icon="@mipmap/ic_launcher"
            android:label="permissionLabel"
            android:name="com.scc.userprovider.permission"
            android:protectionLevel="normal"/>
    

    2.provider组件设置权限

        <provider
            android:authorities="com.scc.userprovider"
            android:name="com.scc.cp.UserProvider"
            android:permission="com.scc.userprovider.permission"
            android:exported="true"/>
    

    3.其他应用(com.scc.ha)使用com.scc.cp包加权限的UserProvider

            啥也不做直接操作:

    Process: com.scc.ha, PID: 14922
    java.lang.SecurityException: Permission Denial: opening provider com.scc.cp.UserProvider from 
    ProcessRecord{5d7db58 14922:com.scc.ha/u0a889} (pid=14922, uid=10889) 
    requires com.scc.userprovider.permission or com.scc.userprovider.permission
    

            报错显示缺少com.scc.userprovider.permission权限

             缺少权限,咱就申请权限:

    <uses-permission android:name="com.scc.userprovider.permission"/>
    

            然后就可以美滋滋的使用com.scc.cp包中的provider数据了。

    permission官方文档

    permission-group(自定义权限组)

    介绍

    <permission-group 
        android:description="string resource"
        android:icon="drawable resource"
        android:label="string resource"
        android:name="string" />
    

            声明相关权限的逻辑分组的名称。各个权限通过 元素的 permissionGroup 属性加入权限组中。权限组中的成员一起显示在界面中。

            注意此元素并不声明权限本身,而只声明可以放置权限的类别。

            permission-group属性介绍跟permission类似,就不多做介绍了。

    permission-group样例

    应用Demo(com.scc.cp)和其他应用(com.scc.ha)

    1.先使用定义一个权限组

        <permission-group
            android:name="com.scc.userprovider.permissiongroup"
            android:description="@string/userprovider_permission_group_description"
            android:icon="@mipmap/ic_launcher"
            android:label="GroupLabel"/>
    

    2.添加组员

        <permission
            android:name="com.scc.userprovider.permissionread"
            android:description="@string/userprovider_permission_read_description"
            android:icon="@mipmap/ic_launcher"
            android:label="readLabel"
            android:permissionGroup="com.scc.userprovider.permissiongroup"
            android:protectionLevel="normal"/>
        <permission
            android:name="com.scc.userprovider.permissionwrite"
            android:description="@string/userprovider_permission_write_description"
            android:icon="@mipmap/ic_launcher"
            android:label="writeLabel"
            android:permissionGroup="com.scc.userprovider.permissiongroup"
            android:protectionLevel="normal"/>
    

    3.provider组件设置权限

      <provider
        android:authorities="com.scc.userprovider"
        android:name="com.scc.cp.UserProvider"
        android:writePermission="com.scc.userprovider.permissionwrite"
        android:readPermission="com.scc.userprovider.permissionread"
        android:exported="true"/>
    

    4.其他应用(com.scc.ha)使用com.scc.cp包加权限的UserProvider

            啥也不做直接操作同样会报上面缺少权限的错误。

            咱们先申请权限

    <uses-permission android:name="com.scc.userprovider.permissionread"/>
    <uses-permission android:name="com.scc.userprovider.permissionwrite"/>
    

            然后就可以美滋滋的使用com.scc.cp包中的provider数据了。

    permission-group官方文档

    齐活,哪里有问题,欢迎指导。

    更多相关内容
  • Android权限操作之uses-permission详解

    千次阅读 2021-06-11 17:38:47
    本文实例讲述了Android权限操作之uses-permission。分享给大家供大家参考,具体如下: 我们在安装Android软件的时候,系统会提示该软件所需要的权限,相对于其他系统,android的权限非常多。我们在开发软件的时候,...

    本文实例讲述了Android权限操作之uses-permission。分享给大家供大家参考,具体如下:

    我们在安装Android软件的时候,系统会提示该软件所需要的权限,相对于其他系统,android的权限非常多。我们在开发软件的时候,也需要声明相应的权限,比如希望软件能发短信,需要声明软件调用短信的权限,否则软件运行的时候就会报错。

    Android的权限在AndroidManifest.xml文件里配置。AndroidManifest文件中有四个标签与permission有关,它们分别是 <permission>、 <permission-group> 、<permission-tree> 和 <uses-permission>。其中最常用的是 <uses-permission>,当我们需要获取某个权限的时候就必须在我们的manifest文件中声明<uses-permission>。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest>
      <application>
      </application>
      <uses-permission />
      <permission />
      <permission-tree />
      <permission-group />
      ...
    </manifest>

    <permission>和 <uses-permission>的作用相似,两者之间的不同之处,<uses-permission>是android预定义的权限,<permission>是自己定义的权限。 <permission>用的相对较少,<permission-group>   <permission-tree>这两个标签就更少见了,简单说<permission-group> 就是声明一个标签,该标签代表了一组permissions,而<permission-tree>是为一组permissions声明了一个namespace。后面三个标签具体使用方法后续文章会有介绍。

    <permission>定义方法如下:

    <permission android:description="string resource"
          android:icon="drawable resource"
          android:label="string resource"
          android:name="string"
          android:permissionGroup="string"
          android:protectionLevel=["normal" | "dangerous" |
                       "signature" | "signatureOrSystem"] />

    上面代码来自官方文档:http://developer.android.com/guide/topics/manifest/permission-element.html。propectionLevel这个属性是必须声明,告诉系统通知用户的应用要求许可,或允许谁认为获得许可的情况下。permissionGroup这个是可选的,与<permission-group>配合使用。label, name和icon用于描述权限。 <permission>的用法后面也会再详细分析。

    <uses-permission>是我们用的最多的,官方文档定义方式如下:

    <uses-permission android:name="string" />

    例如,短信和电话权限的定义:

    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.SEND_SMS"/>

    下面是收集到的 <uses-permission>的资料,方便用的时候查找:

    android.permission.ACCESS_CHECKIN_PROPERTIES
    允许读写访问”properties”表在checkin数据库中,改值可以修改上传( Allowsread/write access to the “properties” table in the checkin database, to changevalues that get uploaded)

    android.permission.ACCESS_COARSE_LOCATION
    允许一个程序访问CellID或WiFi热点来获取粗略的位置(Allowsan application to access coarse (e.g., Cell-ID, WiFi) location)

    android.permission.ACCESS_FINE_LOCATION
    允许一个程序访问精良位置(如GPS) (Allows an application to accessfine (e.g., GPS) location)

    android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
    允许应用程序访问额外的位置提供命令(Allowsan application to access extra location provider commands)

    android.permission.ACCESS_MOCK_LOCATION
    允许程序创建模拟位置提供用于测试(Allowsan application to create mock location providers for testing)

    android.permission.ACCESS_NETWORK_STATE
    允许程序访问有关GSM网络信息(Allows applications to accessinformation about networks)

    android.permission.ACCESS_SURFACE_FLINGER
    允许程序使用SurfaceFlinger底层特性(Allows an application to useSurfaceFlinger's low level features)

    android.permission.ACCESS_WIFI_STATE
    允许程序访问Wi-Fi网络状态信息(Allows applications to accessinformation about Wi-Fi networks)

    android.permission.ADD_SYSTEM_SERVICE
    允许程序发布系统级服务(Allowsan application to publish system-level services).

    android.permission.BATTERY_STATS
    允许程序更新手机电池统计信息(Allowsan application to update the collected battery statistics)

    android.permission.BLUETOOTH
    允许程序连接到已配对的蓝牙设备(Allowsapplications to connect to paired bluetooth devices)

    android.permission.BLUETOOTH_ADMIN
    允许程序发现和配对蓝牙设备(Allowsapplications to discover and pair bluetooth devices)

    android.permission.BRICK
    请求能够禁用设备(非常危险)(Required to be able to disable thedevice (very *erous!).)

    android.permission.BROADCAST_PACKAGE_REMOVED
    允许程序广播一个提示消息在一个应用程序包已经移除后(Allowsan application to broadcast a notification that an application
    package has been removed)

    android.permission.BROADCAST_STICKY
    允许一个程序广播常用intents(Allowsan application to broadcast sticky intents)

    android.permission.CALL_PHONE
    允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认(Allowsan application to initiate a phone call without going through the Dialer userinterface for the user to confirm the call being placed.)

    android.permission.CALL_PRIVILEGED
    允许一个程序拨打任何号码,包含紧急号码无需通过拨号用户界面需要用户确认(Allowsan application to call any phone number, including emergency numbers, withoutgoing through the Dialer user interface for the user to confirm the call beingplaced)

    android.permission.CAMERA
    请求访问使用照相设备(Requiredto be able to access the camera device. )

    android.permission.CHANGE_COMPONENT_ENABLED_STATE
    允许一个程序是否改变一个组件或其他的启用或禁用(Allowsan application to change whether an application component (other than its own)is enabled or not. )

    android.permission.CHANGE_CONFIGURATION
    允许一个程序修改当前设置,如本地化(Allowsan application to modify the current configuration, such as locale. )

    android.permission.CHANGE_NETWORK_STATE
    允许程序改变网络连接状态(Allowsapplications to change network connectivity state)

    android.permission.CHANGE_WIFI_STATE
    允许程序改变Wi-Fi连接状态(Allows applications to change Wi-Ficonnectivity state)

    android.permission.CLEAR_APP_CACHE
    允许一个程序清楚缓存从所有安装的程序在设备中(Allowsan application to clear the caches of all installed applications on the device.)

    android.permission.CLEAR_APP_USER_DATA
    允许一个程序清除用户设置(Allowsan application to clear user data)

    android.permission.CONTROL_LOCATION_UPDATES
    允许启用禁止位置更新提示从无线模块(Allowsenabling/disabling location update notifications from the radio. )

    android.permission.DELETE_CACHE_FILES
    允许程序删除缓存文件(Allowsan application to delete cache files)

    android.permission.DELETE_PACKAGES
    允许一个程序删除包(Allowsan application to delete packages)

    android.permission.DEVICE_POWER
    允许访问底层电源管理(Allowslow-level access to power management)

    android.permission.DIAGNOSTIC
    允许程序RW诊断资源(Allows applications to RW to diagnosticresources. )

    android.permission.DISABLE_KEYGUARD
    允许程序禁用键盘锁(Allowsapplications to disable the keyguard )

    android.permission.DUMP
    允许程序返回状态抓取信息从系统服务(Allowsan application to retrieve state dump information from system services.)

    android.permission.EXPAND_STATUS_BAR
    允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序(Allows an application to expand orcollapse the status bar. )

    android.permission.FACTORY_TEST
    作为一个工厂测试程序,运行在root用户(Run as a manufacturer test application,running as the root user. )

    android.permission.FLASHLIGHT
    访问闪光灯,android开发网提示HTC Dream不包含闪光灯(Allowsaccess to the flashlight )

    android.permission.FORCE_BACK
    允许程序强行一个后退操作是否在顶层activities(Allowsan application to force a BACK operation on whatever is the top activity. )

    android.permission.FOTA_UPDATE
    暂时不了解这是做什么使用的,android开发网分析可能是一个预留权限.

    android.permission.GET_ACCOUNTS
    访问一个帐户列表在AccountsService中(Allows access to thelist of accounts in the Accounts Service)

    android.permission.GET_PACKAGE_SIZE
    允许一个程序获取任何package占用空间容量(Allows an application to find out thespace used by any package. )

    android.permission.GET_TASKS
    允许一个程序获取信息有关当前或最近运行的任务,一个缩略的任务状态,是否活动等等(Allowsan application to get information about the currently or recently runningtasks: a thumbnail representation of the tasks, what activities are running init, etc.)

    android.permission.HARDWARE_TEST
    允许访问硬件(Allowsaccess to hardware peripherals. )

    android.permission.INJECT_EVENTS
    允许一个程序截获用户事件如按键、触摸、轨迹球等等到一个时间流,android开发网提醒算是hook技术吧(Allowsan application to inject user events (keys, touch, trackball) into the eventstream and deliver them to ANY window.)

    android.permission.INSTALL_PACKAGES
    允许一个程序安装packages(Allowsan application to install packages. )

    android.permission.INTERNAL_SYSTEM_WINDOW
    允许打开窗口使用系统用户界面(Allowsan application to open windows that are for use by parts of the system userinterface. )

    android.permission.INTERNET
    允许程序打开网络套接字(Allowsapplications to open network sockets)

    android.permission.MANAGE_APP_TOKENS
    允许程序管理(创建、催后、 z- order默认向z轴推移)程序引用在窗口管理器中(Allowsan application to manage (create, destroy, Z-order) application tokens in thewindow manager. )

    android.permission.MASTER_CLEAR
    目前还没有明确的解释,android开发网分析可能是清除一切数据,类似硬格机

    android.permission.MODIFY_AUDIO_SETTINGS
    允许程序修改全局音频设置(Allowsan application to modify global audio settings)

    android.permission.MODIFY_PHONE_STATE
    允许修改话机状态,如电源,人机接口等(Allowsmodification of the telephony state – power on, mmi, etc. )

    android.permission.MOUNT_UNMOUNT_FILESYSTEMS
    允许挂载和反挂载文件系统可移动存储(Allowsmounting and unmounting file systems for removable storage. )

    android.permission.PERSISTENT_ACTIVITY
    允许一个程序设置他的activities显示(Allow an application to make itsactivities persistent. )

    android.permission.PROCESS_OUTGOING_CALLS
    允许程序监视、修改有关播出电话(Allowsan application to monitor, modify, or abort outgoing calls)

    android.permission.READ_CALENDAR
    允许程序读取用户日历数据(Allowsan application to read the user's calendar data.)

    android.permission.READ_CONTACTS
    允许程序读取用户联系人数据(Allowsan application to read the user's contacts data.)

    android.permission.READ_FRAME_BUFFER
    允许程序屏幕波或和更多常规的访问帧缓冲数据(Allowsan application to take screen shots and more generally get access to the framebuffer data)

    android.permission.READ_INPUT_STATE
    允许程序返回当前按键状态(Allowsan application to retrieve the current state of keys and switches. )

    android.permission.READ_LOGS
    允许程序读取底层系统日志文件(Allowsan application to read the low-level system log files. )

    android.permission.READ_OWNER_DATA
    允许程序读取所有者数据(Allowsan application to read the owner's data)

    android.permission.READ_SMS
    允许程序读取短信息(Allowsan application to read SMS messages.)

    android.permission.READ_SYNC_SETTINGS
    允许程序读取同步设置(Allowsapplications to read the sync settings)

    android.permission.READ_SYNC_STATS
    允许程序读取同步状态(Allowsapplications to read the sync stats)

    android.permission.REBOOT
    请求能够重新启动设备(Requiredto be able to reboot the device. )

    android.permission.RECEIVE_BOOT_COMPLETED
    允许一个程序接收到ACTION_BOOT_COMPLETED广播在系统完成启动(Allowsan application to receive the ACTION_BOOT_COMPLETED that is broadcast after thesystem finishes booting. )

    android.permission.RECEIVE_MMS
    允许一个程序监控将收到MMS彩信,记录或处理(Allowsan application to monitor incoming MMS messages, to record or performprocessing on them. )

    android.permission.RECEIVE_SMS
    允许程序监控一个将收到短信息,记录或处理(Allowsan application to monitor incoming SMS messages, to record or performprocessing on them.)

    android.permission.RECEIVE_WAP_PUSH
    允许程序监控将收到WAPPUSH信息(Allows an applicationto monitor incoming WAP push messages. )

    android.permission.RECORD_AUDIO
    允许程序录制音频(Allowsan application to record audio)

    android.permission.REORDER_TASKS
    允许程序改变Z轴排列任务(Allows an application to change theZ-order of tasks)

    android.permission.RESTART_PACKAGES
    允许程序重新启动其他程序(Allowsan application to restart other applications)

    android.permission.SEND_SMS
    允许程序发送SMS短信(Allows an application to send SMSmessages)

    android.permission.SET_ACTIVITY_WATCHER
    允许程序监控或控制activities已经启动全局系统中(Allows an application to watch andcontrol how activities are started globally in the system.)

    android.permission.SET_ALWAYS_FINISH
    允许程序控制是否活动间接完成在处于后台时(Allowsan application to control whether activities are immediately finished when putin the background.)

    android.permission.SET_ANIMATION_SCALE
    修改全局信息比例(Modifythe global animation scaling factor.)

    android.permission.SET_DEBUG_APP
    配置一个程序用于调试(Configurean application for debugging.)

    android.permission.SET_ORIENTATION
    允许底层访问设置屏幕方向和实际旋转(Allowslow-level access to setting the orientation (actually rotation) of the screen.)

    android.permission.SET_PREFERRED_APPLICATIONS
    允许一个程序修改列表参数PackageManager.addPackageToPreferred()和PackageManager.removePackageFromPreferred()方法(Allowsan application to modify the list of preferred applications with thePackageManager.addPackageToPreferred() andPackageManager.removePackageFromPreferred() methods.)

    android.permission.SET_PROCESS_FOREGROUND
    允许程序当前运行程序强行到前台(Allowsan application to force any currently running process to be in the foreground.)

    android.permission.SET_PROCESS_LIMIT
    允许设置最大的运行进程数量(Allowsan application to set the maximum number of (not needed) application processesthat can be running. )

    android.permission.SET_TIME_ZONE
    允许程序设置时间区域(Allowsapplications to set the system time zone)

    android.permission.SET_WALLPAPER
    允许程序设置壁纸(Allowsapplications to set the wallpaper )

    android.permission.SET_WALLPAPER_HINTS
    允许程序设置壁纸hits(Allowsapplications to set the wallpaper hints)

    android.permission.SIGNAL_PERSISTENT_PROCESSES
    允许程序请求发送信号到所有显示的进程中(Allowan application to request that a signal be sent to all persistent processes)

    android.permission.STATUS_BAR
    允许程序打开、关闭或禁用状态栏及图标Allowsan application to open, close, or disable the status bar and its icons.

    android.permission.SUBSCRIBED_FEEDS_READ
    允许一个程序访问订阅RSSFeed内容提供(Allows an applicationto allow access the subscribed feeds ContentProvider. )

    android.permission.SUBSCRIBED_FEEDS_WRITE
    系统暂时保留改设置,android开发网认为未来版本会加入该功能。

    android.permission.SYSTEM_ALERT_WINDOW
    允许一个程序打开窗口使用TYPE_SYSTEM_ALERT,显示在其他所有程序的顶层(Allowsan application to open windows using the type TYPE_SYSTEM_ALERT, shown on topof all other applications. )

    android.permission.VIBRATE
    允许访问振动设备(Allowsaccess to the vibrator)

    android.permission.WAKE_LOCK
    允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失(Allows using PowerManager WakeLocks to keep
    processor from sleeping or screen fromdimming)

    android.permission.WRITE_APN_SETTINGS
    允许程序写入API设置(Allows applications to write the apnsettings)

    android.permission.WRITE_CALENDAR
    允许一个程序写入但不读取用户日历数据(Allowsan application to write (but not read) the user's calendar data. )

    android.permission.WRITE_CONTACTS
    允许程序写入但不读取用户联系人数据(Allowsan application to write (but not read) the user's contacts data. )

    android.permission.WRITE_GSERVICES
    允许程序修改Google服务地图(Allows an application to modify theGoogle service map. )

    android.permission.WRITE_OWNER_DATA
    允许一个程序写入但不读取所有者数据(Allowsan application to write (but not read) the owner's data.)

    android.permission.WRITE_SETTINGS
    允许程序读取或写入系统设置(Allowsan application to read or write the system settings. )

    android.permission.WRITE_SMS
    允许程序写短信(Allowsan application to write SMS messages)

    android.permission.WRITE_SYNC_SETTINGS
    允许程序写入同步设置(Allowsapplications to write the sync settings)

    PS:关于AndroidManifest.xml文件相关属性功能可参考本站在线工具:

    Android Manifest功能与权限描述大全:
    http://tools.jb51.net/table/AndroidManifest

    更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

    希望本文所述对大家Android程序设计有所帮助。

    展开全文
  • 55 Flutter Permission_handler权限申请

    千次阅读 2021-05-21 15:28:23
    Flutter permission权限申请 1.简介 在我们Android和IOS开发中,都会涉及到权限问题,而Flutter是需要将IOS和Android权限柔和起来的,分别需要适配Android和IOS, 推荐使用Permission_handler。 2.使用 1.依赖 ...

    Flutter permission权限申请

    1.简介

    在我们Android和IOS开发中,都会涉及到权限问题,而Flutter是需要将IOS和Android权限柔和起来的,分别需要适配Android和IOS,

    推荐使用Permission_handler。

    2.使用

    1.依赖

    dependencies:
      permission_handler: ^7.1.0
    
    import 'package:permission_handler/permission_handler.dart';
    

    在Android manifest添加相应权限:

        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

    全部使用AndroidX,抛弃过去的support支持包

    android.useAndroidX=true
    android.enableJetifier=true
    

    compileSdkVersion和targetSdkVersion要设置为28以上

        compileSdkVersion 28
        targetSdkVersion 28
    

    在IOS中,将以下内容添加到您的Podfile文件中:

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          ... # Here are some configurations automatically generated by flutter
    
          # You can remove unused permissions here
          # for more infomation: https://github.com/BaseflowIT/flutter-permission-handler/blob/develop/permission_handler/ios/Classes/PermissionHandlerEnums.h
          # e.g. when you don't need camera permission, just add 'PERMISSION_CAMERA=0'
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
            '$(inherited)',
    
            ## dart: PermissionGroup.calendar
            # 'PERMISSION_EVENTS=0',
    
            ## dart: PermissionGroup.reminders
            # 'PERMISSION_REMINDERS=0',
    
            ## dart: PermissionGroup.contacts
            # 'PERMISSION_CONTACTS=0',
    
            ## dart: PermissionGroup.camera
            # 'PERMISSION_CAMERA=0',
    
            ## dart: PermissionGroup.microphone
            # 'PERMISSION_MICROPHONE=0',
    
            ## dart: PermissionGroup.speech
            # 'PERMISSION_SPEECH_RECOGNIZER=0',
    
            ## dart: PermissionGroup.photos
            # 'PERMISSION_PHOTOS=0',
    
            ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
            # 'PERMISSION_LOCATION=0',
    
            ## dart: PermissionGroup.notification
            # 'PERMISSION_NOTIFICATIONS=0',
    
            ## dart: PermissionGroup.mediaLibrary
            # 'PERMISSION_MEDIA_LIBRARY=0',
    
            ## dart: PermissionGroup.sensors
            # 'PERMISSION_SENSORS=0',   
    
            ## dart: PermissionGroup.bluetooth
            # 'PERMISSION_BLUETOOTH=0'
          ]
        end
      end
    end
    

    2.使用

    enum PermissionStatus {
      /// The user denied access to the requested feature.
      denied, //权限被拒绝
    
      /// The user granted access to the requested feature.
      granted, //通过
    
      /// The OS denied access to the requested feature. The user cannot change
      /// this app's status, possibly due to active restrictions such as parental
      /// controls being in place.
      /// *Only supported on iOS.*
      restricted, //IOS
    
      ///User has authorized this application for limited access.
      /// *Only supported on iOS (iOS14+).*
      limited, //IOS
    
      /// The user denied access to the requested feature and selected to never
      /// again show a request for this permission. The user may still change the
      /// permission status in the settings.
      /// *Only supported on Android.*
      permanentlyDenied, //拒绝,且不在提示
    }
    

    3.检查权限

    
      void checkPermission() async {
        Permission permission = Permission.storage;
        PermissionStatus status = await permission.status;
        print('检测权限$status');
        if (status.isGranted) {
          //权限通过
        } else if (status.isDenied) {
          //权限拒绝, 需要区分IOS和Android,二者不一样
          requestPermission(permission);
        } else if (status.isPermanentlyDenied) {
          //权限永久拒绝,且不在提示,需要进入设置界面,IOS和Android不同
          openAppSettings();
        } else if (status.isRestricted) {
          //活动限制(例如,设置了家长///控件,仅在iOS以上受支持。
          openAppSettings();
        } else {
          //第一次申请
          requestPermission(permission);
        }
      }
    

    ————————注意:isPermanentlyDenied,在没有申请之前,都会是Denied,而不是permanentlyDenied

    4.申请权限

      void requestPermission(Permission permission) async {
        //发起权限申请
        PermissionStatus status = await permission.request();
        // 返回权限申请的状态 status
        print('权限状态$status');
        if (status.isPermanentlyDenied) {
           openAppSettings();
        }
      }
    

    5.申请多个权限

    
      void requestPermissions() async {
        Map<Permission, PermissionStatus> statuses = await [
          Permission.location,
          Permission.storage,
        ].request();
        print('位置权限:${statuses[Permission.location]}');
        print('存储权限:${statuses[Permission.storage]}');
      }
    

    6.打开设置

    if (await Permission.speech.isPermanentlyDenied) {
      // The user opted to never again see the permission request dialog for this
      // app. The only way to change the permission's status now is to let the
      // user manually enable it in the system settings.
      openAppSettings();
    }
    

    7.在Android上,显示理由

    bool isShown = await Permission.contacts.shouldShowRequestRationale;
    

    ————————不太清楚需要怎么用

    代码演示如下:

    import 'package:flutter/cupertino.dart';
    import 'package:permission_handler/permission_handler.dart';
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return MaterialApp(
            home: Scaffold(
          appBar: AppBar(title: Text('FlutterDemo')),
          body: PermissionDemo(),
        ));
      }
    }
    
    class PermissionDemo extends StatefulWidget {
      PermissionDemo({Key key}) : super(key: key);
    
      @override
      _PermissionDemoState createState() {
        return _PermissionDemoState();
      }
    }
    
    class _PermissionDemoState extends State<PermissionDemo> {
      @override
      void initState() {
        super.initState();
      }
    
      @override
      void dispose() {
        super.dispose();
      }
    
      void checkPermission() async {
        Permission permission = Permission.storage;
        PermissionStatus status = await permission.status;
        print('检测权限$status');
        if (status.isGranted) {
          //权限通过
        } else if (status.isDenied) {
          //权限拒绝, 需要区分IOS和Android,二者不一样
          requestPermission(permission);
        } else if (status.isPermanentlyDenied) {
          //权限永久拒绝,且不在提示,需要进入设置界面,IOS和Android不同
          openAppSettings();
        } else if (status.isRestricted) {
          //活动限制(例如,设置了家长///控件,仅在iOS以上受支持。
          openAppSettings();
        } else {
          //第一次申请
          requestPermission(permission);
        }
      }
    
      void requestPermission(Permission permission) async {
        //发起权限申请
        PermissionStatus status = await permission.request();
        // 返回权限申请的状态 status
        print('权限状态$status');
        if (status.isPermanentlyDenied) {
           openAppSettings();
        }
      }
    
      void checkPermission2() async {
        Permission storagePermission = Permission.storage;
        Permission locationPermission = Permission.location;
        requestPermissions();
      }
    
      void requestPermissions() async {
        Map<Permission, PermissionStatus> statuses = await [
          Permission.location,
          Permission.storage,
        ].request();
        print('位置权限:${statuses[Permission.location]}');
        print('存储权限:${statuses[Permission.storage]}');
    
        bool isShown = await Permission.contacts.shouldShowRequestRationale;
      }
    
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return Center(
          child: Column(
            children: <Widget>[
              OutlinedButton(onPressed: () {
                checkPermission();
              }, child: Text('申请权限存储权限')),
              OutlinedButton(onPressed: () {
                checkPermission2();
              }, child: Text('多权限申请'))
            ],
          ),
        );
      }
    }
    

    3.判断平台

    依赖

    import 'dart:io';
    
    Platform.isIOS
    Platform.isAndroid
    

    4.权限封装

    import 'package:flutter/cupertino.dart';
    import 'package:permission_handler/permission_handler.dart';
    
    class PermissionHelper {
      static VoidCallback defaultCall = () {};
    
      ///检查权限
      static void check(List<Permission> permissionList,
          {String errMsg,
          VoidCallback onSuccess,
          VoidCallback onFailed,
          VoidCallback onOpenSetting}) async {
        bool flag = true;
        for (var value in permissionList) {
          var status = await value.status;
          if (!status.isGranted) {
            flag = false;
            break;
          }
        }
        if (!flag) {
          PermissionStatus permissionStatus =
              await requestPermission(permissionList);
          if (permissionStatus.isGranted) {
            onSuccess != null ? onSuccess() : defaultCall();
          } else if (permissionStatus.isDenied) {
            onFailed != null ? onFailed() : defaultCall();
          } else if (permissionStatus.isPermanentlyDenied) {
            onOpenSetting != null ? onOpenSetting() : defaultCall();
          } else if (permissionStatus.isRestricted) {
            //IOS单独处理
            onOpenSetting != null ? onOpenSetting() : defaultCall();
          } else if (permissionStatus.isLimited) {
            //IOS单独处理
            onOpenSetting != null ? onOpenSetting() : defaultCall();
          }
        }
      }
    
      //申请权限
      static Future<PermissionStatus> requestPermission(
          List<Permission> permissionList) async {
        Map<Permission, PermissionStatus> statuses = await permissionList.request();
        PermissionStatus currentPermissionStatus = PermissionStatus.granted;
        statuses.forEach((key, value) {
          if (!value.isGranted) {
            currentPermissionStatus = value;
            return;
          }
        });
        return currentPermissionStatus;
      }
    }
    
    
    • onSuccess : 同意
    • onFailed : 其中一个不同意
    • onOpenSetting 需要去设置

    使用,代码案例如下

    import 'package:flutter/cupertino.dart';
    import 'package:permission_handler/permission_handler.dart';
    import 'package:flutter/material.dart';
    
    import 'PermissionHelper.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return MaterialApp(
            home: Scaffold(
          appBar: AppBar(title: Text('FlutterDemo')),
          body: PermissionDemo(),
        ));
      }
    }
    
    class PermissionDemo extends StatefulWidget {
      PermissionDemo({Key key}) : super(key: key);
    
      @override
      _PermissionDemoState createState() {
        return _PermissionDemoState();
      }
    }
    
    class _PermissionDemoState extends State<PermissionDemo> {
      @override
      void initState() {
        super.initState();
      }
    
      @override
      void dispose() {
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return Center(
          child: Column(
            children: <Widget>[
              OutlinedButton(
                  onPressed: () {
                    List<Permission> permissions = [
                      Permission.storage,
                      Permission.location
                    ];
                    PermissionHelper.check(permissions,
                        onSuccess: () {
                          print('onSuccess');
                        }, onFailed: () {
                          print('onFailed');
                        }, onOpenSetting: () {
                          print('onOpenSetting');
                          openAppSettings();
                        });
                  },
                  child: Text('申请权限存储权限')),
              OutlinedButton(onPressed: () {}, child: Text('多权限申请'))
            ],
          ),
        );
      }
    }
    
    
    展开全文
  • Android开发之 permission动态权限获取

    万次阅读 多人点赞 2019-08-19 10:57:20
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> ...

    权限查看:戳这里

    在文章最后附上DEMO

    DEMO效果:

     

    一、说明:

    1、支持单个权限、多个权限、单个权限组、多个权限组请求

    2、不指定权限则自动获取清单文件上的危险权限进行申请

    3、如果动态申请的权限没有在清单文件中注册会抛出异常

    4、支持大部分国产手机直接跳转到具体的权限设置页面

    5、可设置被拒绝后继续申请,直到用户授权或者永久拒绝

    6、支持请求6.0及以上的悬浮窗权限和8.0及以上的安装权限

    7、Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户。在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在运行时根据用户的需要动态授予。这样就不需要在安装时被强迫同意某些权限。

    二、权限

    1、Android系统对所有的危险权限进行了分组,称为 权限组 。属于同一组的危险权限将自动合并授予,用户授予应用某个权限组的权限,则应用将获得该权限组下的所有权限(前提是相关权限在 AndroidManifest.xml 中有声明)。

    危险权限 和 权限组 列表如下: 在 AndroidManifest.xml 声明过的危险权限对应的权限组可以在系统 “设置” -> “应用” -> “应用信息” -> “权限” 中查看,可以手动授权和取消授权。

    三、在运行时请求权限

    1、设备系统是 Android 6.0 (API 23) 或更高版本,并且应用的 targetSdkVersion 是 23 或更高版本,则针对在 AndroidManifest.xml 中声明的危险权限,在运行时还需要动态请求用户授权。

    2、动态权限请求相关操作的API封装在在android.support.v4包中,发起请求权限的Activity需要直接或间接继承android.support.v4.app.FragmentActivity

    3、 也可以在直接或间接继承 android.support.v4.app.Fragment 的 Fragment 中发起权限请求。

    四、代码步骤中主要包含以下几个方法:

    1、检查权限

    // 检查权限
    
    ContextCompat.checkSelfPermission(Context context, String permission)

          返回值(android.content.pm.PackageManager中的常量):

    有权限: PackageManager.PERMISSION_GRANTED
    无权限: PackageManager.PERMISSION_DENIED

    当应用需要用到危险权限时,在执行权限相关代码前,使用该方法判断是否拥有指定的权限。有权限,则继续执行设计需要权限的代码;无权限,则向用户请求授予权限。

    2、解释权限

    // 解释权限
    ActivityCompat.shouldShowRequestPermissionRationale(Activity activity, String permission)

    2.1判断是否有必要向用户解释为什么要这项权限。如果应用第一次请求过此权限,但是被用户拒绝了,则之后调用该方法将返回 true,此时就有必要向用户详细说明需要此权限的原因(个人认为此方法是可选的)。

     2.2如果应用第一次请求此权限时被用户拒绝,第二次再请求此权限时,用户勾选了权限请求对话框的“不再询问”,则此方法返回 false。如果设备规范禁止应用拥有该权限,此方法也返回 false。

    3、请求权限

    // 请求权限
    ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode)
    
    1. 权限参数传入的是数组,可以调用该方法一次请求多个权限;
    2. 传入的权限数组参数以单个具体权限为单位,但弹框询问用户授权时,属于同一权限组的权限将自动合并询问授权一次;
    3. 请求的权限必须事先在 AndroidManifest.xml 中有声明,否则调用此方法请求时,将不弹框,而是直接返回“拒绝”的结果;
    4. 第一次请求权限时,用户点击了“拒绝”,第二次再请求该权限时,对话框将出现“不再询问”复选框,如果用户勾选了“不再询问”并点击了“拒绝”,则之后再请求此权限组时将不弹框,而是直接返回“拒绝”的结果。

    4、处理结果

    请求权限的结果返回和接收一个Activity的返回类似,重写 FragmentActivity 或 (v4) Fragment 中的 onRequestPermissionsResult(...) 方法。

    /**
     * 处理权限请求结果
     *
     * @param requestCode
     *          请求权限时传入的请求码,用于区别是哪一次请求的
     *
     * @param permissions
     *          所请求的所有权限的数组
     *
     * @param grantResults
     *          权限授予结果,和 permissions 数组参数中的权限一一对应,元素值为两种情况,如下:
     *          授予: PackageManager.PERMISSION_GRANTED
     *          拒绝: PackageManager.PERMISSION_DENIED
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        // ...
    }

     

    五、 代码示例

    DEMO功能很简单,如下:

    1. 点击一个按钮,如果有相应权限就进行备份通讯录操作;
    2. 如果没有相应的权限,则向用户申请权限;
    3. 如果用户授权通过,则继续进行备份通讯录操作;
    4. 如果用户拒绝授权,则弹出对话框引导用户跳转到应用权限管理界面手动授权。

    部分代码示例:

    1、首先在 AndroidManifest.xml 中声明权限

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.xiets.demoapp">
    
        <!-- 声明所有需要的权限(包括普通权限和危险权限) -->
        <uses-permission android:name="android.permission.READ_CONTACTS"/>
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
        <application
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme">
    
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        </application>
    
    </manifest>

    2、布局文件 activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dp">
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="click"
            android:textSize="20sp"
            android:text="备份通讯录" />
    
    </RelativeLayout>

    3、MainActivity

    package com.xiets.demoapp;
    
    import android.Manifest;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.Settings;
    import android.support.annotation.NonNull;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.content.ContextCompat;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Toast;
    
    /**
     * 一键备份通讯录
     *
     * @author xietansheng
     */
    public class MainActivity extends AppCompatActivity {
    
        private static final int MY_PERMISSION_REQUEST_CODE = 10000;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        /**
         * 点击按钮,将通讯录备份保存到外部存储器备。
         *
         * 需要3个权限(都是危险权限):
         *      1. 读取通讯录权限;
         *      2. 读取外部存储器权限;
         *      3. 写入外部存储器权限.
         */
        public void click(View view) {
            /**
             * 第 1 步: 检查是否有相应的权限,根据自己需求,进行添加相应的权限
             */
            boolean isAllGranted = checkPermissionAllGranted(
                    new String[] {
                            Manifest.permission.READ_CONTACTS,
                            Manifest.permission.READ_EXTERNAL_STORAGE,
                            Manifest.permission.WRITE_EXTERNAL_STORAGE
                    }
            );
            // 如果这3个权限全都拥有, 则直接执行备份代码
            if (isAllGranted) {
                doBackup();
                return;
            }
    
            /**
             * 第 2 步: 请求权限
             */
            // 一次请求多个权限, 如果其他有权限是已经授予的将会自动忽略掉
            ActivityCompat.requestPermissions(
                    this,
                    new String[] {
                            Manifest.permission.READ_CONTACTS,
                            Manifest.permission.READ_EXTERNAL_STORAGE,
                            Manifest.permission.WRITE_EXTERNAL_STORAGE
                    },
                    MY_PERMISSION_REQUEST_CODE
            );
        }
    
        /**
         * 检查是否拥有指定的所有权限
         */
        private boolean checkPermissionAllGranted(String[] permissions) {
            for (String permission : permissions) {
                if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                    // 只要有一个权限没有被授予, 则直接返回 false
                    return false;
                }
            }
            return true;
        }
    
        /**
         * 第 3 步: 申请权限结果返回处理
         */
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    
            if (requestCode == MY_PERMISSION_REQUEST_CODE) {
                boolean isAllGranted = true;
    
                // 判断是否所有的权限都已经授予了
                for (int grant : grantResults) {
                    if (grant != PackageManager.PERMISSION_GRANTED) {
                        isAllGranted = false;
                        break;
                    }
                }
    
                if (isAllGranted) {
                    // 如果所有的权限都授予了, 则执行备份代码
                    doBackup();
    
                } else {
                    // 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮
                    openAppDetails();
                }
            }
        }
    
        /**
         * 第 4 步: 备份通讯录操作
         */
        private void doBackup() {
            // 本文主旨是讲解如果动态申请权限, 具体备份代码不再展示, 就假装备份一下
            Toast.makeText(this, "正在备份通讯录...", Toast.LENGTH_SHORT).show();
        }
    
        /**
         * 打开 APP 的详情设置
         */
        private void openAppDetails() {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("备份通讯录需要访问 “通讯录” 和 “外部存储器”,请到 “应用信息 -> 权限” 中授予!");
            builder.setPositiveButton("去手动授权", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Intent intent = new Intent();
                    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    intent.addCategory(Intent.CATEGORY_DEFAULT);
                    intent.setData(Uri.parse("package:" + getPackageName()));
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                    intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                    startActivity(intent);
                }
            });
            builder.setNegativeButton("取消", null);
            builder.show();
        }
    
    }

    DEMO地址:下载

    展开全文
  • LocalLifecycleOwner 获取 Lifecycle val lifecycle = LocalLifecycleOwner.current.lifecycle // 定义需要动态获取的 Permission 类型 val permission = Manifest.permission.READ_EXTERNAL_STORAGE // Result API ...
  • Android各种访问权限Permission详解

    千次阅读 2019-09-27 17:35:43
    android.permission.EXPAND_STATUS_BAR允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序 android.permission.FACTORY_TEST作为一个工厂测试程序,运行在root用户 ...
  • 安卓Permission权限请求

    万次阅读 2019-01-07 10:52:10
    AndroidPermission,权限自动请求示例(所需权限被关闭时,会自动请求) 权限请求源码:(将应用的Activity设为PermissionActivity的子类,即可自动请求所需权限) package com.sc.demo; import android...
  • permission denied什么意思

    千次阅读 2022-01-28 14:04:57
    经常使用Linux系统的小伙伴,在操作的过程中都可能遇到过permission denied的错误提示问题,很多朋友不知道permission denied代表的是什么意思,也不知道怎么解决这个问题,今天吾爱编程为大家介绍一下Permission ...
  • Android Runtime Permission 详解

    千次阅读 2018-05-04 15:31:34
    前言: 在Android 6.0 之前权限管理存在一些弊端: ... 在Android 6.0 之前权限都称为install time permission,应用软件在安装以后用户不能修改permission 的授权情况,也不允许对permission 进行单独...
  • Permission(使用与框架使用)

    万次阅读 2019-04-08 19:31:22
       三、Normal Permission和Dangerous Permission    四、实现支持运行时权限    五、permissionsdispatcher框架的使用 一、引言   在Android 6.0以前(targetSdkVersion 23)以前,我们安装APP时会...
  • Android权限Permission的详解

    千次阅读 2019-05-09 19:30:18
    访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的...
  • 关于zsh: permission denied 问题[已解决]

    千次阅读 多人点赞 2022-03-28 23:08:45
    执行后 报错 “zsh: permission denied: ./python3.10_env/bin/activate” ,该提示的意思是 “用户没有权限,所以才出现了这个错误,所以只需要用chmod修改一下权限就可以了”。 解决方法如下 chmod u+x filename ...
  • Linux下permission denied

    千次阅读 2022-04-05 16:37:50
    在终端运行Python脚本文件遇到permission denied。 运行test.py显示permission denied,文件权限不允许。 为了获得执行权限,需要借助chmod命令修改文件权限。 假设需要修改权限的文件为test.py,首先切换到test.py...
  • uniapp权限之manifest.json权限配置,android权限(permission)---附访问许可描述说明一、manifest.json权限配置,android权限(permission)二、访问许可描述说明(上架审核需要,仅供参考)--更多更新中1、uniapp...
  • uses-permissionpermission详解

    千次阅读 2019-08-02 06:50:18
    uses-permission>: 官方描述: If an application needs access to a feature protected by a permission, it must declare that it requires that permission with a <uses-permission> element in.....
  • uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&gt;public static final String WRITE_EXTERNAL_STORAGE = "android.permission.WRITE_EXTERNAL_STORAGE";...
  • Android 权限(permission)大全

    千次阅读 2018-09-21 15:57:24
    1.android.permission.WRITE_USER_DICTIONARY 允许应用程序向用户词典中写入新词  2.android.permission.WRITE_SYNC_SETTINGS 写入Google在线同步设置  3.android.permission.WRITE_SOCIAL_STREAM 读取用户的...
  • 下面是我在学习android开发时遇到的permission denied的问题和解决办法 1. net: ERR_CACHE_MISS 解决方法 在AndroidManifest.xml中加入 permission如下: <manifest xmlns:android=...
  • Permission denied的解决办法

    千次阅读 2020-11-22 14:12:56
    Permission denied的解决办法东东 • 2015 年 03 月 19 日使用python语法运行文件时Permission denied,安装scon时候,运行python setup.py install,到最后出现了Permission denied错误这个当然是权限错误,但是和一般...
  • Android 各权限(permission)作用整理

    千次阅读 2019-04-26 15:38:10
    在Android的设计中,资源的访问或者网络连接,要得到这些服务都需要声明其访问权限,... 1.android.permission.WRITE_USER_DICTIONARY 允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTI...
  • Android之权限(permission)大全

    万次阅读 2018-11-20 09:09:24
    Android 6.0开始,Google将权限分为两类,一类是Normal Permission, 这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;另一类是Dangerous Permission,一般是涉及到用户隐私的,需要...
  • 最近有用户在操作Linux系统是遇到permission denied问题,这也是比较常见的故障问题,下面给大家整理一种常规的解决方法。1、以ubuntuu系统为例,比如建立一个test.sh的脚本文件,脚本代码如下:#! /bin/bashecho ...
  • Android 6.0之后需要动态申请相机权限 首先得把申明的静态权限删除 然后申请动态权限 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { ... Manifest.permission.CAMERA) != PackageManager
  • yanzhenjie:permission:1.0.5 使用

    千次阅读 2020-03-01 21:14:15
     // AndPermission.with(this).requestCode(102).permission(Manifest.permission.WRITE_EXTERNAL_STORAGE).send();  } // 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。  // 第一个权限...
  • Flutter 使用permission_handler 申请权限

    千次阅读 2021-10-15 14:12:15
    最近Flutter项目中需要使用到高德定位,需要申请定位权限,在这里使用到了permission_handler 。遇到了一些问题记录一下(以定位权限为例)。 获取插件 在 pubspec.yaml文件配置 dependencies: permission_...
  • laravel权限管理permission

    千次阅读 2018-04-24 15:39:25
    https://github.com/spatie/laravel-permission 中文翻译: https://laravel-china.org/topics/8018/extension-recommendation-role-and-authority-control-in-spatielaravel-permission-laravel-applications .....
  • 微信扫码scanQrCode:permission denied

    千次阅读 2022-04-12 12:19:11
    安卓手机:permission denied ios手机:scanQRCode:the permission value is offline verifying 解决方案: 1、确认config的jsApiList参数包含了这个JSAPI 前端代码:wx.config中jsApiList里加上'scanQRCode' 2...
  • 近期Pycharm运行python程序,提示出错信息“PermissionError: [Errno 13] Permission denied”,各种尝试一番,总算是解决了,特此记录下留作备忘。 排查过程 问题初始 相关代码时从github上获取的,在安装了相关的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 420,846
精华内容 168,338
关键字:

permission