Android
文章平均质量分 59
美奇开发工作室
后端开发工程师,做一个喜欢分享技术的领域开发者!
展开
-
Android7.0以上版本更新升级兼容代码
安卓APP程序长期迭代升级的话,都需要一个自动安装更新版本的功能,这样不仅方便用户,也方便我们程序员对产品功能进行升级优化和bug修复。我们开发调试基本都是在安卓模拟器上运行,一般不会遇到什么问题,但是,到了真机上,很多问题就莫名其秒的出现了,比如“apk没有自动安装”、apk安装时弹出“解析软件安装包出现问题”等等情况,针对这些情况,我们可以使用下面的三个步骤来解决。.........原创 2022-07-17 12:29:39 · 1279 阅读 · 0 评论 -
Android使用JSONObject解析接口json字符串(带日期)
1、接收到的json字符串格式如下:{ "code":1, "msg":"success", "count":2, "data":[ { "id":979, "number":"202204130932361716451", "money":"0.20", "type":1, "time":1649813556,原创 2022-04-13 09:42:19 · 3750 阅读 · 0 评论 -
Android服务与Activity活动或者Fragment碎片交互数据
需求:众所周知,Service服务是运行于后台进程中的,当服务完成某个功能后,要如何把数据传递到活动或者碎片界面,让用户看得到呢?方案:这里我只列举会用的方法,如果你有更高明的方案,欢迎在留言里补充!一、内部广播1、创建一个MainApplication类,继承自Application,可以全局调用,代码如下:import android.app.Application;import android.content.Context;import android.content.原创 2022-03-03 12:04:20 · 357 阅读 · 0 评论 -
Android使用服务发送和接收socket数据
一、自定义SocketService服务类,代码如下:import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;import com.google.gson.Gson;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.原创 2022-02-26 16:48:55 · 4861 阅读 · 0 评论 -
Android客户端通过socket接收数据出现乱码问题
出现乱码的代码: /*使用子线程接收数据*/ new Thread(new Runnable() { @Override public void run() { InputStream inputStream = null; BufferedInputStream bufferedInputStream = null; try {原创 2022-02-26 16:12:48 · 3365 阅读 · 0 评论 -
解决Android11版本无法获取安装应用APP版本号的问题
导读:开发过程中,需要知道某个APP的版本号,在安卓模拟器(android7版本)中可以正常获取到版本号,但真机(android11版本)测试时,却无法获取,经过查资料才知道是因为Android11的包可见性导致的。在Android11中,除了默认的一些应用外,我们不能直接获取到软件包是否已经安装了,换句话说我们安装了一个应用,但是我们调用 getInstalledApplications() 或 getInstalledPackages()的可能没有返回此包名,这就是Android11引入的包可原创 2022-02-11 14:26:27 · 3578 阅读 · 3 评论 -
安卓使用无障碍服务监听微信和QQ的收款信息
导读:资深的安卓程序员想必都了解,安卓的通知监听服务(NotificationListenerService)可以监听通知栏的信息,从通知栏信息里获取到我们想要的收款信息(比如收款类型、收款金额)。但是,这个通知监听服务有个弊端,如果APP没有发送通知,那就没办法知道有没有收到款,特别是现在的微信 和QQ,二维码收款不再发送通知,而是在自身的APP里给出提示,这样就没办法使用通知监听服务了。因此,我们需要使用安卓的无障碍服务(AccessibilityService),来监听APP界面的变化,实时获取支原创 2022-02-11 11:48:14 · 10289 阅读 · 3 评论 -
Android原生态实现分享转发功能(分享图片到其他APP)
导读:之前刚学安卓时,写过一篇“Android调用系统shareAPI实现分享转发功能”的文章,随着安卓版本的迭代更新以及其他APP的优化,安卓的这个shareAPI好像失效了,不怎么好使,已经获取不到有分享功能的APP列表,点击分享也会直接崩溃。并不是说我之前那篇文章的代码有错,只能说是时代有了变化,旧的方法已经不能满足新的需求,我并不打算删掉原来的那篇文章,旧文章地址如下(仅作参考):Android调用系统shareAPI实现分享转发功能_美奇软件开发工作室-CSDN博客需求分析:在开发APP原创 2021-12-06 15:18:45 · 9111 阅读 · 2 评论 -
Android Studio在Build过程中,build窗口出现乱码解决办法
遇到问题:Android Studio在Build过程中,出现如下图的乱码:之所以会这样,是因为我的电脑硬盘不小心被分区格式化过,项目弄丢了,后面使用硬盘恢复工具找回来的,编码出现了错误。解决方法:1、Android Studio工具菜单栏上,Help → Edit Custom VM Options2、在打开的文件末尾添加如下代码:-Dfile.encoding=UTF-8这行代码的意思是指定编码格式3、Android Studio工具菜单栏上,Fi...原创 2021-11-22 17:23:05 · 6916 阅读 · 0 评论 -
Android自定义PreferenceScreen的Layout布局,并获取控件
先说一下需求,要在<PreferenceScreen>里添加一个自定义的Layout,实现如下效果:操作步骤:1、在res/layout目录创建一个xml文件,名为my_preference_layout.xml,代码如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" andr原创 2021-11-17 18:07:35 · 4087 阅读 · 0 评论 -
Android获取纯数字的手机设备UUID
一般的UUID是很长的字符串编码,不好记,因此需要一个纯数字的UUID,效果如下图: /** * 得到全局唯一UUID */ private static String uuid; public static String getNumberUUID(Context context){ SharedPreferences mShare = context.getSharedPreferences("uuid",Context.MODE_P原创 2021-11-16 20:51:15 · 2344 阅读 · 0 评论 -
Android使用SharedPreferences存储APP设置参数
一、什么是SharedPreferences?android.content.SharedPreferences是一个接口,用来获取和修改持久化存储的数据。Android数据持久化方法中最简单的一种,即使用Preferences的键值对存储方式,这种方式主要用来存储比较简单的一些数据,而且是标准的Boolean、Int、Float、Long、String等类型。二、SharedPreferences有三种获取系统中保存的持久化数据的方式第一种:this.getPreferences (int .原创 2021-11-04 14:40:48 · 494 阅读 · 0 评论 -
Android Studio将html5网址封装成APP
是否允许运行在一个file schema URL环境下的JavaScript访问来自其他任何来源的内容,包括其他file schema URLs. 参见setAllowFileAccessFromFileURLs(boolean),为了确保安全,应该设置为不允许,注意这项设置只影响对file schema 资源的JavaScript访问,其他形式的访问,例如来自图片HTML单元的访问不受影响。如果该设置项的值由false变为true,WebView展示的内容所引用的所有的图片资源将自动下载。原创 2021-06-29 10:56:50 · 5113 阅读 · 1 评论 -
Android提示:使用或覆盖了已过时的 API
Android在编译时,出现类似提示:注: 某些输入文件使用或覆盖了已过时的 API。注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。解决方法:1、在build.gradle配置文件中的android节点下,添加如下配置信息:android { ... //添加此配置的作用:让过时的api或者不合规矩的语法展现出来 gradle.projectsEvaluated { tasks.withType(JavaCom原创 2020-11-24 12:46:05 · 1933 阅读 · 1 评论 -
Android组件化开发实战:封装权限管理请求框架
导读:通过自己封装一个简单的Android权限申请框架,学习如何发布开源库到Jitpack/Jcenter,从而激发自己的学习兴趣,以后自己也能多多造轮子,成为 开源界的轮子哥。组件化流程:封装自己的权限框架 将开源库发布到JitPack仓库一、创建Android项目1、打开Android Studio,创建新项目2、选择创建空活动 “Empty Activity” → “Next” 下一步3、填写项目名称,包名,保存路径,Language语言选择“Kotl...原创 2020-11-23 18:45:18 · 3225 阅读 · 9 评论 -
Android组件化开发简单示例
一、组件化初始模型1、通过一个简单的android项目初始架构图来了解组件化,如下图:打个生动的比喻,把我们的APP当成一个电脑主机,那么app外壳就是主机外壳,main组件就是主板,其他各个组件就类似于硬盘、网卡、显卡之类的东西,各个组件连接到主板上,然后再安装到主机壳中,对外展示为一个完整的电脑主机。2、app外壳和main组件是我们app的必备组成部分,一起构成了可对外发布的完整app,其他组件可以集成进来,也可以不集成进来,只会增加或者减少我们app的功能,但不影响我们app的最终.原创 2020-11-21 15:01:52 · 7915 阅读 · 20 评论 -
Android的路由框架用法
一、什么是android路由?主要是映射页面跳转关系,根据路由表将页面请求分发到指定页面。二、android路由使用场景App接收到一个通知,点击通知打开App的某个页面 浏览器App中点击某个链接打开App的某个页面 运营活动需求,动态把原生的页面替换成H5页面 打开页面需要某些条件,先验证完条件,再去打开那个页面 不合法的打开App的页面被屏蔽掉 H5打开链接在所有平台都一样,方便统一跳转 打开某个APP,如果APP存在就直接打开,不存在就去下载页面下载三、为什么需要路由框架?原创 2020-11-21 14:30:19 · 1843 阅读 · 2 评论 -
Android组件化和插件化的概念
一、什么是组件化和插件化组件化开发就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。插件化开发和组件化开发略有不用,插件化开发时将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk(组件化的每个模块是个lib),最终打包的时候将宿主apk和插件apk分开或者联合打包。两者区别简单来说组件化是在编译期分模块,插件原创 2020-11-10 15:43:17 · 3310 阅读 · 16 评论 -
Android的PendingIntent简单示例
PendingIntent是什么?pendingIntent的字面意义:待确定的意图,等待的意图。pendingIntent是一种特殊的Intent,pendingIntent执行的操作实质上是参数传进来的Intent的操作,使用pendingIntent的目的在于它所包含的Intent的操作的执行是需要满足某些条件的。Intent和PendingIntent的区别:Intent是立刻执行的,而PendingIntent可以等到事件发生后触发,PendingIntent可以cancel。 I.原创 2020-11-08 23:17:10 · 1622 阅读 · 0 评论 -
Android仿QQ锁屏状态下消息提醒(震动+提示音)
解决思路:1、APP应用退到后台,我们想继续做些什么,当然是使用Service服务了。2、在Activity活动里定义一个广播接收器(BroadcastReceiver),用于接收Service服务的命令。3、在Activity活动里添加标志位(必须添加),允许锁屏状态下显示消息(解锁屏幕)。4、Service服务在需要给用户进行消息提醒时,向广播接收器发送命令,然后由广播接收器来执行即可。原创 2020-11-08 21:35:32 · 1471 阅读 · 0 评论 -
android解决AlarmManager警报器计时不准,在手机灭屏后延迟的问题
导读:最近使用AlarmManager的闹钟开发一个提醒业务,在模拟器上测试没有问题,低版本(android6.0以下)的手机上也没有问题,但在android11版本的手机上就出现了“灭屏后延迟的问题”,大概延迟2-5分钟。具体原因:google为了缓解Android手机饱受诟病的耗电问题,在6.0版本引入了新的省电机制Doze模式,在android6.0之后,如果想继续保持AlarmManager在手机处于所谓Doze模式时仍然能够被即时响应,则需要使用AlarmManager新提供的两个方法setA原创 2020-11-08 20:50:25 · 3067 阅读 · 0 评论 -
Android各版本代号和API级别对照表
对照表版本号格式Android 8.0.0(Oreo以后)在 Android 8.0.0 (Oreo) 及更高版本中,每个 build 均采用 build ID 格式 PVBB.YYMMDD.bbb[.Cn] 进行标识,其中:P 表示平台版本代号的第一个字母,例如 O 表示 Oreo。 V 表示支持的行业。按照惯例,P 表示主要平台分支。 BB 是由字母和数字组成的代码,Google 可通过该代码识别 build 所属的确切代码分支。 YYMMDD 表示相应版本从开发分支细分出原创 2020-11-08 19:51:02 · 8601 阅读 · 0 评论 -
android使用手机系统震动功能(适配android7.0以上版本)
导读:最近购买了一部新手机(是android11.0的版本),新手机玩得不亦乐乎,但却意外发现自己写的APP退到后台之后无法震动了,我不懂分析安卓源代码,只能百度找解决方法,最终找到了,现在贴代码出来,留个纪念。/** * 手机震动 * * @param context * @param isRepeat 是否重复震动 */ public static void playVibrate(Context context, boolean is原创 2020-11-07 15:31:21 · 2079 阅读 · 2 评论 -
Android 8.0以上的系统使用通知详细教程代码(兼容8.0以下的系统)
导读:谷歌在Android 8.0系统上对通知进行了修改,引入了消息通道(Notification Channel)的使用,目的是为了方便不同信息的管理与分类,提高用户体验。所以我们在开发过程中,使用通知时需要兼容Android 8.0以上的系统,这里提供全网最详细的通知使用代码,欢迎大家借鉴。(Ps:这里我就不细讲其原理了,相信能用通知功能的人基本都懂,直接上完整代码)完整的代码: /** * 通知栏(兼容android 8.0以上) *..原创 2020-11-06 19:59:38 · 497 阅读 · 0 评论 -
Android在Service服务中调用Activity活动的方法,实现UI界面更新操作
关于服务:Android中service服务的开启,默认是绑定activity活动的,是activity级的。如果要实现当退出程序后,保持Service的运行,那么需要把service设置成为system级的,首先在AndroidManifest.xml清单文件中注册服务时,需要声明权限,方法如下: <!-- 注册服务 --> <service android:name=".service.RingService"原创 2020-11-06 15:21:27 · 6866 阅读 · 4 评论 -
Android添加全局上下文获取Context
导读:什么情况下需要使用全局上下文呢,情况有以下几点:例如在Service服务中不能通过参数传过来,但是又需要用到这个context参数,这种情况下就需要使用全局上下文。 例如工具类中,频繁传递上下文参数的话,会比较麻烦,一劳永逸的方法就是使用自定义Application,获取全局上下文。获取context上下文的方法:一、Activity.this返回当前activity(活动)的上下文,属于activity ,activity销毁,上下文也就跟着销毁。二、getApplic原创 2020-11-06 15:00:07 · 742 阅读 · 0 评论 -
Android安卓反编译apk源代码
需要用到三个工具:1、dex2jar用于将dex文件转换成jar文件2、jd-gui 用于将jar文件转换成java代码3、apkTool 还原APK文件中的9-patch图片、布局、字符串等等一系列的资源这里提供工具下载地址:https://download.csdn.net/download/qq15577969/12894652一、配置java环境变量,不懂配置的看我下面这篇文章https://blog.csdn.net/qq15577969/article/detail..原创 2020-09-28 15:56:38 · 830 阅读 · 0 评论 -
android倒计时封装(活动进入后台,倒计时依然能正常计时)
效果图:封装好的工具类:TimeUtils.javapackage com.xiao7.pump.Utils;import android.os.Handler;import android.os.Message;import android.widget.TextView;import java.util.Timer;import java.util.TimerTask;public class TimeUtils { /*倒计时时长 单位:秒*/ publ原创 2020-07-05 20:38:59 · 1145 阅读 · 0 评论 -
Android解决点击桌面图标,就重新启动应用程序问题
场景:按HOME键隐藏程序,但点击桌面图标,重新进入程序后,发现界面跟刚安装进入时是一样的,相当于程序重新初始化加载了。举个明显的例子:比如我的应用是定时器,有倒计时功能,我第一次打开程序时,已经启动了倒计时,当我按HOME键隐藏程序,让程序进入后台,之后我从桌面点击图标进入,发现倒计时重新开始了,这很明显是个bug。原因分析:原因很可能是intent携带的信息不一样导致的解决方法:在程序启动的首页面 android.intent.action.MAIN 添加下面的处理代码:@Ov原创 2020-07-05 17:15:35 · 1760 阅读 · 0 评论 -
android在代码里设置button或者textView的字体颜色
直接使用Color.parseColor(颜色代码),如下:button.setTextColor(Color.parseColor("#fff"));原创 2020-07-03 17:39:43 · 1001 阅读 · 0 评论 -
Android安卓读取手机中的图片,实现相册管理功能
1、实体类Photo.ajvapublic class Photo { private String name;//名称 private String date;//日期 private long size; //大小 private String path;//路径 /** * 构造函数 */ public Photo() { } public Photo(String name, String date, lon原创 2020-06-23 14:30:21 · 2118 阅读 · 0 评论 -
【Hbuilder】使用夜神模拟器调试安卓App项目
遇到问题:在开发APP过程中,为了省事,需要使用Hbuilder将h5或wap网站打包成APP。对于新手来说,常常反复的使用云打包,然后传到真机上测试,这样一来呢,最后发现云打包的次数是有限制的,没办法继续下去了!(我也踩了这个坑)解决方案:最好的方法是Hbuilder连接安卓模拟器,然后在模拟器上进行调试,调试好了再进行云打包。下面给看一下效果图:步骤一:下载安装夜神模拟...原创 2019-11-23 19:01:51 · 1382 阅读 · 0 评论 -
【HBuilder】wap2app设置全屏显示,同时不显示系统状态栏
1、在项目里打开manifest.json文件,勾选 “应用是否全屏显示” 项即可2、manifest.json文件里,找到"statusbar": { "immersed": "supportedDevice"},"supportedDevice" 改成 "false""statusbar": { "immersed"...原创 2019-11-23 17:19:05 · 3459 阅读 · 0 评论 -
【HBuilder】wap2app禁用原生标题栏,解决 “双标题” 的问题
一、先看一下遇到的问题,看下图就知道什么是双标题了。二、解决方案:1、将global里的titleNView设置为false2、在sitemap.json的pages数组的最后,注意是最后(适配url规则为从上而下),配置一个webviewid为common的webview,来容纳所有会随机打开的窗口,进行你的操作。代码如下:{//未适配的公共页面,可拦截原生下载和头部导航栏...原创 2019-11-23 17:13:14 · 3261 阅读 · 1 评论 -
【HBuilder】将网址打包封装成安卓和苹果APP的教程
1、打开HBuilder→ 右上角“文件”→ “新建” → "Wap2App"2、在弹出框中输入应用名称,wap站首页网址,选好保存的位置,然后点击 “完成”3、打开项目中的manifest.json配置文件,填写相关配置信息,大概如下:4、在manifest.json文件底部,切换到“模块权限配置”,把红色和黄色的模块删掉,我们不需要使用。5...原创 2019-11-23 15:50:08 · 4638 阅读 · 0 评论 -
Android在第1个活动(Activity)中打开第2个活动并传递参数(值)
1、第一个活动MainActivity.javapackage com.t20.activitydemo;import com.t20.activitydemo.R.string;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.Inte...原创 2018-06-15 14:13:42 · 1835 阅读 · 0 评论 -
Android使用帧布局(FrameLayout)来动态加载碎片(fragment)
1、在activity_main.xml布局上添加帧布局FrameLayout<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pa...原创 2018-06-15 13:57:23 · 7472 阅读 · 0 评论 -
Android的碎片(片段)Fragment
1、在activity_main.xml布局文件上,添加Fragment控件<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_par...原创 2018-06-15 13:27:49 · 220 阅读 · 0 评论 -
Android活动(Activity)的四种启动模式
一、standard模式:这是最基础的模式,在这种模式中,当你进入一个活动,这个活动就会创造一个实例,出现在返回栈的最顶层,上一个你离开的活动就会被压在下面,(注:返回栈是Android管理活动的地方,出现在界面上的活动就在最上面,再出现新的就一层层往下压。)当你无限的点击进入下一个界面,你的每一个活动都会在返回栈中往下压。如果你点击返回上一个的活动,最顶层的活动就会消失,第二层的就会上来,如果你...转载 2018-06-15 13:29:37 · 499 阅读 · 0 评论 -
Android进程优先级
android将进程的优先级分为5个层次,按照优先级由高到低排列如下:前台进程(Foreground process)。它表明用户正在与该进程进行交互操作,android系统依据下面的条件来将一个进程标记为前台进程:该进程持有一个用户正在与其交互的Activity(也就是这个activity的生命周期方法走到了onResume()方法)。该进程持有一个Service,并且这个Service与一个用...转载 2018-06-15 13:29:44 · 613 阅读 · 0 评论