android

JNI 引入已有的库文件遇到的问题

软件环境 Android studio: 3.1.1 NDK 版本: r15c targetSdkVersion 27 Gradle Version: 4.4 Android Plugin Version:3.1.1 error adding symbols: File in wrong format 已有的动态库可能是针对一个特定的平台, 指定想要编译出的库对应的平台与已有 so 文件相同 // Module 下的 build.gradle // 假设已有的一个 so 文件对应的指令集是 armeabi-v7a android { defaultConfig { ... ndk { abiFilters "armeabi-v7a" } } } ...

View 构造方法中第三个参数 defStyleAttr

今天使用一个自定义控件继承自 AppCompatButton, 字体不是居中的, 最后排查发现是构造方法的问题; 对比 AppCompatButton 的源码发现是 defStyleAttr 参数的问题 public class TButton extends android.support.v7.widget.AppCompatButton { public TButton(Context context) { this(context, null); } public TButton(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TButton(Context context, AttributeSet attrs, in ...

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); ...

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 = ...

使用本地aar包

软件环境 android studio: 2.2 MacOS 一般方式导入 aar 包放入 libs 文件夹下; // build.gradle repositories { flatDir { dirs 'libs' //this way we can find the .aar file in libs folder } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile(name: 'aar_name', ext: 'aar') } 1234567891011 // build.gradlerepositories {    flatDir {   &n ...

Annotations(注解)支持库

compile 'com.android.support:support-annotations:24.2.0' 1 compile 'com.android.support:support-annotations:24.2.0' Nullness注解 使用@NonNull注解修饰的字段,方法参数,返回值, 都不可已为null。 @Nullable 表示可以为空 @Nullable public String notNull(@NonNull Fragment fragment){ return null; } 123  &nb ...

不同的drawable文件夹对图片内存占用的影响

同一张图片放在不同的drawable文件夹里, 使用时占用的内存是不一样的; 不同文件夹对应dpi 在android中, 以160dpi 的屏幕为基准, 在此屏幕上 1dip = 1px; 密度 描述 ldpi 低密度屏幕;约为 120dpi。 mdpi 中等密度(传统 HVGA)屏幕;约为 160dpi。 hdpi 高密度屏幕;约为 240dpi。 xhdpi 超高密度屏幕;约为 320dpi。此项为 API 级别 8 中新增配置 xxhdpi 超超高密度屏幕;约为 480dpi。此项为 API 级别 16 中新增配置 xxxhdpi 超超超高密度屏幕使用(仅限启动器图标,请参阅“支持多种屏幕”中的注释);约为 640dpi ...