AIDL 回调中的 IllegalStateException

beginBroadcast java.lang.IllegalStateException 已知在 aidl 中回调注册的 callback 对象时, 需要使用 beginBroadcast() 和 finishBroadcast(), 且一个 begin 之后对应一个 finish; 下面是官方建议的回调的写法; int i = callbacks.beginBroadcast(); while (i > 0) { i--; try { callbacks.getBroadcastItem(i).somethingHappened(); } catch (RemoteException e) { // The RemoteCallbackList will take c ...

在 Data Binding 使用数组资源和定义多个属性

同时定义多个属性 如果给一个 View 添加多个属性, 并且这几个属性是相互影响的, 可以像下面这样定义; @BindingAdapter({"background", "skin"}) public static void setViewBgStyle(Button view, String[] arrayId, int index) { } 1234     @BindingAdapter({"background", "skin"})    public static void setViewBgStyle(Button view, String[] arrayId, int index) {    ...

ContentProvider

时间过得真快, 上一篇关于 ContentProvider 的笔记还是 2015 年的时候, 之后就没有用过 ContentProvider 了, 有些东西都忘了, 而且关于自定义 ContentProvider 和 greendao 的内容比较少, 这里再重新整理一遍; 这里使用 greendao 框架存储数据, 不同点就是 SQLiteDatabase 对象是通过 greendao 提供的 getWritableSQLiteDatabase 方法来获取到的; 正文 继承 ContentProvider, 来实现跨进程的数据库访问; 继承的子类需要在 AndroidManifest.xml 中进行配置; <provider android:exported="tr ...

andrid 8.1 前台服务

android 8.1 在设置前台服务时, 发送通知, 需要指定一个 channelId; private void startForeground() { String channelId =""; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { channelId=createNotificationChannel(); } Intent intent = new Intent(this, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity (this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); ...

恶意号码识别

自己用的原生系统的 android 手机没有恶意号码识别的功能,应用市场上的号码识别软件还需要通讯录这类的权限,用起来自己也不放心,于是就打算自己写一个应用来做这事; 搜索号码识别接口的时候, 在网上找到了这篇文章,但是原博主的文章里贴出的代码已经无法使用,就自己改了一下代码; 识别号码的原理 使用"360搜索"搜索号码 -> 分析返回的网页数据 -> 从网页数据中提取数据返回给客户端; 由于360搜索提供的格式可能会发生改变, 会造成接口无法使用, 下面贴出的源码也需要对应修改; 下图网页源码中的 格式 ...

GreenDao使用中遇到的异常

类型 Character 无法直接存储到数据库 Character 类型不是原始支持的类型, 转换为 String 类型存储到数据库; private String firstCharString = "~"; @Transient private Character firstChar = '~';//放弃存储 public void setFirstCharString(String firstCharString) { // 在 set String 时, 给 Character 赋值 if (firstCharString.length() > 0) { firstChar = firstCharString.charAt(0); } else { firstChar = ...

centOS FTP 安装配置

服务器为 VPS 1:卸载已装 vsftpd, 如果有 rpm -aq vsftpd 查看vsftpd版本(假设返回 “vsftpd-2.0.5-16.el55.1” ) rpm -e vsftpd-2.0.5-16.el55.1 删除该版本 2:安装 vsftpd yum install -y vsftpd 3:更改FTP配置文件 vi /etc/vsftpd/vsftpd.conf 将 vsftpd.conf 中 anonymousenable=YES 改为 anonymousenable=NO, 禁止匿名登录 4:给系统添加一个用户用于登陆 ftp 只可访问 /var/www/html/ 目录 useradd -d /var/www/html/ -s /sbin/nologin ftpuser 1 u ...

macOS 系统重装

身为程序员, 总是避免不了帮周围的人修电脑, 今天帮一台最近刚买的 Macbook air 重装了系统; 关于这台 Macbook air 一般来说, 正常使用 Mac, 重装系统是很简单的, 但是这台电脑的 macOS 已经被格掉了, 到我手上时, 机子已经被装上了 win10, 128G 硬盘被分成了三个区; 对方的近期需求是用这台电脑写毕业论文, 由于担心 macOS 下做出的 Word 文档格式在 windows 下不同, 所以需要一个windows系统。给上一个人处理后就直接格盘装上了windows,系统盘才30多个G;一开始以为256G所以打算使用“Boot Camp 助理” 添加windows系统,到 ...

编译中遇到的异常……

Gradle sync failed: Cause: error in opening zip file Gradle 无法使用, 发现本地已经存在的 Gradle 对应版本的 zip 压缩包是有问题的; 从网上下载对应版本压缩包, 替换本地文件夹(MacOS默认路径:/Users/xxx/.gradle/wrapper/dists/gradle-3.3-all)中有问题的压缩包, 再将压缩包在当前文件夹解压; RuntimeException:java.io.IOException: writePrevChunkAddress 缓存有问题,出现这个"Event Log"后编译也还可以成功; 点击 "File > Invalidate Caches/Restart"解决 support library Failed to resolve 有时候 ...

Gradle 和 Android Plugin for Gradle 版本

android studio 的 "Model Setting"(项目名称上右击菜单中打开) 中的 "Project" 标签页中有 "Gradle Version" 和 "Android Plugin Version"; Gradle 是编译工具, "Android Plugin for Gradle" 提供 android 环境下使用 gradle 的功能; "Gradle Version" 和 "Android Plugin Version" 有对应关系; Plugin version Required Gradle version 1.0.0 – 1.1.3 2.2.1 – 2.3 1.2.0 – 1.3.1 2.2.1 – 2.9 1.5.0 2.2.1 – 2.13 ...