1、安卓BLE
Android6.0以上系统,开发的app(targetSdkVersion为23或以上)在vivo,oppo,一加上搜索不到附近BLE设备,手机自带的设置-蓝牙下面是可以搜索到附近BLE设备的,其他品牌手机均可正常运行。
解决:
1、修改targetSdkVersion为23以下
2、打开系统的位置信息开关(判断GPS是否打开,未打开跳到系统设置位置信息)
2、加载大图片内存溢出
java.lang.OutOfMemoryError
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:639)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:615)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:391)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:419)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:419)
解决:
Try enabling large heap support, by adding this to your AndroidManifest.xml file:
Also, you can reduce the memory required for your Bitmaps by using the Bitmap.Config type RGB_565 instead of ARGB_8888. defaultConfig { ndk { //Can't load vlcjni library: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/steelmate.com.iot_hardware-1/base.apk"],nativeLibraryDirectories=[/data/app/steelmate.com.iot_hardware-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libvlcjni.so" abiFilters "arm64-v8a","armeabi", "armeabi-v7a", "x86","x86_64" } applicationId "steelmate.com.equipment" minSdkVersion 19 targetSdkVersion 21 versionCode 2 versionName "1.1" multiDexEnabled true } .so导入方式: 1.静态导入,就是放在jnilibs目录 2.动态导入,放在asets目录,通过代码将其复制到app包名目录下,context.getFilesDir(),然后调用System.load(".so的绝对路径“”); 安卓app增加了多语言切换,用application和activity的context获取的屏幕的方向和大小会有问题,有一篇多语言的文章已解决 安卓vlc播放,手机是竖屏时,vlc展示的宽高比为16:9显示没问题,横屏时,vlc的宽设为屏幕的宽,高设为屏幕的高,显示在屏幕上画面错乱 手机为横屏时,vlc展示的宽高比应该设为16:9,这时候画面就会正常 有篇fragment各种嵌套的文章已解决 直接让dialog全屏,在dialog的根布局设置前景自定义遮盖,有篇dialog的文章已解决 服务器更换了图片,却没有改变url,导致该问题 可以获取图片url的最后修改时间,为0就不加载图片,不为0就将时间戳设为guide加载图片的签名就可以解决该问题 在recyclerview中设置placeholder,recyclerview更新时图片会闪烁出placeholder设置的图片,所以不能设置placeholder,设置error就行 设置了placeholder就必须得设置dontAnimate,否则图片显示会不正常 有篇状态栏设置文章已解决 解决: 1、没有开代理,打开代理,auto-detect proxy settings 2、project目录下的gradle.properties中设置了Proxy代理所致,打开项目中的gradle.properties文件,查看其中是否有,删掉这些代码,就可以了。 systemProp.http.proxyHost=127.0.0.1 systemProp.http.proxyPort=1080 systemProp.https.proxyHost=127.0.0.1 systemProp.https.proxyPort=1080 3、查看C:\Users\Administrator\.gradle文件夹,看其中的gradle.properties文件中是否有和前述一样存在着代理设置的问题,这个属于系统级的Proxy代理设置,它对所有的工程项目有效,如果有代理设置的话也删除掉。删除这一部分代码,编译就正常了。 设置值: public static Context updateLanguage(Context context) { Locale locale = getCurrentLocale(context); if (locale == null) { return context; } update(context, locale); //设置值的代码,高版本的代码和过时的代码一起执行 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { context = context.createConfigurationContext(context.getResources().getConfiguration()); update(context, locale); } return context; } private static void update(Context context, Locale locale) { Resources resources = context.getResources(); Configuration configuration = resources.getConfiguration(); DisplayMetrics displayMetrics = resources.getDisplayMetrics(); configuration.setLocale(locale); resources.updateConfiguration(configuration, displayMetrics); } 返回值: private static Locale getSystemLocale(Context context) { Locale locale; //返回值的代码,高版本的代码和过时的代码条件执行 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //7.0有多语言设置获取顶部的语言 locale = context.getResources().getConfiguration().getLocales().get(0); } else { locale = context.getResources().getConfiguration().locale; } return locale; } 关闭Androidstudio, 删除C:\Users\Administrator\.AndroidStudio3.5\system\caches中caches目录,然后打开Androidstudio 项目名A改成B:项目根目录下的settings.gradle文件中的rootProject.name='A'改成rootProject.name='B',关闭项目并在Androidstudio中清除该项目,将项目的文件夹名称A修改成B,重新导入项目。 蓝牙广播中对服务 UUID 格式定义都有三种 16 bit UUID、32 bit UUID、128 bit UUID。 但是熟悉安卓开发的小伙伴都知道接口都 UUID 格式,fromString 时候 16bit 的 UUID 该咋办呢? 16bit 和 32bit 的 UUID 与 128bit 的值之间转换关系: 128_bit_UUID = 16_bit_UUID * 2^96 + Bluetooth_Base_UUID 128_bit_UUID = 32_bit_UUID * 2^96 + Bluetooth_Base_UUID 其中 Bluetooth_Base_UUID 定义为 00000000-0000-1000-8000-00805F9B34FB 如果你想说这是啥呀,那我这样说你应该可以明白点: 若 16 bit UUID为xxxx,那么 128 bit UUID 为 0000xxxx-0000-1000-8000-00805F9B34FB 若 32 bit UUID为xxxxxxxx,那么 128 bit UUID 为 xxxxxxxx-0000-1000-8000-00805F9B34FB byte[] a = {0x25, 0x15, 0x25, (byte) 0xE8, (byte) 0x9B, 0x5C, 0x35, (byte) 0xF2}; String b = new String(a); byte[] c = b.getBytes(); c的16进制字符串是251525EFBFBD5C35EFBFBD 解决: byte[] a = {0x25, 0x15, 0x25, (byte) 0xE8, (byte) 0x9B, 0x5C, 0x35, (byte) 0xF2}; String b = new String(a,StandardCharsets.ISO_8859_1); byte[] c = b.getBytes(,StandardCharsets.ISO_8859_1); 这是为什么呢?原因是第一种方法默认是用UTF-8编码来生成String的,用System.getProperty("sun.jnu.encoding")可以得到Android默认编码是UTF-8。UTF-8是可变长度的编码,原来的字节数组就被改变了。而ISO8859-1通常叫做Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中 0~127的字符与ASCII码相同,它是单字节的编码方式,这样第二种方式生成的String里的字节数组就跟原来的字节数组一样。在new String使用其他编码如GBK,GB2312的话一样也会导致字节数组发生变化,因此要想获取String里单字节数组,就应该使用iso8859-1编码。 打开app/src/main目录下的AndroidManifest.xml文件,在application节点上添加android:usesCleartextTraffic="true" 设置targetVersion<29 MqttException 无权连接 org.eclipse.paho.client.mqttv3.internal.exceptionhelper.createmqttexception(exceptionhelper.java:28) org.eclipse.paho.client.mqttv3.internal.clientstate.notifyReceiveDack(clientstate.java:885) org.eclipse.paho.client.mqttv3.internal.commsreceiver.run(commsreceiver.java:118) 原因:mqttClientId有问题,需要修改 View view = new View(mActivity); view.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //设置点击后的效果 return true; case MotionEvent.ACTION_UP: //恢复到点击前的效果 { //判断手指弹起时的位置是否在控件区域内,在区域内是点击,在区域外是取消 float x = event.getX(); float y = event.getY(); if (x >= 0) { if (x <= v.getWidth()) { if (y >= 0) { if (y <= v.getHeight()) { //执行目标代码 } } } } } break; case MotionEvent.ACTION_CANCEL: //基本不会触发 break; default: break; } return false; } });3、.so包报错
4、安卓多语言
5、vlc rtsp播放
6、android fragment各种嵌套问题
7、android dialog默认的遮盖颜色不能改变
8、服务器更换了图片,android guide加载的还是缓存的图片
9、android guide设置placeholder问题
10、dialog和activity状态栏显示不正常
11、Gradle sync failed: Connection refused: connect
12、调用设置值的api,新版本的代码和过时的代码一起调用,调用返回值得api,新版本的代码和过时的代码判断版本来调用其中的一个
13、Androidstudio中的文件显示错乱,但是在记事本中显示正常
14、Androidstudio项目改名
15、安卓蓝牙uuid解释
16、Java中byte[]转String,再将字符串转成字节数组,与原始数组不一样
17、android APP无法使用http网络请求了
18、Android Q报错The user 10129 does not meet the requirements to access device identifiers
19、Android MQTT异常
20、Android Touch事件实现按钮的选择器效果