插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用..." Upload " , 再弹出的对话框中 , 选择编译生成的 apk 安装包 , 上传到该目录中 ; 上传完成 ; 三、第二次运行 " 宿主 " 模块 ---- 第一次运行 " 宿主 " 模块...com.example.plugin_core.PluginManager; import com.example.plugin_core.ProxyActivity; import pub.devrel.easypermissions.EasyPermissions...().getmPackageInfo().activities; // 获取的插件包中的 Activity 不为空 , 才进行界面跳转 if (activityInfos.length...classes.dex 文件中的字节码对象 */ private DexClassLoader mDexClassLoader; /** * 从插件包 apk 中加载的资源
在进行Android应用开发过程中,有时候会遇到获取当前Android设备所使用的网络IP地址的场景,有时候需要本地的网络IP地址,即局域网地址,更多的时候是需要当前网络的真实的对外IP地址,即真实的网络地址...= null) { @SuppressLint("MissingPermission") WifiInfo wifiInfo = wifiManager.getConnectionInfo(...获取外网地址的原理:通过访问外网网站,从网站返回的数据中解析本地的IP地址。PS:在本地是无法获取到外网的IP地址的,需要借助服务器。...Log.e(TAG, "获取IP地址时出现异常,异常信息是:" + e.toString()); } return ipAddress; } 根据网络类型集成方法 @SuppressLint...("MissingPermission") public static String getIpAddress(Context context) { if (context == null)
/training/permissions/requesting.html 2 为什么使用Easypermissions Android M对权限系统进行了改变。...Android M之前所需权限只需要在AndroidManifest中申请即可。但更新Android M系统后,部分“Dangerous Permission”需要在运行时询问申请。...使用EasyPermissions检查权限: 权限可以是单个,也可以是一些列。在EasyPermission库中,使用EasyPermissions#hasPermissions(…)检查若干权限。...简化了请求成功操作流程,不需要在EasyPermissions.onRequestPermissionsResult()的回调监听器中请求成功的方法中,再次手动调用,获取权限后需要操作的逻辑代码。...使用EasyPermissions处理权限被拒的情况: 在权限弹窗中,用户可能直接拒绝权限,下次权限请求依旧会弹出该权限弹窗。
在 Android 中获取网络类型时,我们通常先使用 ConnectivityManager.getActiveNetworkInfo() 判断是不是 Wifi , 再通过 TelephonyManager.getNetworkType...但是,这两个函数分别在 API23(Android M)和 API24(Android N)中已经被标记为 @Deprecated。...那么,在更高版本的 Android 系统中,我们该如何判断 Wifi 和 具体的移动网络类型呢? 1....capabilities = connectManager.getNetworkCapabilities(network); 通过hasCapability() 中可以获取某个网络属性的状态,下面代码判断网络是否已经连接...NetworkCapabilities.NET_CAPABILITY_INTERNET); Log.d(TAG, "是否已经连接到网络:" + hasCapability); return hasCapability; } 当网络已经连接上了,那么我么再通过
你不了解里面的知识内容,自然就不知道是怎么回事,重复的问题我回答了好多次了。...针对这个情况,我决定做了系列性的Ble蓝牙App,尽可能的避免在你运行的时候出现bug,所以这是一个低功耗蓝牙工具App,可以让你了解到一些东西。...至于为什么使用Kotlin,稳固一下,不然太久不用就会生疏,文本我们讲述的是扫描,你可能回想,一个扫描有什么好写,不就是开始、结束、显示设备嘛?至于单独作为一个功能来写一篇文章嘛?...,在Kotlin中如果要对ViewBinding进行封装的话同时利用上Kotlin的一些特性的话,可以这样做,原文地址如下:Viewbinding使用和委托封装,感觉写得蛮好的,太久没用Kotlin了,...") } 这里使用了Activity Result API,需要注意的是它们是与onCreate()函数平级的,下面修改onClick()函数中的代码: override fun
: 如果要在 @AfterPermissionGranted() 注解中使用常量 , 该常量只能使用 const val 定义 ; 定义方式 : const val 常量才是 Java 中的 public...文件中, 或 object 对象表达式中, 不能定义在类中 */ const val PERMISSION_REQUEST_CODE : Int = 100; 数组转为可变参数 : Kotlin 中可以使用...申请权限原理对话框 , 在这个对话框中 , 开发者需要给出为什么申请这些权限 , 说服用户同意这些权限的申请 ; 申请权限原理对话框 中的内容是在 EasyPermissions.requestPermissions...方法的参数中设定的 ; 回调函数 : 在 Activity 中实现 EasyPermissions.RationaleCallbacks 接口 , 在本 Activity 中调用 EasyPermissions.requestPermissions...AndroidManifest.xml 中配置权限 , 否则无法使用 ; <?
文章目录 一、添加依赖 二、在 AndroidManifest.xml 中配置权限 三、权限申请最简单用法 四、推荐使用的用法 五、GitHub 地址 上一篇博客 【Android 应用开发】Google...: dependencies { // 使用 Android X 的应用添加该依赖 implementation 'pub.devrel:easypermissions:3.0.0'...} 注意 使用不同的支持库 , 需要配置不同的 EasyPermissions 依赖库 ; 使用 Android X : 需要添加 3.0.0 版本的依赖 ; 使用 Android Support Library...支持库 : 需要添加 2.0.1 版本的依赖 ; 二、在 AndroidManifest.xml 中配置权限 ---- 一定不要忘记在 AndroidManifest.xml 中配置权限 , 否则无法使用... 三、权限申请最简单用法 ---- 只需要在需要权限的时候调用
之前 Android6.0之前,应用权限仅需在代码里AndroidManifest.xml中声明便可以获得,不需要征求用户的同意。...正常权限在AndroidManifest.xml中声明即可获得,危险权限则需要在使用前向用户申请,征得用户的同意后才可以使用。若没有向用户申请就执行操作,应用直接报错闪退。 危险权限和权限组: ?...googlesamples中提供的方法,使用EasyPermissions.requestPermissions申请权限,同时也需要在Activity的onRequestPermissionsResult...整体思路 绝大多数开源库在申请权限的时候要在Activity中onRequestPermissionsResult注册回调,这一点我是很反感的,代码侵入性太大了。...假如我封装了一个获取定位的接口,这是一个独立的方法,一般来说会写在LocationUtils.java中,而且任何人任何类类都可能调用我的方法,这就导致LocationUtils是没有Activity去接收
使用 EasyPermissions 非常简单,在MainActivity中添加代码如下: ......首先我们看一下如何引入 WebRTC 库(我这里使用的是最新 Android Studio 3.3.2)。...而在 Android/iOS 开发中,我们使用的 WebRTC 中的大部分对象基本上都是通过 PeerConnectionFactory 创建出来的。...WebRTC 在建立连接时使用 ICE 架构,一些参数需要在创建 PeerConnection 时设置进去。...小结 本文首先介绍了在 Android 中使用 WebRTC 要需申请的权限,以及如何引入 WebRTC 库。
##一、权限等级和权限组介绍 权限主要分为 normal 、dangerous、signature 和 signatureOrSystem四个等级,一般情况下,我们只需要了解前两种权限的使用就可以了,后面的是属于系统级签名的权限...##二、普通权限和危险权限 普通权限只需要在AndroidMenifest.xml文件中申请即可,危险权限需要到代码中进行动态申请一般是成对成组地去申请,所以叫权限组 普通权限对应表: Name Permission...RECEIVE_WAP_PUSH RECEIVE_MMS STORAGE READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE 下面简单介绍一下EasyPermission的简单使用...,更多详细使用请参考:https://github.com/googlesamples/easypermissions ##1.添加依赖库 compile 'pub.devrel:easypermissions...: https://github.com/googlesamples/easypermissions ##另外再推荐几个不错的处理动态权限的开源库: 前面的star基本都是几k,后面的都是几百的star
我个人平时日常使用最多的定位软件就是高德地图。所以这篇文章,就带你来初步了解使用。 正文 在此之前呢,默认都没有账号,因此需要先注册一个账号账号才行,点击高德开放平台进入主页面。...[iwl1e85u26.png] 这里我存放在D盘下的APK文件夹中,然后设置jks的名字为GaodeMapDemo,然后点击OK。...刚才在AndroidManifest.xml配置了比较多的权限,而在实际的使用过程中,Android6.0之后有一些权限是需要用户动态申请的,比如定位、获取手机状态、文件读写之类的。...pub.devrel:easypermissions:3.0.0' 如下图所示 [8jhri0es4p.png] 然后点击AS右上角的Sync进行同步,同步完成之后,你就可以使用了。...EasyPermissions.onRequestPermissionsResult设置,设置之后会重新调用requestPermission()方法,为什么呢?
“工欲善其事,必先利其器”,首先准备好开发软件,因为我们使用的是Android版的SDK所以开发软件我们使用Android Studio,本人使用的是Android Studio Fox版,版本之间感觉都一样没有什么开发上的区别...准备好工具之后,先去大疆无人机的开发者官网注册一个开发者账号,并且注册好自己的应用,拿到sdk的专用Key值,申请的方法大疆官网有我就不赘述了。给大家个地址【大疆开发者官网】自己看吧,挺简单的。...--> <meta-data android:name="com.dji.sdk.API_KEY" android:value="" /> Android Studio项目集成 本节中的屏幕截图是使用...注意:由于某些SDK类现在需要在使用之前进行加载,因此加载过程由Helper.install()完成。开发人员需要在使用任何SDK功能之前调用此方法, 否则可能会导致意外崩溃。...修改完成后需要在AndroidManifest中 配置 Application name。 双击app模块中的MainActivity.java。
我们可以直接使用 Android SDK 中的蓝牙 BLE 库,而不用额外导入依赖库。 以前开发蓝牙通讯,还需要实现蓝牙配对。...Phone 通过 Gatt 服务功能获取 Device 中的消息,并发送消息给 Device 设备。 整个过程就是这样的。下面我也将按照这个通讯过程进行介绍。...3.开发 基于我的使用情况,从无到有的介绍,完整的蓝牙开发配置过程。给大家一个参考 语言主要为 Java 3.1 权限 要在应用中使用蓝牙功能,必须声明 BLUETOOTH 蓝牙权限。...我们如果使用bluetoothAdapter.enable();时Android Studio出现代码错误警告,可以在该代码使用的方法中添加:@SuppressLint("MissingPermission...3.7 注册消息监听-setCharacteristicNotification @SuppressLint("MissingPermission") private void prepareBroadcastDataNotify
一、创建项目 首先创建项目,这里我使用的Android Studio版本为Android Studio Electric Eel | 2022.1.1,创建一个名为Android13Wifi的项目。...根据Wifi的加密与否,分为两种:加密与开放,每一种有五个图标来分别表示不同的信号强度,这里我做了两个level-list,是wifi_level.xml和wifi_lock_level.xml,在代码中可以通过信号强度得到不同的...()就会返回false,而在Android 13以下就只请求定位权限即可,这里还需要给MainActivity添加一个@SuppressLint("MissingPermission")注解,如下图所示...: 这样在api 33中使用wifi相关的api时就不会提示错误了,不过你得注意一点,就是你在使用之前确保权限已经获取到,否则会报错闪退。...配置 * @param SSID * @return */ @SuppressLint("MissingPermission") private WifiConfiguration
} EasyPermissions就是刚才在build.gradle中添加的依赖库,然后写一个权限请求的方法。...然后是一个判断,通过这框架去判断当前的权限是否以获取,是则进行后续操作,我这里是弹一个Toast,方法也很简单。...//图片 private ImageView ivPicture; 然后在onCreate中绑定xml的id。下面你再使用这个ivPicture就不会报空对象了。...我在荣耀8和荣耀20i上运行都是这样的,对应的版本是8.0和10.0,效果基本一致。那么下面修改一下参数试试看,如下图我修改了宽高比例和剪裁后的宽高。 ? 再运行一下: ?...但是有一些朋友想要圆形的剪裁,那么这里有一个问题你要弄清楚,你要真的还是假的,真的圆形,那么肯定是需要剪裁后重新生成的,而假的圆形就很好办了,首先我们改回刚才的参数,那么在我的是手机上就还是这样的圆形剪裁框
} EasyPermissions就是刚才在build.gradle中添加的依赖库,然后写一个权限请求的方法。...然后是一个判断,通过这框架去判断当前的权限是否以获取,是则进行后续操作,我这里是弹一个Toast,方法也很简单。...//图片 private ImageView ivPicture; 然后在onCreate中绑定xml的id。下面你再使用这个ivPicture就不会报空对象了。...我在荣耀8和荣耀20i上运行都是这样的,对应的版本是8.0和10.0,效果基本一致。那么下面修改一下参数试试看,如下图我修改了宽高比例和剪裁后的宽高。...但是有一些朋友想要圆形的剪裁,那么这里有一个问题你要弄清楚,你要真的还是假的,真的圆形,那么肯定是需要剪裁后重新生成的,而假的圆形就很好办了,首先我们改回刚才的参数,那么在我的是手机上就还是这样的圆形剪裁框
(Normal Permissions) 普通权限不会对用户的隐私和安全产生太大的风险,所以只需要在AndroidManifest.xml中声明即可....便于记忆:涉及隐私的就是危险权限 Android系统将这些危险权限分为9组,获取分组中某个权限的同时也就获取了同组中的其他权限。...危险权限不仅需要在AndroidManifest.xml中注册,还需要动态的申请权限。 下图为某信申请的权限( 九组权限,申请了八组,除了日历... ) ?...Google提供了一个非常好的思路,详见EasyPermissions ....拜读了EasyPermissions后,我做了一些微小的工作,简单的封装可以减少很多样板代码。
hi,又到了我们具体开发时候遇到的项目需求讨论了。 在具体项目开发中,关于Android的动态申请权限的功能,我想大家都见怪不怪了。很多人开发的app中也都使用过这块需求。...PS:本文我写的比较啰嗦,特别是对RxPermission和easyPermission的源码分析,因为我写的比较细(又或者是啰嗦及累赘),所以造成篇幅会很大。可能很多人都不会有耐心看完。...当然还有其他的携带Uri的permission检查,不过我没有试验过,用过的小伙伴留个言,看是在什么情况下使用及怎么使用。...这个库是谷歌推出的,所以我也使用过这个。怎么使用这个库我就不多说了。我们直接来看相关的源码分析。 我们直接看他官方给的Demo: 1....如果直接这个申请的权限是询问状态,新建一个Observable,并且会根据申请权限的name为key保存到mRxPermissionsFragment中的HashMap中,为什么要存进去呢,因为这时候要
前言 之间我写过蓝牙开发的文章,只不过是针对于经典蓝牙,可以理解为普通蓝牙,连接的对象是经典蓝牙,列如手机蓝牙、蓝牙耳机等设备。...而也有读者说在学习低功耗蓝牙,因此就有了这篇文章,一方面是为了丰富蓝牙的使用,一方面也是为了帮助看我文章的读者,我会讲的很细,很多人也说我在记流水账,不过这不重要,重要的是你从流水账里学到了什么。...而在Android6.0以后则有了动态权限的申请,这里就说明一下等下为是什么要请求定位权限,后面就不要问我为什么扫描一个蓝牙还要打开定位权限这样的问题了。...下面只要在checkAndroidVersion中调用这个requestPermission()方法和openBluetooth()方法即可,如下图所示: ?...地址去连接这个设备,然后在连接设备的回调中处理连接设备的结果。
Q1 为什么要用LiveEventBus?...范围全覆盖的消息总线解决方案 进程内消息发送 App内,跨进程消息发送 App之间的消息发送 更多特性支持 免配置直接使用,懒人最爱 支持Sticky粘性消息 支持AndroidX 支持延迟发送...在Android中由于module间不可以双向依赖,所以如果你想调用某个没有依赖关系的组件的服务往往是做到的,而组件间通信正好可以解决这样的问题。组件间通信在组件化和插件化中扮演了重要角色。...其实现成的框架里面App做为宿主,很多都已经写好了组件间的通讯,不过对我来说有点太重了,所以就考虑用LiveEventBus消息做个简单的处理,毕竟组件间的通信并不是常态,废话不再多说,正篇开始。...App中没有Activity,只是创建了一个App继承自Application,就是用来做LiveEventBus的初始化工作,还有监听事件。
领取专属 10元无门槛券
手把手带您无忧上云