今年的Android 13在运行时权限变更方面变化较大,为此PermissionX在1.7版本也进行了诸多适配,并已全面支持Android 13系统。...如果你想要非常详细地了解Android 13运行时权限具体有哪些变更,可以参考我之前写的这篇文章 Android 13运行时权限变更一览 。...而刚才我又说了,PermissionX为了简化开发者的适配工作,将Android 13以下的通知权限也一并处理了。因此,上述代码在所有的Android版本上都可以正常工作。...如果你之前并没有接触过PermissionX,可以通过我编写的《PermissionX权限系列专栏》逐步进行学习,里面有非常详尽的用法讲解。...如果想要学习Kotlin和最新的Android知识,可以参考我的新书 《第一行代码 第3版》,点击此处查看详情。
其实经过实践会发现,外部存储访问权限还是会和targetSdkVersion有关,具体可以看这篇Android11适配指南。...所以我们就可以得知崩溃的真正原因,就是当前线程不是ViewRootImpl创建时候的线程就会崩溃。...在运行。...这是我偶然发现的,在我的三星S9手机上,运行时不会崩溃的,而且界面给我的反馈并不是修改当前页面上Toast上的文字,而是像新建了一个Toast展示,即时代码中写的是setText方法。...当然这只是我的猜测,有研究过手机源码的大神也可以补充下。 总结 任何线程都可以更新UI,也都有更新UI导致崩溃的可能。
在下面的代码中,我们展示了一个实现的实例,一个使用uses-permission声明了INTERNET权限的应用,验证INTERNET权限是否在运行时在AndroidManifest.xml文件中描述。...由于 APK 的伪造不可避免地会产生签名(证书)的变化,因此可以通过比较 APK 中的证书,和源代码中嵌入的开发人员证书,在运行时检测 APK 是否被伪造。 以下是示例代码。...由“4.1.1.1 创建/使用私有活动”或“4.1.1.4 创建/使用私有活动”,我们可以使用类似于前者的保护措施,验证用户的同意,并设置目标应用的活动限制,以及其他。...因此,当一个应用在运行时请求android.permission.READ_CALENDAR并且用户同意该请求时,Android OS 的行为就像android.permission.READ_CALENDAR...修改后的规范的影响范围 应用在运行时需要权限请求的情况,仅限于终端运行 Android 6.0 或更高版本,并且应用的targetSDKVersion为 23 或更高的情况。
可以追踪应用程序在运行时所有已分配的内存,所有已创建的对象,对象的数量和他们所占用的内存大小以及这些对象是在哪些方法中创建的,用于检测内存抖动现象。...难道手机会自带检测内存泄露的工具吗?...对象的创建。...还有一个工具叫Heap Viewer,这个工具可以实时展示应用程序运行时所有已分配的对象的数量、大小以及类型信息,可以检测内存泄露。...在手机屏幕上点击StartActivityB,在Android Studio中点击Dump Java Heap,选择Package Tree View,找到我们的程序,可以看到MainActivity还没有被垃圾回收
Android提供了一个XML驱动的框架,用于为应用程序创建系统样式的Preferences Screen。...首先需要在xml文件中创建Preference Screen布局以供PreferenceActivity调用。与标准UI布局不同,首选项定义存储在res/xml资源文件夹中。...在运行时选择首选项文本将会显示一个输入对话框。 · ListTextPreference :该首选项是一个包含了可供选择的值的列表。可以定义不同的数组用于包含显示文本和选项值。 ...下面在res/xml下创建preference_activity.xml,在里面添加几个控件,代码如下:(注意:在创建时注意将Resource Type选为 Preference类型,file要小写)...PreferenceActivity的子类 类似于创建一个Activity,可以通过继承PreferenceActivity创建一个其子类,并通过addPreferencesFromResource
请注意,您只能窗口的每个垂直边缘的一个抽屉视图。如果您的布局在窗口的每个垂直边缘配置多个抽屉视图,则会在运行时抛出异常。...3DrawerLayout 的使用 一般使用 DrawerLayout 侧滑菜单,可以通过 Toolbar + DrawerLayout来实现。...在res/layout 中,新建一个toolbar.xml文件 <?xml version="1.0" encoding="utf-8"?...如果你喜欢我写的文章请关注 程序IT圈 ,欢迎大家继续关注本公众号的技术博文。...如果您觉得这篇文章对你有所帮助的话,不妨点个赞或给个赞赏哈,您的支持就是我坚持原创的动力~ 最后,如果你想写公众号和热爱编程的朋友们,我建立了个技术微信群,可以公众号回复 "加群" ,欢迎您进群学习哈~
Android6.0 增加运行时权限限制 如果你的应用使用到了危险权限,比如在运行时进行检查和请求权限。...Android 7.0 Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2 Toast导致的BadTokenException 在Android7.0系统上...--androidx版本类路径为:androidx.core.content.FileProvider--> 2)编写xml文件,确定可访问的目录 <paths xmlns:android="http...Android 8.0 之前,如果应用在运行时请求权限并且被授予该权限,系统会错误地将属于同一权限组并且在清单中注册的其他权限也一起授予应用。...如果需要关闭这个功能可以配置: android:requestLegacyExternalStorage="true" 分区存储下,访问文件的方法: 1)应用专属目录 //分区存储空间 val file
为了说明问题,我们创建两个完全相同的 layout,分别命名为 view_tips.xml 和 view_warning.xml,里面只是简单的包含一个 id 为 textView 的 TextView...那倒不至于,因为你始终记住合成属性在运行时会替换成 findViewById 就可以了,只要 findViewById 不出问题,那合成属性自然也不存在问题。...通过合理的设计 UI 相关的类,这个问题本身也可以很好的规避。 另外,如果语言本身支持把包名作为命名空间,在代码访问时直接予以限定,一样可以达到目的。...Beta 吗)的 Compose 了。...", Toast.LENGTH_SHORT).show() } } } 这个也就是我随手那么一写,肯定算不上完美,但至少说明 View Binding 的写法一样可以做到很简洁
既然谷歌已经提供了一个侧滑控件,我们又何必去用一个三方的SlidingMenu控件来实现相同的效果。于是,我决定自己手敲一个Demo来实现看看。 1、DrawerLayout效果图 ?...请注意,您只能窗口的每个垂直边缘的一个抽屉视图。如果您的布局在窗口的每个垂直边缘配置多个抽屉视图,则会在运行时抛出异常。...3、DrawerLayout 的使用 一般使用 DrawerLayout 侧滑菜单,可以通过 Toolbar + DrawerLayout来实现。...在res/layout 中,新建一个toolbar.xml文件 <?xml version="1.0" encoding="utf-8"?..." </android.support.v7.widget.Toolbar 在新建一个drawerlayout.xml布局 <?
Android6.0动态权限 简介 从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。...此方法可以简化应用安装过程,因为用户在安装或更新应用时不需要授予权限。它还让用户可以对应用的功能进行更多控制;例如,用户可以选择为相机应用提供相机访问权限,而不提供设备位置的访问权限。...用户可以随时进入应用的“Settings”屏幕调用权限。摘自Android官网:在运行时请求权限。...4、targetSDKVersion >= 23 & API(手机系统) >= 6.0 :安装时不会获得权限,可以在运行时向用户申请权限。...我自己测试了4个主流厂商的8款手机。 随着Android系统的不断更新,后续后问题会继续同步哒~!
等待的时间一时兴起,突然想写一篇原创,聊一聊我自己在写Android权限请求代码时的一些技术心得。 正如这篇文章标题所描述的一样,在Android中请求权限从来都不是一件简单的事情。为什么?...之前在公众号的留言区和大家讨论时,有朋友说:我觉得Android提供的运行时权限API很好用呀,并没有觉得哪里使用起来麻烦。 真的是这样吗?我们来看一个具体的例子。...Android提供的运行时权限API相信每个人都很熟悉了,我们自然而然可以写出如下代码: class MainActivity : AppCompatActivity() { override...如果用户同意了这两个权限,那么我们就可以去进行拍照了,如果用户拒绝了任意一个权限,那么弹出一个Toast提示,告诉用户某项权限被拒绝了,从而无法进行拍照。 这种写法麻烦吗?...那么现在运行一下程序,效果如下图所示: ? 可以看到,当我们第一次拒绝权限的时候,会提醒用户,相机和定位权限是必须的。
Spinner支持的常用XML属性及相关方法如下表所示。...: dialog:对话框风格的窗口 dropdown:下拉菜单风格的窗口 如果开发者使用Spinner时己经可以确定列表选择框里的列表项,则完全不需要编写代码,只要为Spinner指定android...:entries属性即可让Spinner正常工作;如果程序需要在运行时动态 地决定Spinner的列表项,或者程序需要对Spinner的列表项进行定制,则可使用Adapter为 Spinner提供列表项...继续使用WidgetSample工程的listviewsample模块,在app/main/res/layout/目录下创建spinner_layout.xml文件,在其中填充如下代码片段: <?...修改程序启动的Activity,运行程序,可以看到下图所示界面效果。 ? 点击第一个Spinner ,弹出选择对话框,如下图所示。
首先,选择工具(Tools)菜单下的Android子菜单,点击AVD Manager选项;然后,点击创建模拟器按钮(Create Virtual Device),打开创建窗口,选择Phone(也可以创建其他类型的移动设备...除了通过日志工具查看各种信息以外,在Android中,还提供了另外一种运行时查看信息的方式——Toast。在程序中通过编写Toast代码,可以在Android应用的运行界面上弹出一个提示窗来显示信息。...提示信息通常只显示一段时间,然后消失,它不会影响程序的运行。使用Toast时,首先通过调用Toast类的makeText()函数创建一个Toast对象,然后调用show()函数将信息显示在界面上。...如果是属于这张表中的权限,那么就需要编写代码,在运行时申请权限;如果申请权限不在这张表中,那么只需要在AndroidManifest.xml文件中添加权限声明就可以了。...ContentProvider是Android系统提供的一种标准的共享数据的机制,应用程序可以通过ContentProvider访问其他 应用程序的私有数据。
xml version="1.0" encoding="utf-8"?...删除这些广播可以显著提升设备性能和用户体验。...在前台运行的应用如果使用 BroadcastReceiver 请求接收通知,则仍可以在主线程中侦听 CONNECTIVITY_CHANGE。...Android文档中描述,通过在AndroidManifest.xml中注册方式,App在前后台都无法接收到广播。而通过register的方式,当App在运行时,是可以接收到广播的。...(getBaseContext(), "onLinkPropertiesChanged", Toast.LENGTH_SHORT).show(); } } } 以上就是本文的全部内容,希望对大家的学习有所帮助
首先最简单的两个动画,写在了XML里面,当然也可以写到java中, 第一个in_animation.xml,第二个out_animation.xml, 第一步:Android里面已经有了TextSwitcher...这个类,我们继承这个类,实现ViewSwitcher.ViewFactory提供的创建TextView的方法即可; 第二步:为了实现轮播,当然是每隔一个时间段就播放一次的效果,我们可以使用Timer定时器.../p/83e816600667 8.自定义美观的SeekBar SeekBar有两个属性progressDrawable和thumb,可以用来定义进度条和滑动块的样式,可自定义.xml文件来达到自己想要的美观效果...(Main.this, "我很喜欢他的电影。"...(Main.this, "我不喜欢他的电影。"
于是,我在第二个版本将PermissionX使用Java进行了重写,以保证不管是Java还是Kotlin的Android工程都可以使用它。...> 运行一下,效果如下图所示: 支持Android 12蓝牙权限 Android 12在运行时权限方面又有了一些新的变化。...不过要注意,刚才说过了,新增的3个蓝牙权限都是运行时权限,因此只在AndroidManifest.xml中声明是没有用的,还要在代码中申请权限才行,这也是PermissionX 1.6版本主要适配的地方...,可以访问PermissionX的项目主页: https://github.com/guolindev/PermissionX 另外,本篇文章主要介绍的是PermissionX 1.6.0版本的新特性。...如果想要学习Kotlin和最新的Android知识,可以参考我的新书 《第一行代码 第3版》,点击此处查看详情。
Android权限 Android安全架构规定:默认情况下,任何应用都没有权限执行对其他应用、操作系统或用户有不利影响的任何操作。...如果是一些正常的权限(非高危权限),比如网络访问等在应用清单文件(AndroidManifest.xml)中配置,系统会自动授予, 但是如果有一些高危权限,位置,文件存储,短信等这个时候系统会要求用户授予权限...,则应用将在运行时向用户请求权限(Runtime Permissions)。...用户可随时撤销权限,因此应用每次运行时都应该检查自身是否具备所需的权限。...,这里我写了四个) 权限监听接口对象 //创建监听权限的接口对象 PermissionsUtils.IPermissionsResult permissionsResult = new PermissionsUtils.IPermissionsResult
只需要实现下面2段代码即可实现对网络连接状态的监听,千万别忘了在Manifest.xml里面添加网络访问权限哦。...; import android.util.Log; import android.widget.Toast; /** * @项目名: ZhiHUIGuangDong * @包名: huaxa.it.zhihuiguangdong...* @类名: NetState * @创建者: 黄夏莲 * @创建时间: 2016年10月22日 ,上午1:10:16 * * @描述: TODO */ public class NetState...Intent可以传递数据实现自定义广播事件,然后通过sendBroadcast(intent)发送出去。通过onReceive()方法处理接收的这个的数据。...");//key-Value sendBroadcast(intent); 注意:如果在onReceive()方法中的代码执行时间超过5s的话,Android会ANR。
从我对这个项目的更新频率上大家应该就可以看出,这并不是我随便写着玩的一个项目,而是真的准备长期维护下去的开源项目。大家在使用过程中如果发现了什么问题,也都可以反馈给我。...如果你对PermissionX的用法还完全没有了解,可以先去参考之前我发布的两篇文章 Android运行时权限终极方案,用PermissionX吧 和 PermissionX现在支持Java了!...这个问题说实话,一下子把我问懵了,好像我之前确实没考虑过这个问题。 不过后来我反应过来之后想到,在Fragment中不是也可以获取到Activity的实例吗?...根据我之前的统计,Android 10系统中的运行时权限有30个,而权限组只有11个。...现在运行一下程序,你将会体验到非常棒的权限请求流程,如下图所示。 ? 当然,这还只是我实现的一个比较基础的自定义权限提醒对话框,现在充分发挥你的UI实力的时候到了。
代理模式 代理模式主要是为了给某些不想直接访问或者访问起来有些困难的对象提供一个代理对象来简洁的访问,分为静态代理和动态代理。...calss编译文件,动态代理则是在代码运行时通过反射来动态的生成代理类的对象,并确定要代理谁。...,也就是这里AMS还没有校验要跳转的Activity是否在Manifest.xml里注册,我们可以在这里实现把B Activity替换成C的过程。...然后会在ActivityThread中的performLaunchActivity方法里调用mInstrumentation的newActivity方法用类加载器创建Activity的实例,我们可以在这里把它替换成我们要跳转的...这个crash我在跑demo的时候的时候使用让ui线程休眠的方式在Android 7.1.1的虚拟机上没有复现出来,朋友们可以参考腾讯这篇文章Toast问题深度剖析(一),有复现出来的朋友欢迎评论区一起交流
领取专属 10元无门槛券
手把手带您无忧上云