• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android M以上运行时权限(Google官方出品),androidgoogle

Android M以上运行时权限(Google官方出品),androidgoogle

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了google android sdk,google android,google android官网,googleandroidsdk r24,android googlesource等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android M以上运行时权限(Google官方出品),androidgoogle


转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6690152.html 

 

网上运行时权限的例子、Demo无计其数,但是和Google官方出品的比起来,都显得很啰嗦。作为Android开发人员应该以Google的实例为样本。官方出品,必属精品!!!

Google官方Runtime Permissions Demo地址:https://github.com/googlesamples/android-RuntimePermissions

 

Demo如下(这里强调一下,Google推荐使用Snackbar代替Toast)

在 Android M 版本(即6.0以后的版本),多了一个特殊权限处理。开发者的开发工具Android Studio 如果是 Android API 23 Platform或以上版本,需要在调用特殊权限的地方手动将权限打开,在 AndroidManifest 直接说明是不好用的。

那么都有哪些权限是需要特殊处理的呢。下面我就把这些特殊权限按类罗列出来,并告诉你如何在代码中进行手动调用。

需要单独申请的权限共分为9组,每组只要有一个权限申请成功,默认整组权限都可以使用了。

①使用您的通讯录

group:android.permission-group.CONTACTS  
          permission:android.permission.WRITE_CONTACTS  
          permission:android.permission.GET_ACCOUNTS  
          permission:android.permission.READ_CONTACTS

②拨打电话和管理通话

group:android.permission-group.PHONE  
          permission:android.permission.READ_CALL_LOG  
          permission:android.permission.READ_PHONE_STATE  
          permission:android.permission.CALL_PHONE  
          permission:android.permission.WRITE_CALL_LOG  
          permission:android.permission.USE_SIP  
          permission:android.permission.PROCESS_OUTGOING_CALLS  
          permission:com.android.voicemail.permission.ADD_VOICEMAIL

③访问您的日历

group:android.permission-group.CALENDAR  
          permission:android.permission.READ_CALENDAR  
          permission:android.permission.WRITE_CALENDAR

④拍摄照片和录制视频

group:android.permission-group.CAMERA  
          permission:android.permission.CAMERA 

⑤访问与您的生命体征相关的传感器数据

group:android.permission-group.SENSORS  
          permission:android.permission.BODY_SENSORS

⑥使用此设备的位置信息

group:android.permission-group.LOCATION  
          permission:android.permission.ACCESS_FINE_LOCATION  
          permission:android.permission.ACCESS_COARSE_LOCATION

⑦访问您设备上的照片、媒体内容和文件

group:android.permission-group.STORAGE  
          permission:android.permission.READ_EXTERNAL_STORAGE  
          permission:android.permission.WRITE_EXTERNAL_STORAGE

⑧录制音频

group:android.permission-group.MICROPHONE  
          permission:android.permission.RECORD_AUDIO

⑨发送和查看短信

group:android.permission-group.SMS  
          permission:android.permission.READ_SMS  
          permission:android.permission.RECEIVE_WAP_PUSH  
          permission:android.permission.RECEIVE_MMS  
          permission:android.permission.RECEIVE_SMS  
          permission:android.permission.SEND_SMS  
          permission:android.permission.READ_CELL_BROADCASTS

 

废话不多说,让我们一探究竟Google是如何处理Android M以上运行时权限的。

以"联系人权限"为例做演示,其他的权限大同小异。

1.创建一个工具类PermissionUtil

Google对这个工具类作出的解释是 Utility class that wraps access to the runtime permissions API in M and provides basic helper methods.

即:在M中包含对运行时权限API的访问的实用程序类,并提供基本的帮助方法。

public abstract class PermissionUtil {

    /**
     * 检查所有给定的权限是否通过验证给定数组中的每个条目都具有该值*/
    public static boolean verifyPermissions(int[] grantResults) {
        // 至少检查一个结果
        if (grantResults.length < 1) {
            return false;
        }

        // 验证是否已授予每个必需的权限,否则返回false
        for (int result : grantResults) {
            if (result != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }

}

 

2.联系人权限已在Android M及以上版本中声明。 它们在旧平台上不可用,因此我们隐藏按钮以访问联系人数据库。这显示了如何添加新的运行时权限,不适用于较旧的平台版本。 这对于其他权限可能会提示用户进行升级的自动更新非常有用。

public class RuntimePermissionsFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_main, null);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            root.findViewById(R.id.button_contacts).setVisibility(View.GONE);
        }
        return root;
    }
}

 

3.主类

public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback {

    private static final String TAG = "MainActivity";

    /**
     * 用于标识请求联系人权限的Id
     */
    private static final int REQUEST_CONTACTS = 0;

    /**
     * 联系人读、写所需的权限
     */
    private static String[] PERMISSIONS_CONTACT = {
            Manifest.permission.READ_CONTACTS,
            Manifest.permission.WRITE_CONTACTS
    };

    /**
     * Activity的根布局
     */
    private View mLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mLayout = findViewById(R.id.content_fragment);

        if (savedInstanceState == null) {
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            RuntimePermissionsFragment fragment = new RuntimePermissionsFragment();
            transaction.replace(R.id.content_fragment, fragment);
            transaction.commit();
        }
    }

    /**
     * 当点击“显示联系人”按钮时调用
     * 回调在布局文件中定义
     */
    public void showContacts(View v) {
        Log.i(TAG, "Show contacts button pressed. Checking permissions.");

        // 验证是否已授予所需的联系人权限
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED
                || Act



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android M以上运行时权限(Google官方出品),androidgoogle
  • Android 应用程序集成Google 登录,androidgoogle

相关文章

  • 2018-01-28android 滑动冲突的处理
  • 2017-05-26使用Chrome远程调试GenyMotion上的WebView程序,genymotionwebview
  • 2017-05-26安卓开发之RecyclerView,安卓recyclerview
  • 2017-05-26Amazon Alexa登录授权(Android),amazonandroid
  • 2017-05-26独立开发者的个人经验之谈,独立开发者的
  • 2017-05-26nginx 1.12 stream 日志设置
  • 2017-05-26Android SDK在线更新镜像服务器,androidsdk
  • 2017-05-26【转载】ReactiveX 的理念和特点,转载reactivex理念
  • 2017-05-26Android开发:控件之WebView
  • 2017-05-26开源图表库MPAndroidChart使用介绍之饼状图&amp;折线图&amp;柱状图,图表mpandroidchart

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android_事件纷发
    • 安卓当下最流行的吸顶效果的实现(转),安卓当下
    • Android项目从Eclipse增加支持Android Studio
    • ListView 添加 HeaderView常见错误,listviewheaderview
    • android开发中fragment获取context,androidfragment
    • Accessibility辅助功能--一念天堂,一念地狱,一念天堂一念地狱
    • 散列表的数学分析(精解)--通过链表法解决碰撞,数学分析精解
    • 配置Nginx反向代理Exchange 2007上的OWA
    • 状态栏一体化及其带来的软键盘自适应问题
    • 二维码的扫描和生成--第三方开源--ZXing,--第三方开源--zxing

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有