Android细节问题总结(二)
这篇博客是用来记录自己在写代码的过程中遇到的一些问题,以及解决方法,做一个总结,算是笔记吧。
1.问题描述:
以某一触发唤醒屏幕
解决方案:
public static void wakeUpAndUnlock(Context context){KeyguardManager km= (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);KeyguardManager.KeyguardLock kl = km.newKeyguardLock("unLock");// 解锁kl.disableKeyguard();// 获取电源管理器对象PowerManager pm=(PowerManager) context.getSystemService(Context.POWER_SERVICE);// 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的TagPowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright");// 点亮屏幕wl.acquire();// 释放wl.release();}
注:其中,解锁步骤可以省略。这种情况下,就只是点亮你的屏幕而不会解锁了。
2.问题描述:
除掉Actionbar最左侧的箭头
注意,这个最左侧的的箭头可不是actionbar的icon。如果你去设置它的icon,这样就会导致既有icon也有箭头。
解决方案:
getActionBar().setHomeAsUpIndicator(drawable);
上面的这种方法是适用于API18,而对于API小于18的代码则是不适用的。需要做更多的逻辑。如下:
public static void changeActionBarHomeUpDrawable(Activity activity, int rid) {Drawable homeUp = activity.getResources().getDrawable(rid);final View home = activity.findViewById(android.R.id.home);if (home == null) {// Action bar doesn't have a known configuration, an OEM messed with things.return;}final ViewGroup parent = (ViewGroup) home.getParent();final int childCount = parent.getChildCount();if (childCount != 2) {// No idea which one will be the right one, an OEM messed with things.return;}final View first = parent.getChildAt(0);final View second = parent.getChildAt(1);final View up = first.getId() == android.R.id.home ? second : first;if (up instanceof ImageView) {ImageView upIndicatorView = (ImageView) up;upIndicatorView.setImageDrawable(homeUp);}}
3.问题描述:
Android Private Libraries缺失
如果你的Android Private Libraries是你误删除的话,你可以通过下面的方法1恢复。如果你的项目无原无故的缺失了Android Private Libraries,那么你可以使用下面的方法2修复。
1. 在项目上点击右键,点击Android Tools -> Fix Project Properties 即可
2. android-support-v4重复,删除一个即可
4.问题描述:
Arrays.copyOfRange在低版本的Android中出现NoSuchMethodError异常
对于这个问题的解释,可能要归结于API版本之间的兼容性了。
解决方案:
我的解决方法就是直接重写了这个方法。非常简单粗暴的一个方法,而且很有效。下面是对于Array的一些常用方法的示例源码:
http://commons.apache.org/proper/commons-lang/apidocs/src-html/org/apache/commons/lang3/ArrayUtils.html
5.问题描述:
ListView与动态显示的底部操作栏
你是否遇到过这样的一个问题:你有一个始终位于屏幕底部的Layout,还有一个ListView,它是始终位于屏幕的顶部。当ListView的item过多时,下面的部分item就会被拦住,或是把底部的Layout拦住。
解决方案(一):
对于上面的问题,可能你已经尝试过,使用让Listview位于Layout上方,或是ListView同时位于屏幕顶部和Layout上方。可是尝试过后就会是沮丧的。下面我就分享一个我的技巧:在Layout的外部再套一层Layout,高度为wrap_content。如下:
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><ListViewandroid:id="@+id/listView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_above="@+id/container_relativeLayout"android:layout_alignParentTop="true"android:layout_centerHorizontal="true" ></ListView><RelativeLayoutandroid:id="@+id/container_relativeLayout"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal" ><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Bottom Layout" /></LinearLayout></RelativeLayout></RelativeLayout>
注:可能你会觉得这样是多此一举。因为我可以把ListView的高度设置成match_parent或是fill_parent,再位于Layout之上。这种方式只是适合于,Layout不会被Gone的情况。这里是一个值得注意的地方。
解决方案(二):
可能你会觉得方案一太过繁琐了,那么你可以使用Relayout的另一个属性:layout_alignWithParentIfMissing
android:layout_alignWithParentIfMissing="true"
6.问题描述:
has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added here
大致的意思是存在窗口句柄泄露,即未能及时销毁某个PhoneWindow。其实存在这么一种情况,即因我们在非主线程中的某些操作不当而产生了一个严重的异常,从而强制当前Activity被关闭。而在关闭的同时,却没能及时的调用dismiss来解除对ProgressDialog等的引用,从而系统抛出了标题中的错误,而掩盖了真正导致这个错误的异常信息。
解决方案:
重写Activity/Fragment的onDestroy方法,在方法中调用dismiss来解除对ProgressDialog等的引用。
7.问题描述:
Android判断是否能真正上网
普通方法不能判断外网的网络是否连接,比如连接上局域网
解决方案:
public static final boolean ping() {String result = null;try {String ip = "www.baidu.com"; // ping 的地址,可以换成任何一种可靠的外网Process p = Runtime.getRuntime().exec("ping -c 3 -w 100 " + ip); // ping网址3次// 读取ping的内容,可以不加InputStream input = p.getInputStream();BufferedReader in = new BufferedReader(new InputStreamReader(input));StringBuffer stringBuffer = new StringBuffer();String content = "";while ((content = in.readLine()) != null) {stringBuffer.append(content);}// ping的状态int status = p.waitFor();if (status == 0) {result = "success";return true;} else {result = "failed";}} catch (IOException e) {result = "IOException";} catch (InterruptedException e) {result = "InterruptedException";} finally {Log.d("----result---", "result = " + result);}return false;}
8.问题描述:
获取手机号码
解决方案:
private String getPhoneNumber() {TelephonyManager telephonyMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); return telephonyMgr.getLine1Number(); }
添加权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
9.问题描述:
lost serialVersionUID
在开发过程中,有时我们会遇到“The serializable class CommonException does not declare a static final serialVersionUID field of type long”这样的一个报警异常。类似下面这样的:
我们需要这个值的原因是我们要把这个值永久地保存在一个磁盘上,通常是一个文件中。还有一点是我们要把这个对象在网络中传输。
解决方案:
add上面的3 quick fixes available中的一个。通常是去add第二个。
10.问题描述:
如何隐藏底部状态栏(System Bar)
底部导航栏如下:
隐藏方式:
在onCreate中添加如下代码:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
11.问题描述:
获得屏幕在旋转过程中的旋转角度
这里我们获得的不只是横屏还是竖屏的问题。而是更细一点的区分,比如横屏中的是和左旋转了90度,还是向右旋转了90.解决方案如下:
WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
mRotation = manager.getDefaultDisplay().getRotation();
12.问题描述:
Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
安装新的Apk时,出现以上报错信息。这是是因为Manifest中的android:versionCode属性,手机里APP的versionCode高于将要安装的APP。
解决方案:
1.卸载原来的Apk
2.将当前的Apk的versionCode属性值修改到比手机中Apk的versionCode属性值大即可。
大家还可以参见一些Android其他的细节总结:
Android细节问题总结(一)
Android细节问题总结(二)相关推荐
- Android架构组件(二):LiveData
前言 上篇文章我们分析了Lifecycle的使用和原理,相信我们已经学会了用Lifecycle将你所需的类添加声明周期管理,如果只是寥寥阅读也没关系,这里奉上(双膝跪地)上篇地址,Android架构组 ...
- Android 天气APP(二十一)滑动改变UI、增加更多天气数据展示,最多未来15天天气预报
上一篇:Android 天气APP(二十)增加欢迎页及白屏黑屏处理.展示世界国家/地区的城市数据 前言 写APP是有很多细节需要处理的,这些细节可以提高你的APP的使用概率.这已经是第二十一篇文章 ...
- Android 天气APP(二十九)壁纸设置、图片查看、图片保存
上一篇:Android 天气APP(二十八)地图搜索定位 效果图 开发流程 一.前情提要 二.正式开发 1. 列表数据填充 2. 浮动按钮的交互 3. 其他优化 4. 运行效果图 三.文末 一.前情提 ...
- Android Linker详解(二)
Android Linker详解(二) Android Linker详解(二) 本文目的 So的链接 So重定位 总结 本文目的 接上篇Linker源码详解(一),本文继续来分析Linker的链接过程 ...
- android开发实验报告二,《Android 移动应用开发》实验报告-范本2(33页)-原创力文档...
实验1<Android活动的使用> 实验学时: 2 每组人数: 1 实验类型: 1 (1:基础性 2:综合性 3:设计性 4:研究性) 实验要求: 1 (1:必修 2:选修 3:其它) 实 ...
- Java IO在Android中应用(二):APK加固
Java I/O在Android中应用(二):APK加固套壳 前言(废话) 我,有两把键盘,第一把是Poker III(黑轴),第二把是Poker II(红轴).工作的时候我常用的是红轴的Poker ...
- Android Contextual Menus之二:contextual action mode
Android Contextual Menus之二:contextual action mode 接上文:Android Contextual Menus之一:floating context me ...
- Android studio使用心得(二)— 打包签名apk发布
1.-–Android Studio菜单 Build->Generate Signed APK 2.--Create new.. 3.---跟eclipse里面一样,添加keystore 信 ...
- Android多线程分析之二:Thread的实现
Android多线程分析之二:Thread的实现 罗朝辉 (http://www.cnblogs.com/kesalin/) CC 许可,转载请注明出处 在前文<Android多线程分析之一:使 ...
最新文章
- android jni ndk 视频分享
- Linux下安装Elasticsearch6.x
- 基于C#在Mongodb的Skip-Limit和Where-Limit的分页对比 并且含mongodb帮助类的源码
- 搭建分布式FastDFS集群
- chrome 插件 页面请求转发_使用chrome扩展程序及jsonp实现跨域访问
- 【知识图谱】本周文献阅读笔记(3)——周二 2023.1.10:英文)知识图谱补全研究综述 + 网络安全知识图谱研究综述 + 知识图谱嵌入模型中的损失函数 + 图神经网络应用于知识图谱推理的研究综述
- select函数介绍
- 计算机网络 FDM TDM
- 热点推荐:程序员“奇葩”说
- 400 (Bad Request)错误的解决方法
- Blackbox_exporter概述
- 更换matlab版本需要注意事项,AMD 篇四:更换Matlab调用MKL库版本
- MySQL中定时任务的使用
- 计算几何——向量的叉乘、点乘、夹角
- java健康检查代码_SpringBoot实现项目健康检查与监控
- LabVIEW编程LabVIEW开发欧姆龙E5CC温控器 例程与相关资料
- 英语句子成分分析(三)--主(语)+系(动词)+表(语)
- 中国大学MOOC-陈越、何钦铭-数据结构-2019秋期末考试
- javascript学习笔记整理
- MySQL服务器时间同步问题
热门文章
- C++ Primer 5th笔记(chap 15 OOP)访问控制与继承
- [ACTF新生赛2020]fungame
- 【Python植物大战僵尸军团来袭】“大家快醒一醒、一大波僵尸来了”
- 00-深入学习cache
- 3-Arm CPU Specific Build Macros
- Windows RDP协议 Fuzzing 漏洞挖掘研究
- 1.7 Character类
- 【PAT乙级】1083 是否存在相等的差 (20 分)
- 项目: 用数组实现反弹球消砖块
- 如何转载别人的CSDN文章