首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 )

插件化框架 ( 原理与实现思路 ) 【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 中加载资源

50420

Android开发获取手机内网IP地址与外网IP地址详细方法与源码实例

在进行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)

16.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

Android EasyPermissions官方库高效处理权限相关教程

/training/permissions/requesting.html 2 为什么使用Easypermissions Android M对权限系统进行了改变。...Android M之前所需权限只需要在AndroidManifest申请即可。但更新Android M系统后,部分“Dangerous Permission”需要在运行时询问申请。...使用EasyPermissions检查权限: 权限可以是单个,也可以是一些列。在EasyPermission库使用EasyPermissions#hasPermissions(…)检查若干权限。...简化了请求成功操作流程,不需要在EasyPermissions.onRequestPermissionsResult()回调监听器请求成功方法,再次手动调用,获取权限后需要操作逻辑代码。...使用EasyPermissions处理权限被拒情况: 在权限弹窗,用户可能直接拒绝权限,下次权限请求依旧会弹出该权限弹窗。

1.7K10

Android | 网络类型判断工具类

在 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; } 当网络已经连接上了,那么么再通过

4.2K20

Android Ble蓝牙App(一)扫描

你不了解里面的知识内容,自然就不知道是怎么回事,重复问题回答了好多次了。...针对这个情况,决定做了系列性Ble蓝牙App,尽可能避免在你运行时候出现bug,所以这是一个低功耗蓝牙工具App,可以让你了解到一些东西。...至于为什么使用Kotlin,稳固一下,不然太久不用就会生疏,文本我们讲述是扫描,你可能回想,一个扫描有什么好写,不就是开始、结束、显示设备嘛?至于单独作为一个功能来写一篇文章嘛?...,在Kotlin如果要对ViewBinding进行封装的话同时利用上Kotlin一些特性的话,可以这样做,原文地址如下:Viewbinding使用和委托封装,感觉写得蛮好,太久没用Kotlin了,...") } 这里使用了Activity Result API,需要注意是它们是与onCreate()函数平级,下面修改onClick()函数代码: override fun

83360

【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 )

: 如果要在 @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 配置权限 , 否则无法使用 ; <?

1.5K00

【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 最简单用法 | 一行代码搞定权限申请 | 推荐用法 )

文章目录 一、添加依赖 二、在 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 配置权限 , 否则无法使用... 三、权限申请最简单用法 ---- 只需要在需要权限时候调用

1.5K00

如何优雅地申请Android运行时权限

之前 Android6.0之前,应用权限仅在代码里AndroidManifest.xml声明便可以获得,不需要征求用户同意。...正常权限在AndroidManifest.xml声明即可获得,危险权限则需要在使用前向用户申请,征得用户同意后才可以使用。若没有向用户申请就执行操作,应用直接报错闪退。 危险权限和权限组: ?...googlesamples中提供方法,使用EasyPermissions.requestPermissions申请权限,同时也需要在ActivityonRequestPermissionsResult...整体思路 绝大多数开源库在申请权限时候要在ActivityonRequestPermissionsResult注册回调,这一点是很反感,代码侵入性太大了。...假如我封装了一个获取定位接口,这是一个独立方法,一般来说会写在LocationUtils.java,而且任何人任何类类都可能调用方法,这就导致LocationUtils是没有Activity去接收

3.1K20

Android EasyPermission优雅地实现动态权限申请

##一、权限等级和权限组介绍 权限主要分为 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

2K30

Android 高德地图API(详细步骤+源码)一

个人平时日常使用最多定位软件就是高德地图。所以这篇文章,就带你来初步了解使用。 正文   在此之前呢,默认都没有账号,因此需要先注册一个账号账号才行,点击高德开放平台进入主页面。...[iwl1e85u26.png] 这里存放在D盘下APK文件夹,然后设置jks名字为GaodeMapDemo,然后点击OK。...刚才在AndroidManifest.xml配置了比较多权限,而在实际使用过程,Android6.0之后有一些权限是需要用户动态申请,比如定位、获取手机状态、文件读写之类。...pub.devrel:easypermissions:3.0.0' 如下图所示 [8jhri0es4p.png] 然后点击AS右上角Sync进行同步,同步完成之后,你就可以使用了。...EasyPermissions.onRequestPermissionsResult设置,设置之后会重新调用requestPermission()方法,为什么呢?

6.9K62

大疆无人机 MobileSDK(遥控器手机端)开发 v4版<1>

“工欲善其事,必先利其器”,首先准备好开发软件,因为我们使用是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。

55530

Android BLE 蓝牙开发,连接蓝牙设备进行通讯

我们可以直接使用 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

3.2K20

Android WIFI使用简述

一、创建项目   首先创建项目,这里使用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

2.8K20

Android 图片裁剪

} EasyPermissions就是刚才在build.gradle添加依赖库,然后写一个权限请求方法。...然后是一个判断,通过这框架去判断当前权限是否以获取,是则进行后续操作,这里是弹一个Toast,方法也很简单。...//图片 private ImageView ivPicture; 然后在onCreate绑定xmlid。下面你再使用这个ivPicture就不会报空对象了。...在荣耀8和荣耀20i上运行都是这样,对应版本是8.0和10.0,效果基本一致。那么下面修改一下参数试试看,如下图修改了宽高比例和剪裁后宽高。 ? 再运行一下: ?...但是有一些朋友想要圆形剪裁,那么这里有一个问题你要弄清楚,你要真的还是假,真的圆形,那么肯定是需要剪裁后重新生成,而假圆形就很好办了,首先我们改回刚才参数,那么在是手机上就还是这样圆形剪裁框

2.5K20

Android 图片裁剪 (附源码)

} EasyPermissions就是刚才在build.gradle添加依赖库,然后写一个权限请求方法。...然后是一个判断,通过这框架去判断当前权限是否以获取,是则进行后续操作,这里是弹一个Toast,方法也很简单。...//图片 private ImageView ivPicture; 然后在onCreate绑定xmlid。下面你再使用这个ivPicture就不会报空对象了。...在荣耀8和荣耀20i上运行都是这样,对应版本是8.0和10.0,效果基本一致。那么下面修改一下参数试试看,如下图修改了宽高比例和剪裁后宽高。...但是有一些朋友想要圆形剪裁,那么这里有一个问题你要弄清楚,你要真的还是假,真的圆形,那么肯定是需要剪裁后重新生成,而假圆形就很好办了,首先我们改回刚才参数,那么在是手机上就还是这样圆形剪裁框

1.6K30

项目需求讨论 - 动态权限申请分析及相关第三方库源码分析

hi,又到了我们具体开发时候遇到项目需求讨论了。 在具体项目开发,关于Android动态申请权限功能,想大家都见怪不怪了。很多人开发app也都使用过这块需求。...PS:本文比较啰嗦,特别是对RxPermission和easyPermission源码分析,因为比较细(又或者是啰嗦及累赘),所以造成篇幅会很大。可能很多人都不会有耐心看完。...当然还有其他携带Uripermission检查,不过没有试验过,用过小伙伴留个言,看是在什么情况下使用及怎么使用。...这个库是谷歌推出,所以我也使用过这个。怎么使用这个库就不多说了。我们直接来看相关源码分析。 我们直接看他官方给Demo: 1....如果直接这个申请权限是询问状态,新建一个Observable,并且会根据申请权限name为key保存到mRxPermissionsFragmentHashMap为什么要存进去呢,因为这时候要

1.8K40

Android 低功耗蓝牙开发(扫描、连接)

前言   之间写过蓝牙开发文章,只不过是针对于经典蓝牙,可以理解为普通蓝牙,连接对象是经典蓝牙,列如手机蓝牙、蓝牙耳机等设备。...而也有读者说在学习低功耗蓝牙,因此就有了这篇文章,一方面是为了丰富蓝牙使用,一方面也是为了帮助看我文章读者,我会讲很细,很多人也说在记流水账,不过这不重要,重要是你从流水账里学到了什么。...而在Android6.0以后则有了动态权限申请,这里就说明一下等下为是什么要请求定位权限,后面就不要问我为什么扫描一个蓝牙还要打开定位权限这样问题了。...下面只要在checkAndroidVersion调用这个requestPermission()方法和openBluetooth()方法即可,如下图所示: ?...地址去连接这个设备,然后在连接设备回调处理连接设备结果。

2.6K40

Android使用LiveEventBus消息实现组件间通讯

Q1 为什么要用LiveEventBus?...范围全覆盖消息总线解决方案 进程内消息发送 App内,跨进程消息发送 App之间消息发送 更多特性支持 免配置直接使用,懒人最爱 支持Sticky粘性消息 支持AndroidX 支持延迟发送...在Android由于module间不可以双向依赖,所以如果你想调用某个没有依赖关系组件服务往往是做到,而组件间通信正好可以解决这样问题。组件间通信在组件化和插件化扮演了重要角色。...其实现成框架里面App做为宿主,很多都已经写好了组件间通讯,不过对来说有点太重了,所以就考虑用LiveEventBus消息做个简单处理,毕竟组件间通信并不是常态,废话不再多说,正篇开始。...App没有Activity,只是创建了一个App继承自Application,就是用来做LiveEventBus初始化工作,还有监听事件。

1.6K30
领券