- 浏览: 5819180 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
简介
Android6.0中对权限分为了一般权限和危险权限。
一般权限:只要在清单文件中注册即可使用。
危险权限:除了要在清单文件中注册外,还要对用户进行请求权限弹窗提醒,才可以使用。
危险权限
关于日历的权限:
关于相机的权限:
关于联系人的权限:
关于位置的权限:
关于电话的权限:
关于传感器的权限:
关于短信的权限:
关于SD卡的权限
清单文件加上权限
Android6.0中对权限分为了一般权限和危险权限。
一般权限:只要在清单文件中注册即可使用。
危险权限:除了要在清单文件中注册外,还要对用户进行请求权限弹窗提醒,才可以使用。
危险权限
关于日历的权限:
<uses-permission android:name="android.permission.READ_CALENDAR"/> <uses-permission android:name="android.permission.WRITE_CALENDAR"/>
关于相机的权限:
<uses-permission android:name="android.permission.CAMERA"/>
关于联系人的权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.WRITE_CONTACTS"/> <uses-permission android:name="android.permission.GET_CONTACTS"/>
关于位置的权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
关于电话的权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.READ_CALL_LOG"/> <uses-permission android:name="android.permission.WRITE_CALL_LOG"/> <uses-permission android:name="android.permission.USE_SIP"/> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
关于传感器的权限:
<uses-permission android:name="android.permission.BODY_SENSORS"/>
关于短信的权限:
<uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name="android.permission.RECEIVE_WAP_PUSH"/> <uses-permission android:name="android.permission.RECEIVE_MMS"/> <uses-permission android:name="android.permission.READ_CELL_BROADCASTS"/>
关于SD卡的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; 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.util.Log; import java.util.ArrayList; import java.util.List; /** * Created by zhoujian on 2017/3/5. */ public class BasePermissionsActivity extends Activity { public static final String TAG = "BasePermissionsActivity"; public static int REQUEST_CODE = 0; public void requestPermission(String[] permissions,int requestCode) { this.REQUEST_CODE = requestCode; //检查权限是否授权 if(checkPermissions(permissions)) { permissinSucceed(REQUEST_CODE); } else { List<String> needPermissions = getPermissions(permissions); ActivityCompat.requestPermissions(this, needPermissions.toArray(new String[needPermissions.size()]), REQUEST_CODE); } } private List<String> getPermissions(String[] permissions) { List<String> permissionList = new ArrayList<>(); for (String permission : permissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED || ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) { permissionList.add(permission); } } return permissionList; } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_CODE) { if (verificationPermissions(grantResults)) { permissinSucceed(REQUEST_CODE); } else { permissionFailing(REQUEST_CODE); showFaiingDialog(); } } } private boolean verificationPermissions(int[] results) { for (int result : results) { if (result != PackageManager.PERMISSION_GRANTED) { return false; } } return true; } /** * 检测所有的权限是否都已授权 * * @param permissions * @return */ private boolean checkPermissions(String[] permissions) { if(Build.VERSION.SDK_INT<Build.VERSION_CODES.M) { return true; } for(String permission:permissions) { if(ContextCompat.checkSelfPermission(BasePermissionsActivity.this,permission)!= PackageManager.PERMISSION_GRANTED) { return false; } } return true; } private void showFaiingDialog() { new AlertDialog.Builder(this) .setTitle("消息") .setMessage("当前应用无此权限,该功能暂时无法使用。如若需要,请单击确定按钮进行权限授权!") .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { return; } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startSettings(); } }).show(); } private void startSettings() { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + getPackageName())); startActivity(intent); } public void permissionFailing(int code) { Log.d(TAG, "获取权限失败=" + code); } public void permissinSucceed(int code) { Log.d(TAG, "获取权限成功=" + code); } }
import android.Manifest; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.widget.Button; public class MainActivity extends BasePermissionsActivity { private Intent intent; private Button mTake_phone; private Button mTake_photo; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); clickEvents(); } private void initViews() { mTake_phone = (Button)findViewById(R.id.take_phone); mTake_photo = (Button)findViewById(R.id.take_photo); } private void clickEvents() { mTake_phone.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { requestPermission(new String[]{Manifest.permission.CALL_PHONE},1); } }); mTake_photo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { requestPermission(new String[]{Manifest.permission.CAMERA},2); } }); } /** * 权限成功回调函数 * * @param requestCode */ @Override public void permissinSucceed(int requestCode) { super.permissinSucceed(requestCode); switch (requestCode) { case 1: intent= new Intent(Intent.ACTION_CALL, Uri.parse("tel:15855759639")); startActivity(intent); break; case 2: intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivity(intent); break; } } @Override public void permissionFailing(int code) { super.permissionFailing(code); } }
清单文件加上权限
<uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.CAMERA"/>
发表评论
-
某些android手机获取不到IMEI问题
2018-08-21 14:17 7630某些山寨机可能拿不到IMEI 如果非要IMEI可以模拟一个 ... -
APK安装成功后点击"打开"再按Home键应用会重启的问题
2018-08-21 14:13 2767安装系统SD卡里面的apk或者原有的程序更新版本的时候, ... -
使用volley链接Https地址时报SSLHandshakeException
2018-08-21 14:06 2131在真实设备上出现以下错误 ︰ Volley error: ... -
PhotoView+Viewpager双指缩放的时候出现pointerIndex out of range问题
2017-07-10 14:30 4244PhotoView+Viewpager开发图集效果的时候,在某 ... -
实现点击 WebView 中的图片,调用原生控件展示图片
2017-04-01 11:14 2809现在有很多时候,我们的 App 都进行了混合开发,而最简单,最 ... -
Android 方法引用数超过 65535 优雅解决
2017-03-31 09:37 1541随着应用不断迭代更新,业务线的扩展,应用越来越大(比如:集成了 ... -
android引用资源@与属性?备忘单
2017-03-30 10:09 1287几天前我偶然发现了我A ... -
ViewPager 与SwipeRefreshLayout,RecyclerView,ScrollView滑动冲突解决方法
2017-03-30 09:55 6564ViewPager 作为一个横向滚动的控件, 在 ViewGr ... -
Android中一些你可能没注意的小效果实现
2017-02-15 21:09 0http://www.see-source.com/blog/ ... -
Android热修复:Andfix和Hotfix,两种方案的比较与实现
2017-02-15 21:00 0http://www.see-source.com/blog/ ... -
Android 从网页中跳转到本地App
2017-01-11 09:27 1880我们在使用微信、QQ、京东等app的时候,会发现有时候通过他们 ... -
Activity的启动模式和onNewIntent
2016-12-28 09:10 1333一、启动模式介绍 启 ... -
android5.0使用Notification报RemoteServiceException的解决办法
2016-08-31 16:13 11545有时android5.0下使用Notification会报如下 ... -
RecyclerView 中的 item 如何居中问题
2016-05-18 09:52 12535一个很简单的Item布局,我只要让它由上而下排列,文字居中 ... -
sqlite3:not found 解决方法
2015-12-08 16:03 2554最最最重要,先root你的手机吧 sqlite3 为一个可 ... -
隐藏底部虚拟键NavigationBar实现全屏
2015-10-08 17:20 9852import android.app.Activity; ... -
服务端执行慢或网络延迟时,Volley多次发送请求的问题
2015-07-27 15:40 6996原文: Android Volley double post ... -
如何获取 Android 设备的CPU核数、时钟频率以及内存大小
2015-06-30 17:04 4380原帖: http://www.jianshu.com/p/f7 ... -
android点滴5
2015-04-10 17:32 2048一些小效果的实现 http://www.see-source. ... -
SwipeRefreshLayout和ListView的EmptyView共存冲突的问题
2015-01-20 11:47 18645SwipeRefreshLayout是android官方的下拉 ...
相关推荐
以下是对"Android6.0权限工具类"的详细解释和相关知识点。 1. **运行时权限**:在Android 6.0之前,应用在安装时会自动获得清单文件中声明的所有权限。但在6.0之后,针对如读取联系人、访问位置等敏感权限,应用...
以下是一个简单的权限封装示例: ```java public class PermissionUtil { public static void requestPermission(Activity activity, String[] permissions, int requestCode) { if (Build.VERSION.SDK_INT >= ...
在`Android6.0 权限处理.md`文件中,详细记录了这个Demo的实现步骤和代码示例,包括如何初始化RxPermissions,何时何地请求权限,以及如何处理权限结果。而`PermissionHandler`可能是示例代码中的一个关键类,负责...
本文将深入探讨Android 6.0的运行时权限管理,并详细介绍如何通过一句代码实现权限封装,以及添加同意和拒绝授权时的监听回调。 一、Android 6.0运行时权限机制 在Android 6.0之前,用户在安装应用时会一次性授予...
本“android6.0权限管理封装demo”就是针对这一功能的一个示例项目,旨在帮助开发者更好地理解和实施这一新机制。 首先,我们来了解一下Android 6.0权限管理的核心概念。在Android 6.0之前,如果一个应用在安装时...
在Android 6.0(API级别23)之后,系统引入了运行时权限管理机制,对应用程序的权限控制进行了重大改革。之前版本的Android,应用在安装时会一次性请求所有所需的权限,但在Android 6.0及更高版本,用户可以在应用...
`PermissionGen`是Android社区中一个开源的解决方案,它帮助开发者更方便地进行运行时权限的处理和封装。这个项目旨在简化代码,使开发者能够以更优雅的方式处理权限请求,而不是直接使用Android SDK中的`...
"Android6.0运行时权限框架封装"是指一种开发策略,它帮助开发者更方便地处理这些新的权限请求。通过封装,开发者可以创建一个通用的库或者模块,简化代码,使得在不同地方请求权限时,只需调用统一的接口即可。这样...
在Android 6.0(API级别23)及以上版本,系统引入了运行时权限的概念,对用户隐私保护有了更严格的管理。这一变化被称为“动态权限处理”,与之前的静态权限申请方式有着显著的区别。在此,我们将深入探讨这个话题,...
本文将详细介绍如何封装Android 6.0后的危险权限获取方法,以确保应用在各种容器环境下正常工作,并在用户拒绝权限后提供合适的提示,同时保持对6.0以下版本的兼容性。 首先,我们需要了解Android 6.0引入的危险...
本文将深入探讨如何封装一个Android 6.0运行时权限的处理机制,以解决用户选择“不再提示”后无法获取权限的问题。 首先,我们需要理解Android 6.0的权限模型。系统现在分为两种权限类型:正常权限(Normal ...
Android进阶封装之“史无前例"一个类实现兼容Android 6.0权限、适配Android7.0 拍照:http://blog.csdn.net/xh870189248/article/details/77389855
封装了6.0以后获取权限时的繁琐工作,只需要在需要执行的方法添加注解即可方便的获取权限。
在Android 6.0(API级别23)及以上版本,系统引入了运行时权限模型,对应用程序的权限管理进行了重大改革。之前,用户在安装应用时一次性授予所有权限,但在Android 6.0中,部分敏感权限需要在运行时由用户动态授权...
这个“带Android 6.0权限的图片选择器”正是针对这一变化而设计的解决方案。 在Android 6.0之前,应用程序在安装时会一次性获取所有所需权限。然而,为了提高用户对应用权限的控制,Android 6.0引入了运行时权限...
在Android 6.0(API级别23)及以上版本,权限管理系统发生了重大变化,引入了运行时权限的概念。在此之前,应用程序在安装时一次性获取所有声明的权限,而在Android 6.0之后,对于某些敏感权限,如访问联系人、...
这篇博客“Android 6.0运行时权限处理与封装(一)”深入探讨了这个重要的话题,下面将详细阐述相关知识点。 一、运行时权限简介 在Android 6.0之前,应用在安装时会一次性获取所有所需权限,而运行时权限模式改变...
这个压缩包文件包含了与Android 6.0权限管理和封装相关的资源,包括`android6.0权限使用PermissionGen依赖库.7z`和`android6.0permission封装`,这将帮助我们深入理解如何在Android 6.0及更高版本中高效地处理权限。...
PermissionManager是一个对android6.0运行时申请权限的操作的封装,将重复调用的多个方法组合封装在一起,方便调用,简化代码和逻辑。PermissionManager的使用比较简单。
本文将详细探讨Android 6.0运行时权限的封装及其应用。 首先,理解运行时权限的重要性。在之前的Android版本中,用户在安装应用时会被询问是否接受应用的所有权限,一旦接受,应用在整个生命周期内都可以访问这些...