Android Java(2015-6-18 15:28、2016-1-30 21:18、2016-5-31 11:20)

20190729添加:
HsqdeMac:javaalgorithm hsq$ java -version
java version "12.0.2" 2019-07-16
Java(TM) SE Runtime Environment (build 12.0.2+10)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)
HsqdeMac:javaalgorithm hsq$ svn checkout https://dell/svn/hxh/Java/JavaAlgorithm --username hanxiaohua
HsqdeMac:javaalgorithm hsq$ mv *.java sample2;
Sample1_1.java:49: 错误: 编码 utf-8 的不可映射字符
HsqdeMac:sample hsq$ javac -encoding gbk Sample1_1.java
HsqdeMac:~ hsq$ ruby -e "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install)"
HsqdeMac:~ hsq$ brew search go
HsqdeMac:~ hsq$ brew install [email protected]
HsqdeMac:~ hsq$ vim ~/.bashrc
HsqdeMac:~ hsq$ source ~/.bashrc
HsqdeMac:~ hsq$ go env

root@localhost:/home/hxh# svn checkout https://dell/svn/hxh/Java/search_Java --username hxhdell
armhf架构的JDK
root@localhost:/home/hxh/search_Java/ver1.2# sudo apt-cache search jdk
root@localhost:/home/hxh/search_Java/ver1.2# sudo apt-get install openjdk-8-jdk
root@localhost:/home/hxh/search_Java/ver1.2# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-8u212-b01-1~deb9u1-b01)
OpenJDK Client VM (build 25.212-b01, mixed mode)
root@localhost:/home/hxh/search_Java/ver1.2# javac HelloworldApp.java
root@localhost:/home/hxh/search_Java/ver1.2# java HelloworldApp
Hello,this is a simply test!
100
0
1
2
3
4
5
6
7
8
9

20160531添加:
Android的Message机制主要涉及到三个主要的类,分别是Handler、Message、Looper。
framework\CCJNIHandler.java
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
一、介绍三个相关的类
1、 Handler主要有两个用途:
首先是可以定时处理或者分发消息,
其次是可以添加一个执行的行为在其它线程中执行,
对于Handler中的方法,可以选择你关心的操作去覆盖它,处理具体的业务操作,常见的就是对消息的处理可以覆盖handleMessage方法,可以根据参数选择对此消息是否需要做出处理,这个和具体的参数有关。例如下代码:
 // ===========================================================
 // Methods
 // ===========================================================
 public Handler handler = new Handler() {
  public void handleMessage(Message msg) {//覆盖handleMessage方法
   switch (msg.what) {//根据收到的消息的what类型处理
   case CCJNIHandler.HANDLER_SHOW_MESSAGEBOXYESORNO: {
    showDialog(msg);
    break;
   }
   case CCJNIHandler.HANDLER_RUN_DOWNLOAD: {
    runDownload(msg);
    break;
   }
   case CCJNIHandler.HANDLER_THREAD_UPDATE: {
    UpdateMessage updateMsg = (UpdateMessage) msg.obj;
    DecimalFormat df1 = new DecimalFormat("00.00%");
    double x = updateMsg.current * 1.0;
    double y = updateMsg.max * 1.0;
    String ratio = df1.format(x / y);
    Log.e("debug", "handleMessage.ratio=" + ratio);
    mProgress.setProgress((int) (x / y));
    mProgress.setMessage("已经更新:" + getAB(updateMsg.current) + "/"
      + getAB(updateMsg.max) + " (" + ratio + ")");
    break;
   }
   case CCJNIHandler.HANDLER_TENCENT_SHARE:{
    TencentShare(msg);
    break;
   }
   }
  }
 };

20161013添加:
勾选应用程序|开发|USB调试,点击【装载】,则可以在电脑上看到手机上内部SD卡2.86GB的可用空间。
隐私权|恢复出厂设置
SD卡和手机存储|手机内存0.94GB

1、三星 I809 刷机包 2.2.3 ROM
历趣ROM分享:
1.使用最新三星官方FC16精简制作
2.全部APK经过deodex和zipalign
3.电池美化精确到1%
4.修改相机为无声相机
5.修改增加全局背景
6.拨号键盘背景透明,短信背景透明,通知栏透明
7.增加几个铃声,修改默认铃声为IPHONE风格
8.替换开机,关机画面为三星韩版风格
9.增加几个小工具(re管理器,搜狗输入法,墨迹天气,天翼空间)
10.修改默认的主屏幕底部4个应用为5个应用,可以进入应用程序编辑增加一个
11.应用程序背景透明,支持显示壁纸背景,并且应用程序图标背景透明
12.增加番茄壁纸图库,50张精选壁纸!
刷机方式:
使用Odin3刷机
ROM已经集成双WIPE,刷机完成不需要恢复出厂设置
请在刷机前备份个人资料和程序
只需单刷PDA即可
刷机方法:进入download模式(关机状态下按住3键,音量下,HOME,电源)打开odin刷PDA即可
注意事项:ROM集合了双wipe,刷机之前记得备份数据和资料,避免刷机以后丢失个人资料
2、三星 i809 刷机包 2.3.6 ROM Root美化透明精简线刷版
3、三星 i809 2.2 ROM刷机包 LIDROID EK18 V1 【力卓】
ROM介绍:
1、默认采用lidroid kernel for I809 v1,支持voodoo lagfix
2、集成root,提供RootExplorer汉化版本。
3、修改了拨号的布局,将原来的删除键移到了下面,方便操作。
4、短信增强版,支持全屏手机报,并提供两种彩信阅读方式。
5、系统工具箱V3.6,全新的UI风格,支持批量备份恢复、批量安装卸载及程序禁用、翻转静音、自启管家、自动飞行、个人信息备份、装机必备、省电模式、屏幕截图、条码扫描等功能。
6、提供力卓超级挂载,可以将你外置SD卡lidroid目录中的内容扩展到/sdcard目录,让你不再为玩导航玩游戏发愁。
7、电量百分比显示。
8、默认使用TouchWiz 4.5,在2.2上TouchWiz 4.5表现稳定,显示效果更佳,流畅度大大优于TouchWiz 3.0。
时间比较短,更多的修改留待下个版本再做吧,最近同步一份AOSP 2.2的代码下来调试,将会增加IOS风格的设置界面、多种锁屏,下拉开关以及主题支持需要测试之后才能知道是否可以支持。

20160130-20160206添加:
三星i809 2.2.3实现GSM上网
——关键是得到i809的G网补丁
开始操作,实现G网上网:
A. 首先,下载我提供的“实现G网上网全部文件.rar”压缩包
B. 将压缩包解压,得到telephony.db、twframework-res.apk、framework.jar、services.jar、gsmtelephony_46000.db、gsmtelephony_46002.db、gsmtelephony_4607.db七个文件。
C. 请根据你的手机号前三位,然后选择gsmtelephony_46000.db、gsmtelephony_46002.db、gsmtelephony_4607.db其中的一个文件,并将文件名改为gsmtelephony.db
D. 手机连接USB,将telephony.db、twframework-res.apk、framework.jar、services.jar、gsmtelephony.db五个文件拷贝到手机的sdcard目录下。
接下来用手机操作(i809要先利用百度手机助手下载超级Root大师ROOT),打开RE管理器这个程序,点击【读/写】按钮(ROOT之后才会有这个按钮):
A. 把twframework-res.apk、framework.jar、services.jar复制进/system/framework/,覆盖同名文件,然后重新启动手机。
B. 把telephony.db和gsmtelephony.db复制进/dbdata/databases/com.android.providers.telephony/,覆盖同名文件。

复制覆盖这5个文件后,权限更改为原来的权限。
C. 退出RE管理器,重启手机。


Win8.1/XP下i809 Android2.2.3刷机成2.3.6、2.2.3
工具原料:
0、数据线
1、F:\soft\SAMSUNG_USB_Driver_for_Mobile_Phones\SAMSUNG_USB_Driver_for_Mobile_Phones.exe
2、F:\soft\三星I809_2.3.6_FG05.tar_liqucn.com\NG1128-I809-FG05.tar.md5
3、Odin3 v1.85
Added!!
Enter CS for MD5..
Check MD5.. Do not unplug the cable..
Please wait..
NG1128-I809-FG05.tar.md5 is valid.
Checking MD5 finished Sucessfully..
Leave CS..
Odin v.3 engine (ID:3)..
File analysis..
SetupConnection..
Initialzation..
Get PIT for mapping..
Firmware update start..
cache.rfs
NAND Write Start!!
factoryfs.rfs
modem_qsc6085.bin
Copy modem binary from AP to QSC.
Please wait about 3 min.
Copy done
zImage
dbdata.rfs
modem.bin
Sbl.bin
RQT_CLOSE !!
RES OK !!
Completed..
All threads completed. (succeed 1 / failed 0)
Removed!!
Added!!

不要用3.0.7这个版本
Odin3 v3.07
Added!!
Enter CS for MD5..
Check MD5.. Do not unplug the cable..
Please wait..
NG1128-I809-FG05.tar.md5 is valid.
Checking MD5 finished Sucessfully..
Leave CS..
Odin v.3 engine (ID:3)..
File analysis..
SetupConnection..
Initialzation..
Get PIT for mapping..
Firmware update start..
cache.rfs
NAND Write Start!!
factoryfs.rfs
modem_qsc6085.bin
三星i809
2011.4上市
4英寸,800*480像素
CPU:单核1GHz
运行内存RAM:512MB【内存管理器中显示147MB/339MB】
机身存储ROM:4GB
ROM容量=系统空间(占用几百MB-2GB)+用户安装程序空间(2GB)+用户存储空间(不到1GB)
20160125添加:
应用宝关于手机
处理器:ARMv7 Processor rev2(v7l)
内存:328M
屏幕分辨率:800*480
手机串号:A0000030D850F9
手机内存:1GB
SD存储卡:2.69GB

手机内存1.00GB,剩余627.11MB
SD卡空间2.69GB,剩余819.25MB
功能:判断Android手机是否Root
测试结果:三星i809和模拟器均显示已Root,小米2S显示未Root
i809恢复出厂设置
为了安全起见,您的手机已设置为禁止安装不是从Android电子市场中获取的应用程序。
【设置】【取消】

在授权管理里面清除Root权限,i809显示未Root
MacAddr:50:CC:F8:7F:CD:9F
AndroidID:9774d56d682e549c(刷成2.3.6后,变为b455b80d14e7f14f)
代码如下:
import java.io.File;
 private final static int kSystemRootStateUnknow=-1;
    private final static int kSystemRootStateDisable=0;
    private final static int kSystemRootStateEnable=1;
    private static int systemRootState=kSystemRootStateUnknow;
 // 查找是否有su文件来判断一个手机是否Root
 public static boolean isRootSystem() {
  if (systemRootState == kSystemRootStateEnable) {
   return true;
  } else if (systemRootState == kSystemRootStateDisable) {

   return false;
  }
  File f = null;
  final String kSuSearchPaths[] = { "/system/bin/", "/system/xbin/",
    "/system/sbin/", "/sbin/", "/vendor/bin/" };
  try {
   for (int i = 0; i < kSuSearchPaths.length; i++) {
    f = new File(kSuSearchPaths[i] + "su");
    if (f != null && f.exists()) {
     systemRootState = kSystemRootStateEnable;
     return true;
    }
   }
  } catch (Exception e) {
  }
  systemRootState = kSystemRootStateDisable;
  return false;
 }
或者
 /**
     * 判断当前手机是否有ROOT权限
     * @return
     */
    public boolean isRoot(){
        boolean bool = false;

        try{
            if ((!new File("/system/bin/su").exists()) && (!new File("/system/xbin/su").exists())){
                bool = false;
            } else {
                bool = true;
            }
            //Log.d(TAG, "bool = " + bool);
        } catch (Exception e) {

        }
        return bool;
    }

20151221添加:
用Android SDK Manager下载Documentation for Android SDK,API 19,revison 2、Documentation for Android SDK,API 23,revison 1
F:\adt-bundle-windows-x86_64-20130729\sdk\docs\reference\android\hardware\usb\UsbDevice.html
Android输入事件介绍
http://wenku.baidu.com/link?url=ZNzx2xocQOjOsJU2FaW1rKulZFPchLGPemxVojxO95j_3dhuc00XO961uOC07vGFikIi0KeUZydVvJDECdeAee1RWZKQUS4bEcrrdMSf3hW
输入事件介绍
1.输入
2.读取
3.派发
Key Dispatch
Sensor Dispatch
4.应用
按键、鼠标、触控输入事件的响应
Override以下函数:
onKeyDown
onKeyUp
onKeyLongPress
onKeyMultiple
onGenericMotionEvent
dispatchGenericMotionEvent
dispatchTouchEvent
为控件注册Listener函数:
setOnKeyListener onKey
setOnClickListener onClick
setOnGenericMotionListener onGenericMotion
setOnHoverListener onHover
5.系统键
6.虚拟输入

Android应用程序中事件处理
http://wenku.baidu.com/view/5e567b74f242336c1eb95e80.html?re=view
Android应用程序输入事件处理机制
http://wenku.baidu.com/view/c920ace5b0717fd5370cdc26.html?re=view#
Android事件处理模型
http://wenku.baidu.com/view/b75706808762caaedd33d4e3.html?re=view
Android平台的事件处理机制有两种,一种是基于回调机制的事件处理,一种是基于监听接口的事件处理。
Android事件处理过程剖析
http://wenku.baidu.com/view/96a75e264b35eefdc8d3337f.html?re=view
Android系统中由Window Manager Service来管理不同的View。对于键盘这类事件也是由这个服务来分发给不同的View。这个服务会通过KeyInputQueue.java文件中定义的服务来负责接收来自硬件模拟层的事件。
Key Input Queue负责在Android运行期间检测键盘、触摸屏、轨迹球事件,并将事件发送给应用程序。
键盘等事件检测在KeyInputQueue.java中,启动一个线程通过死循环来不停的以JNI方式调用com_android_server_KeyInputQueue.cpp中的readEvent方法来检测是否有事件发生。
对于这类事件如何分发给不同的应用程序则是由KeyInputQueue的继承类InputDispatcherThread来实现。该类定义在WindowManagerService.java中。
InputDispatcherThread从KeyInputQueue类中读取事件并分发给上层应用程序。键盘事件由dispathKey发送,触摸事件由dispathPointer发送,轨迹球事件由dispathTrackball发送。
在这个过程中对于一些特殊按键的由PhoneWindowManager类来处理,比如关闭系统,声音调节等。

Android usb host读写USB设备
自Android 3.1以后Android增加了操作USB设备的API。
http://www.android100.org/html/201406/06/20142.html
当你的Android设备在USB主机模式中时,它作为USB主机给从属设备供电,并会列举被连接的USB设备。
USB主机模式在Android3.1以后开始被支持。
下表介绍了在Android.hardware.usb包中的USB主机模式API。
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbEndpoint;
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.hardware.usb.UsbRequest;

UsbManager用于列举被连接的USB设备,并跟其通信。
UsbDevice代表了一个被连接的USB设备,并且包含了访问它的识别信息、接口和端点的方法。
UsbInterface代表了USB设备的接口,该接口定义了设备的一组功能。一个设备可以有一个或多个用于通信的接口。
UsbEndpoint代表一个接口端点,它是跟接口通信的通道。一个接口可以有一个或多个端点,通常会有跟设备进行双工通信的输入和输出端点。
UsbDeviceConnection代表一个设备连接,它在端点之上传输数据。这个类用于在连接的两个设备间使用同步或异步的方式来回发送数据。
UsbRequest代表一个通过UsbDeviceConnection对象跟设备通信的异步请求。
UsbConstants定义了Linux内核中linux/usb/ch9.h文件定义对应的USB常量。
Android清单要求(AndroidManifest.xml):

把应用程序的最小SDK设置为API level 12或更高的版本。在较早的API版本中不存在USB主机模式API。
Android 2.3.1 'Gingerbread'(API level 9)
Android 3.1 'Honeycomb'(API level 12)
Android 4.1 'Jelly Bean'(API level 16)【小米2S上Android版本4.1.1】
Android 4.2 'Jelly Bean'(API level 17)
Android 4.4 'Kit Kat'(API level 19)【TV上Android版本4.4.2】

官网地址:http://developer.android.com/guide/topics/connectivity/usb/host.html
读写数据:
UsbInterface usbInterface = usbDevice.getInterface(0);//USBEndpoint为读写数据所需的节点
UsbEndpoint inEndpoint = usbInterface.getEndpoint(0);//读数据节点
UsbEndpoint outEndpoint = usbInterface.getEndpoint(1);//写数据节点
UsbDeviceConnection connection = usbManager.openDevice(usbDevice);
connection.claimInterface(usbInterface, true);

//发送数据

byte[] byte2 = new byte[64];

int out = connection.bulkTransfer(outEndpoint, cmd, cmd.length, 3000);

//读取数据1 两种方法读取数据
int ret = connection.bulkTransfer(inEndpoint, byte2, byte2.length, 3000);
Log.e("ret", "ret:"+ret);
for(Byte byte1 : byte2)
{
System.err.println(byte1);

}
//读取数据2【现在的项目采用这种方法,inMax=64】
/*int outMax = outEndpoint.getMaxPacketSize();
int inMax = inEndpoint.getMaxPacketSize();
ByteBuffer byteBuffer = ByteBuffer.allocate(inMax);
UsbRequest usbRequest = new UsbRequest();

usbRequest.initialize(connection, inEndpoint);
usbRequest.queue(byteBuffer, inMax);
if(connection.requestWait() == usbRequest){

byte[] retData = byteBuffer.array();
for(Byte byte1 : retData){

System.err.println(byte1);
}
}*/
}

首先得到可以操作USB设备的节点Endpoint,0为读数据节点,1为写数据节点。【现在的项目只用到了0节点】
然后使用connection.bulkTransfer(endpoint, buffer, length, timeout) 发送数据。
我这里读数据的时候有两种方法,读数据1和读数据2
注意:写数据时传入的是写数据节点OutEndpoint,读数据时传入的是读数据节点InEndpoint。
代码下载:http://download.csdn.net/detail/centralperk/5743323



chap3 Android游戏开发基础
3.3五种数据存储方式
文件存储
SQLite数据库方式
内容提供器(ContentProvider)
SharedPreferences
网络
3.3.1最容易掌握的SharedPreferences存储
SharedPreferences以键值对方式存储。
SharedPreferences是Android平台上一个轻量级的存储类,可以保存Android平台中的Long长整型、Int整型、String字符串型数据。
在两个Activity之间,除了可以通过Intent来传递数据,还可以用SharedPreferences共享数据的方式实现数据传递。
3.3.2文件存储
方法openFileInput()和openFileOutput()只能读取该应用目录下的文件。
附加写入模式为Content.MODE_APPEND。
如果需要在不同的应用中共享数据,可以使用ContentProvider实现。
可以将额外的资源文件(如mydatafile.mp3文件)放在应用程序的/res/raw/目录下,此时就可以在应用程序中使用getResource获取资源,然后用openRawResource()方法打开这个文件。
3.3.3最常用的SQLite存储
它是一个轻量级的嵌入式数据库。SQLite是Android自带的一个标准的数据库,支持统一的SQL语句。
3.3.4重要的ContentProvider存储
(1)ContentResolver接口
(2)ContentProvider和ContentResolver中的URI
3.3.5网络存储
Android SDK 1.0以后不再支持XMPPService,而且访问Web Service的API全部变更。
3.4 I/O文件操作
流可以分为字节流和字符流两种。
1.字节流
InputStream、OutputStream及其子类FileInputStream、FileOutputStream
2.字符流
字节流是不能处理中文的,但是字符流可以处理中文。
FileReader、FileWriter

chap4平面世界
本章将详细讲解在Android系统中使用Graphics类处理二维图像的知识。
4.1绘图类Graphics
它有很多子类,通过这些子类可以实现不同的功能,它们分别是:
Color类
Paint类
Canvas画布
Rect矩形类
NinePatch类
Matrix类
Bitmap类
BitmapFactory类
Typeface类
Shader类
4.8使用位图操作类Bitmap
类Bitmap的完整写法是Android.Graphics.Bitmap,此类能够对位图实现基本操作。
其中最为常用的是如下8个方法。
compress压缩一个Bitmap对象,根据相关的编码、画质保存到一个OutputStream中。其中第一个压缩格式目前有JPG和PNG
copyPixelsFromBuffer从一个Buffer缓冲区复制位图像素
copyPixelsToBuffer将当前位图像素内容复制到一个Buffer缓冲区
getHeight获取高度
getWidth获取宽度
hasAlpha是否有透明通道
setPixel设置某像素的颜色
getPixel获取某像素的颜色
4.8.1 Bitmap类的功能
1.从资源中获取位图
可以使用BitmapDrawable或者BitmapFactory来获取资源中的位图。首先需要获取资源:
Resources res=getResources();
(1)使用BitmapDrawable获取位图
(1)使用BitmapFactory获取位图
2.获取位图的信息
在Bitmap中对RGB颜色格式使用Bitmap.Config定义,仅包括ALPHA_8、ARGB_4444、ARGB_8888、RGB_565,缺少了一些其他元素,如RGB_555。
Android SDK只支持PNG、JPG格式的压缩,其他格式的需要Android开发人员自己的补充。
3.显示位图
可以使用核心类Canvas来显示位图,通过Canvas类的drawBitmap()显示位图,或者借助BitmapDrawable类来将Bitmap绘制到Canvas。

chap10让游戏和网络接轨
10.1Socket基础
Socket通常也称为套接字,用于描述IP地址和端口,它是网络通信过程中端点的抽象表示(通讯端点)。
Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务器端。
10.1.2 Socket基础
Socket的通信过程
创建Socket
其中address、host、port分别是双向连接中另一方的IP地址、主机名和端口号;
stream指明Socket是流Socket还是数据报Socket;
localPort表示本地主机的端口号,localAddr和bindAddr是本地机器的地址(ServerSocket的地址);
impl是Socket的父类,既可以用来创建ServerSocket,又可以用来创建Socket。
0~1023的端口号为系统所保留,一些常用的服务及对应的Service Port如下:
Service|Servicse Port
HTTP|80
FTP|21、3721、2121
Telnet|23
SMTP|25
DNS|53
TFTP|69
SNMP|161
TCP|6
UDP|17
10.1.3 ServerSocket基础
ServerSocket用来表示双向连接的服务器端。
参数port指定服务器要绑定的端口(服务器要监听的端口),参数backlog指定客户连接请求队列的长度,参数bindAddr指定服务器要绑定的IP地址。
如果把参数port设为0,表示由操作系统来为服务器分配一个任意可用的端口。由操作系统分配的端口也称为匿名端口。
1.设定绑定的IP地址
bindAddr参数可以显示指定服务器要绑定的IP地址,该构造方法适用于具有多个IP地址的主机。
2.默认构造方法的作用
允许服务器在绑定到特定端口之前。先设置ServerSocket的一些选项。
10.1.4Socket和ServerSocket应用
1.实现UDP通信
UDP通信是通过使用DatagramSocket、DatagramPacket对象来实现通信的。
2.实现TCP通信
TCP是使用Socket、ServerSocket、InputStream、OutputStream对象实现通信的。
10.2 HTTP基础
HTTP协议是建立在TCP协议之上的一种应用。
10.2.2 Android中的HTTP
在Android平台中,提供了如下3种HTTP通信接口。
Java标准接口:java.net
Apache接口:org.apache.http
Android网络接口:android.net.http

chap4 Android游戏开发之数据存储和传感器
4.1.1私有文件夹文件的写入与读取
在Android平台下,一个应用程序中所有的数据都是私有的,只对自己是可见的。
除了存放私有数据的文件夹外,应用程序也具有SD卡的写入权限。
Android平台支持Java平台下的文件I/O操作,主要使用FileInputStream和FileOutputStream这两个类来实现文件的存储与读取。
4.1.2读取Resources和Assets中的文件
来自Resources和Assets中的文件只可以读取而不能够进行写操作。
4.1.3轻量级数据库SQLite简介
Android平台提供了对创建和使用SQLite数据库的支持,其装载了sqlite3组件,任何一个SQLite数据库对于创建该数据库的应用程序来说都是私有的。
4.1.5数据共享者——Content Provider的使用
4.1.6简单的数据存储——Preferences的使用
4.2Android平台下传感器应用的开发
Android平台下的传感器包括加速度传感器、姿态传感器、磁场传感器和光传感器等。
4.2.1传感器应用开发流程
1、创建SensorManager对象
2、实现SensorListener接口
3、注册SensorListener
chap5Android游戏开发之网络编程
5.1基于Socket套接字的网络编程
5.2基于HTTP协议的网络编程
5.2.1通过URL获取网络资源
5.2.2在Android中解析XML
Android中解析XML 的方式有两种:
一种叫DOM,另一种叫SAX。

Chap6字符串
6.1创建字符串
String类即字符串类型,并不是Java的基本数据类型,但可以像基本数据类型一样使用,用双引号括起来进行声明。常用的构造方法如下:
1、String()
一个String对象,可表示一个空字符序列。
2、String(char a[])
用一个字符数组a创建String对象
3、String(char a[],int offset,int length)
提取字符串数组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度。
6.2.1字符串连接 
主要有连接多个字符串和连接其他数据类型两种不同的操作。
1、多个字符串连接
用+相连,+就是字符串的连接符,连接之后生成一个新的字符串。
2、连接其他数据类型
同样使用+连接符
6.2.2获取字符串信息
1、获取字符串长度
length()方法
2、获取指定字符的索引位置
indexOf()方法返回的是搜索的字符首次出现位置的索引,而lastIndexOf()方法返回的是搜索的字符最后出现位置的索引。
indexOf()方法
如果没有检索到字符串s,返回-1。
lastIndexOf()方法
如果没有检索到字符串s,返回-1。
lastIndexOf(“”)返回的结果与length()返回的结果相同。
3、获取指定索引位置的字符
charAt()
6.2.3去除字符串中的空格
1、去处字符串的前导、尾部空格
trim()
2、去除字符串中的所有空格
StringTokenizer()方法利用分割和追加实现去除空格的目的。
replaceAll()方法是将空格用“”替换,以达到去除字符串中空格的目的。
6.2.4字符串替换
1、replace()方法
该方法用于替换所有与指定字符串相匹配的字符串。
2、replaceFirst()方法
该方法用于替换第一个出现的指定字符串,而后面出现的指定字符串则不会被替换。
6.2.5判断字符串
1、判断字符串是否相等
equals()方法对字符串比较是严格区分大小的
equalsIgnoreCase()方法是在忽略大小写的情况下比较两个字符串是否相等。
2、判断字符串的开始与结尾
startsWith()方法用于判断当前字符串对象是否以参数指定的字符串开始。
endsWith()方法用于判断当前字符串对象是否以参数指定的字符串结尾。
6.2.6字母大小写转换
1、toLowerCase()方法将字符串中的大写字母转换为小写字母。
2、toUpperCase()方法将字符串中的小写字母转换为大写字母。
6.2.7字符串分割
split(String sign)方法根据指定的分割符对字符串进行完全分割。
split(String sign,int limit)方法根据给定的分割符对字符串进行分割,并限定拆分的份数。
6.3格式化字符串
6.3.1格式化方法
format()
6.3.2日期格式化
6.3.3时间格式化
6.3.4日期时间组合格式化
6.3.5常规类型格式化
6.5字符串生成器


Chap10 Java集合类【P251/583】
Java语言的java.util包中提供了一些集合类,这些集合类又被称为容器。
常用的集合有List集合、Set集合、Map集合,其中List与Set实现了Collection接口。
10.2.1List接口
List接口继承了Collection接口,因此包含Collection中的所有方法。又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法。
方法,返回值,功能描述
add,void,用来向集合中的指定索引位置添加对象,集合的索引位置从0开始,其他对象的索引位置相对向后移一位
allAll,boolean,向集合的指定索引位置添加指定的集合对象
List接口中适合于自身的方法都与索引有关。
10.2.2Set接口的常用方法
Set集合由Set接口和Set接口的实现类组成。Set接口继承了Collection接口,因此包含Collection接口的所有方法。
由于Set集合中不允许存在重复值,因此可以使用Set集合中的addAll()方法,将Collection集合添加到Set集合中并除掉重复值。
10.2.3Map接口的常用方法
Map接口提供了将键映射到值的对象。
10.3.1List接口的实现类
List接口的实现类常用的有ArrayList与LinkedList。
10.3.2Set接口的实现类
要使用Set集合,通常情况下需要声明为Set类型,然后通过Set接口的实例类来实例化。Set接口的实现类常用的有HashSet和TreeSet类。
由于Set集合中的对象是无序的,遍历Set集合的结果与插入Set集合的顺序并不相同。
10.3.3Map接口的实现类
Map接口常用的实现类有HashMap和TreeMap。


Android游戏开发大全
http://download.csdn.net/detail/u012233832/7806127
chap10游戏的心脏——物理引擎
著名的物理引擎有Havok、Bullet、PhysX、ODE以及Box2D等。
Bullet、ODE以及Box2D是开源的物理引擎,
PhysX的前身是Novodex,是一款可免费用于非商业用途的引擎。
三大3D物理引擎为Havok、PhysX、Bullet。
2008年2月4日,NVIDIA成功收购AGEIA,支援CUDA技术的显卡,就可以启动硬件PhysX加速。
PhysX引擎可以在Windows、Linux、Xbox360、Playstation3、Mac等多种平台上运行。
JBox2D是开源的物理引擎Box2D的Java版本,可以直接用于Android。
chap11 OpenGL ES应用开发基础
尽管通常的OpenGL支持多种多边形,但目前OpenGL ES只支持三角形,这主要是出于性能的原因。
OpenGL ES中最多允许8盏灯,id从GL10.GL_LIGHT0到GL10.GL_LIGHT7。
OpenGL ES中每盏灯的光分为3种组成元素:环境光、散射光、镜面反射光
OpenGL ES中光源分为两种:定向光和定位光。

Chap1漫反射着色
1.2创建基本的表面着色器
Unity采用Cg作为着色语言
为了了解更多关于Unity内置的大量Cg功能,可以访问Unity安装目录下的Unity4\Editor\Data\CgIncludes,有三个文件需要特别注意的,UnityCG.cginc、Lighting.cginc和UnityShaderVariables.cginc。
Chap1准备开始
1.3初始化OpenGL
GLSurfaceView会处理OpenGL初始化中比较基本的操作,如配置显示设备以及在后台线程中渲染;渲染是在显示设备中一个称为“surface”的特定区域完成的,有时也称为视口(viewport)。
在Activity被暂停的时候,我们需要释放OpenGL的资源;GLSurfaceView为此提供了很多辅助方法。
GLSurfaceView与常规视图不同,它没有动画或者变形特效。因为GLSurfaceView是窗口的一部分。
纹理视图(TextureView)可以渲染OpenGL而不用创建单独的窗口或打洞了。但是,TextureView 类没有内置OpenGL初始化操作。
1.3.2检查系统是否支持OpenGL ES2.0
取出reqGLEsVersion变量检查OpenGL版本号。如果版本号为0x20000或后续版本,我们就可以使用OpenGL ES 2.0的API了。
1.3.3为OpenGL ES 2.0配置渲染表面
下一步就是渲染表面(rendering surface)。
如果设备支持OpenGL ES 2.0,我们就通过调用setEGLContentClientVersion(2)配置这个surface视图;然后调用setRenderer()传进自定义Renderer类的一个新实例,同时这段代码通过设置rendererSet为true记住渲染器已经设置过了。
在onCreate()函数结尾处,把GLSurfaceView加入到这个activity中。
1.3.4处理Android Activity生命周期的事件
glSurfaceView.onPause();
glSurfaceView.onResume();
这些方法非常重要,有了它们,这个surface视图才能正确暂停并继续后台渲染线程。
1.4创建Renderer类
渲染器接口定义的方法:
onSurfaceCreated
onSurfaceChanged
onDrawFrame
GLSurfaceView会在一个单独的线程中调用渲染器的方法。
两个线程之间的通信可以用如下方法:
在主线程中的GLSurfaceView实例可以调用queueEvent()方法传递一个Runnable给后台渲染线程,渲染线程可以调用Activity的runOnUIThread()来传递事件给主线程。
1.5使用静态导入
静态导入指令帮助我们极大地减少冗长的代码。
import static android.opengl.GLES20.*;
import static android.opengl.GLUtils.*;
import static android.opengl.Matrix.*;
chap2定义顶点和着色器
OpenGL作为本地系统库直接运行在硬件上;没有虚拟机,也没有垃圾回收或内存压缩。
2.4.1从Java调用本地代码
当调用android.opengl.GLES20包里的方法时,软件开发包实际上就是在后台使用JNI调用本地系统库的。
chap5调整屏幕的宽高比
5.4定义正交投影
我们将使用Android的Matrix类,它在android.opengl包中。这个类有一个称为orthoM()的方法,它可以为我们生成一个正交投影。
float[] m:目标数组,这个数组的长度至少有16个元素,这样它才能存储正交投影矩阵;
int mOffset:结果矩阵起始的偏移值;
float left,right:x轴的最小、最大范围
float bottom,top:y轴的最小、最大范围
float near,far:z轴的最小、最大范围
z轴有一个负值符号,它的效果是反转z坐标。
归一化设备坐标使用的是左手坐标系统,而在OpenGL早期版本,默认使用的却是右手系统。
chap6进入第三维
6.6在代码中创建投影矩阵
Android的Matrix类为透视投影准备了两个方法——frustumM()和perspectiveM()。
perspectiveM()只是从Android的ICS版本开始才被引入。
添加一个新类MatrixHelper。
创建自己的perspectiveM
OpenGL把矩阵数据按照以列为主的顺序存储。前四个值是第一列,下一组四个数是第二列,以此类推。

http://wenku.it168.com/d_000735239.shtml 

chap1 Android平台简介
1.3.3虚拟设备的创建与模拟器的运行
通过android list target命令来显示当前可用的目标机。
F:\adt-bundle-windows-x86_64-20130729\sdk\tools>android list target
Available Android targets:
----------
id: 1 or "android-18"
     Name: Android 4.3
     Type: Platform
     API level: 18
     Revision: 1
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, W
XGA720, WXGA800, WXGA800-7in
     ABIs : armeabi-v7a
通过android create avd -n android18 -t 1 -p C:\AVD\ -s QVGA,创建的AVD存放在C:\AVD\下。

F:\adt-bundle-windows-x86_64-20130729\sdk\tools>android create avd -n android18 -t 1 -p C:\AVD\ -s QVGA
Auto-selecting single ABI armeabi-v7a
Android 4.3 is a basic Android platform.
Do you wish to create a custom hardware profile [no]n
Created AVD 'android18' based on Android 4.3, ARM (armeabi-v7a) processor,
with the following hardware config:
hw.lcd.density=120
vm.heapSize=48
hw.ramSize=512
输入emulator -avd android18命令启动Android模拟器。
运行模拟器时可能会很慢。
可以通过使用快捷键Ctrl+F12来切换模拟器的横竖屏模式。
HelloAndroid项目中各个目录和文件的作用。
src目录,用来存放应用程序的所有源代码。
gen目录,该目录下一般只有一个文件,即R文件。该文件是由ADT自动产生的,存放的是应用程序中所使用的全部资源文件的ID,在应用程序开发过程中只是使用R文件,一般不需人工修改该文件。
Android2.1目录,该目录存放的项目所需要的支持.jar包。
assets目录,该目录存放应用程序中使用的外部资源文件。
res资源目录,有多个目录,分别用来存放程序中用到的图片、界面布局文件及XML格式的描述文件。
Androidmanifest,是整个程序的系统控制文件,描述了应用程序有哪些组件、哪些资源、哪些权限等。

Android 4高级编程(第3版)
http://download.csdn.net/detail/qinghuawenkang/5276098
Android SDK包含了针对基于位置的服务硬件(如GPS)、摄像头、音频、网络连接、Wi-Fi、蓝牙、传感器(包括加速计)、NFC、触摸屏和电源管理的API。

http://wenku.baidu.com/view/55539d18227916888486d789.html?re=view
关于Android的平台API
API级别,Android版本
1,Android 1.0
2,Android 1.1
3,Android 1.5
4,Android 1.6
5,Android 2.0
6,Android 2.01
7,Android 2.0
8,Android 2.2
9,Android 2.3
11,Android 3.0
12,Android 3.1
13,Android 3.2
14,Android 4.0
新的API级别包含以前级别的所有内容。
Android多媒体相关的接口在android.media包中。主要包含了以下几个部分的内容:
媒体播放
媒体录制
媒体扫描


传感器是Android系统获取外部信息的重要手段,Android系统支持8种传感器。
传感器系统部分在android.hardware包中。

import javax.swing.*;//引用JAVA的GUI组件Swing,javax.swing即JAVA中的一个包。
Android提供一些扩展的JAVA 类库,类库分为若干个包,每个包中包含若干个类。
Android中各种JAVA包的描述:
android.app :提供高层的程序模型、提供基本的运行环境
android.content :包含各种的对设备上的数据进行访问和发布的类
android.database :通过内容提供者浏览和操作数据库
android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕上 .
android.location :定位和相关服务的类
android.media :提供一些类管理多种音频、视频的媒体接口
android.net :提供帮助网络访问的类,超过通常的 java.net.* 接口
android.os :提供了系统服务、消息传输、 IPC 机制
android.opengl :提供 OpenGL 的工具
android.provider :提供类访问 Android 的内容提供者
android.telephony :提供与拨打电话相关的 API 交互
android.view :提供基础的用户界面接口框架
android.util :涉及工具性的方法,例如时间日期的操作
android.webkit :默认浏览器操作接口
android.widget :包含各种 UI 元素(大部分是可见的)在应用程序的屏幕中使用
Android 4.1新特性介绍
http://wenku.baidu.com/view/2e3e0003cc175527072208c2.html
新的输入类型和功能
蓝牙、USB或者其他任何连接类型接入新的输入设备时,系统就发出通知,让用户选择是否进行切换。
 

2008年9月23日,Android 1.0 R1 SDK发布。
截止到目前,最新版本是Android SDK 1.5
1.5版本的SDK可以兼容以前的1.1版本。
目录platforms下包含android-1.1和android-1.5
在2009年间陆续推出Android 1.5、1.6、2.0和2.01版本;
2010年1月5日,发布Android 2.1版本
Android应用开发详解
2010年1月,Google开始发布自家品牌手机Nexus One。该款手机使用的操作系统是Android 2.1。
郭宏志
2013年3月
2010年5月21日,发布Android 2.2版本。
Android 2.3应用开发实战
2010年12月6日,Google公司推出Android 2.3版本,代码是Gingerbread。



从Android1.0到Android6.0
http://wenku.baidu.com/view/76ae91cfad02de80d5d84086.html?from=search
2008.9发布Android 1.0发条机器人
2009.4.30发布Android 1.5纸杯蛋糕
2009.9.15发布Android 1.6甜甜圈
2009.10.26发布Android 2.0松饼
2010.5.20发布Android 2.2冻酸奶
2010.12.7发布Android 2.3姜饼
增加了新的垃圾回收和优化处理事件;原生代码可直接存取输入和感应器事件、EGL/OpenGL ES、OpenSL ES、新的管理窗口和生命周期的框架;支持VP8和WebM视频格式,提供AAC和AMR宽频编码,提供了新的音频效果器;支持前置摄像头、SIP/VOIP和NFC(近场通讯);简化界面、速度提升;更快更直观的文字输入;一键文字选择和复制/粘贴;改进的电源管理系统;新的应用管理方式。
Android 3姜饼
2011.2.2发布Android 3.0
优化针对平板;全新设计的UI增强网页浏览功能;in-app purchases功能。
2011.5.11发布Android 3.1
经过优化的Gmail电子邮箱;全面支持Google Maps;将Android手机系统跟平板系统再次合并从而方便开发者;任务管理器可滚动,支持USB输入设备(键盘、鼠标等);支持Google TV。可以支持XBOX 360无线手柄;widget支持的变化,能更加容易的定制屏幕widget插件。
2011.7.13发布Android 3.2
支持7英寸设备;引入了应用显示缩放功能。
2011.10.19发布Android 4.0冰激凌三明治
Android 4.1~4.2果冻豆
2012.6.28发布Android 4.1
2012.10.30发布Android 4.2
2013.9.4发布Android 4.4奇巧巧克力
Android 5.0~5.1棒棒糖
2014.10.15发布Android 5.0
2015.3.10发布Android 5.1
2015.9.30发布Android 6.0棉花糖












你可能感兴趣的:(C++,GO端游,手游开发)