注意实体按键和虚拟按键的区别
使用的是android4.2版本,硬件:mt6589

以下操作都需要root权限!

关闭实体按键功能

包括:菜单,返回,home,最近

使用root文件管理器,如RE文件管理器
/system/usr/keylayout/Generic.kl文件中搜索menu,
注意搜索结果应该是只有menu这一个单词,而不是包含menu的单词

搜索到后在这一行的开头,添加上一个英文的符号:‘#’
也就是把这一行注释掉的意思!

返回键:back
同理、同上

我的手机菜单,home,返回键所对应的键值为(仅供参考):

1
2
3
139    MENU
158 BACK
172 HOME

修改之后保存重启手机、被你注释掉的对应的实体功能键就失效了,点击没有任何反应
如果不成功可以尝试注释掉其他的行

这只是关掉功能、但背光灯还是会亮的

阅读全文 »

linux和win下的oracle不同、开机后不能直接使用
经过一段时间摸索、终于大体摸清了linux下oracle的数据库启动流程
所以自己动手写了几个shell脚本、省的每次都要输一堆命令来启动数据库、启动监听、启动em。。
不同的数据库安装和不同的系统可能有较大的差异、不能保证都能用

启动数据库

1
2
3
#!/bin/sh
echo 打开数据库
echo startup|sqlplus "/as sysdba"

关闭数据库

1
2
3
#!/bin/sh
echo 关闭数据库
echo shut|sqlplus "/as sysdba"

启动监听

1
2
3
#!/bin/sh
echo 打开监听
lsnrctl start

关闭监听

1
2
3
#!/bin/sh
echo 关闭监听
lsnrctl stop

打开em

阅读全文 »

搜了点网上的资料、发现都是修复MBR分区的、我的电脑是GPT分区+UEFI、虽然不同、但也大同小异、
出现grub rescue模式一般是硬盘分区出现变动、导致旧的grub找不到启动文件而出现的、

错误提示

今天开机是出现了这样的提示:

1
2
3
error:file'/grub/x86_64-efi/normal.mod'not found
entering rescue mode...
grub rescue>

大概意思是那个路径下normal.mod文件找不到、从而进入了grub rescue模式
那么在grub rescue 模式下应该怎么修复呢?
首先使用set 命令只看当前错误的grub变量、下面是我的电脑的信息

1
2
3
4
5
6
set

#返回信息是:
cmdpath=(hd0,gpt1)/EFI/Deepin 2014.2
prefix=(hd0,gpt10)/grub
root=hd0,gpt10

数据分析

那么我们开分析下这些数据、首先cmdpath指向的是UEFI的启动文件、
这个应该不会错、因为硬盘第一分区一般都是EFI分区、并且目录“Deepin 2014.2”也不会出错

所以就应该是prefix和root变量出错了、并且是”gpt10”这个指向的分区出错了、
这就好办了、只要找到并修改为正确的分区应该就行了

接着使用ls命令来查看当前硬盘上有哪些分区:

1
2
3
4
ls

//返回信息是:
hd0,gpt1 hd0,gpt2 hd0,gpt3 hd0,gpt4 hd0,gpt* .......

接下来就该测试到底那个分区才是正确的启动分区、我的linux的boot分区是单独挂出来的
我们先往上看那个prefix变量、它指向一个分区下的grub目录、
那么我们就用这个目录来测试看那个分区中包含grub目录、
只要包含这个目录那么基本上就可以确定那个分区就是正确的启动分区了、也就是boot分区

查找正确分区

阅读全文 »

同步CM10.1到99%出现错误:
error: Cannot fetch CyanogenMod/Android external svox

或者是这样的提示:
repo sync Repository unavailable due to DMCA takedown

解决办法:

repo init后
修改 .repo/manifests/default.xml

<project path="external/svox" name="CyanogenMod/android_external_svox"/>
替换修改为
<project path="external/svox" name="platform/external/svox" remote="aosp" revision="refs/tags/android-4.4.4_r2"/>

注意红色文字部分、那是你同步的版本号

如果不确定应该改为多少、就搜索aosp、会发现每一个搜索结果中的行里都有一个类似的语句、

把这句里的版本号改为你搜索到的那些版本号就行了

先说两种客户端发送http到服务端、然后再说服务端如何处理

客户端

首先客户端有两种方式可以发送http请求
当然还有其他方式,这里只讨论这两种方式:

doget方式

客户端中先使用“url?name1=value1&&name2=value2&&….”来new出HttpGet的对象
使用HttpClient的对象:deafultHttpClient来发送HttpGet的对象到服务端、同时将会获得服务器返回的HttpResponse对象、
接着HttpResponse对象调用getEntity()来获取服务端发送过来的信息

dopost方式

客户端先使用URL来new出HttpPost的对象
接着使用NameValuePair来保存要传递的Post的参数
可以使用集合框架、例如new一个List的对象params、并使用其add(new BasicNameValuePair("name","value"))方法来将数据保存起来、

此时还不能直接发送、要将params放到HttpPost的对象中才行、然而List类型的params并不能直接被放置到HttpPost

需要转换成另一种类型的数据:HttpEntity、在转换的同时还可以设置一下编码:

1
HttpEntity httpEntity=new UrlEncodedFormEntity("params","GB2312");

将数据参数放置到HttpPost中:

1
httpPost.setEntity(httpEntity);

阅读全文 »

原因以及解决方法:

核心方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public static void main(String[] args) throws Exception{

FileReader fr=new FileReader("test.txt");
FileWriter fw=new FileWriter("test2.txt");

/*
int b=0;
while(b!=-1){
b=fr.read();
System.out.print("-"+(char)b);
fw.write(b);
}
用这种方法会比下面的方法在最后的文本后面多出一个乱码'?'
因为当读取到最后一个字符时,b此时还不等于-1,判断后会接着读取
下一个字符,但在上一次读取时已读取到最后一个字符,所以这次
就什么都读取不到(产生乱码),并返回-1,结束循环
*/

int b;
while((b=fr.read())!=-1){

System.out.print("-"+(char)b);
fw.write(b);
      //这个方法的优点在于它会在读取的同时判断是否执行方法体
}
fr.close();
fw.close();
}

手动敲一遍、算是加强记忆吧~

/:文件系统的入口,也是最高一级的目录

/bin:最基本的且着急用户和普通用户都可以使用的命令放在此目录下,如:ls、cp等

/boot:存放Linux的内核及引导系统所需要的文件,包括引导装载程序

/etc:存放系统配置文件,一些服务器的配置文件也放在这里

/dev:存放所有的设备文件,比如声卡、磁盘等

/home:包含普通用户的个人主目录,如/home/lisi

/lib:包含二进制文件的共享库

/media:即插即用型存储设备如U盘、光盘等的自动挂载点在此目录下创建

/mnt:用于存放临时性挂在存储设备,如光驱可挂载到/met/cdrom下

阅读全文 »

为什么要使用startActivityForResult

大家都知道startActivity()是用来切换跳转Activity的,如果想要在另个Activity中出书数据的话,只需要在源activity中使用intent.putExtra()方法传出数据,在对应activity中使用intent.get**Extra()方法接收数据就行了

那么startActivityForResult()方法呢,它也是用来带数据跳转activity的,可是这两个方法具体有什么区别呢?
这就要说说带数据跳转的方向了,

第一个方法只能把数据发送过去,可是如果子activity需要再传送回一些数据呢?
你可能会说,在子activity中使用intent.putExtra()方法把数据写入,在父activity中写入get*方法就行了嘛,

可是,这个父activity中的get方法要写在哪儿呢?写在onCreate方法中?

那么问题就来了,如果你在父activity中的onCreate方法中写入了get*方法来读取(获得)数据,

那么就意味着你一启动父activity就会执行get*方法(因为第一个执行的方法就是onCreate),而父activity是主方法,它必定是程序第一个执行的activity,

也就是说,此时还没有执行子activity,也就没有数据通过intent传过来,所以在执行onCreate时,执行到get*方法时就会读不到任何数据,

而且还会在每次启动activity时,不管需不需要从子activity接受数据都多此一举的执行一遍get*方法,来获取数据,

这样虽然可以实现从子activity中得到返回的数据,但却是不理想的,不正确的

阅读全文 »

虽然有eclipse等强大的IDE工具、但有时不可避免的需要用命令行来手动编译和执行java程序、
最近我就碰到的这样的问题、突然感觉编译和执行时都要敲一遍java或class文件的名字、这样好麻烦、

碰巧刚刚学习了下dos系统和批处理、所以就想自己写一个批处理.bat、来省事点、
虽然不复杂、但初次写批处理还是被某些问题难住了、不过黄天不负有心人、最终还是写出来了:

把下面的两段代码分别复制、打开记事本、粘贴进去、保存为后缀为:”.bat”的文件、

然后把这两个.bat文件随意放在电脑上的任何地方、比如桌面上(建议放在桌面上)、
以后需要手动编译和执行 java时、先把选中的java文件拖到MyJavac.bat文件上、

这里假设我将第一段代码保存为了MyJavac.bat文件,下同MyJava.bat、
就会自动编译生成class文件到java文件所在目录了、

然后再选中需要执行的class文件将其拖到MyJava.bat文件上、就会批量执行了、

这两个小程序都是最多支持9个java或class文件同时编译和执行、

本来打算将编译和执行和在一起呢、但是想了想、还是这样分开比较好、

下面是代码:

批量编译MyJavac:

1
2
3
4
5
@echo off
echo.
for %%i in (%1 %2 %3 %4 %5 %6 %7 %8 %9) do (%%~di && cd %%~dpi && javac %%i && if %errorlevel%==0 echo %%~nxi编译完成 )
echo.
pause

阅读全文 »