当前位置:  编程技术>移动开发
本页文章导读:
    ▪客户端获取搜集信息        客户端获取收集信息 package com.img.test01; import android.app.Activity; import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.provider.Settings.Secure; import android.telephony..........
    ▪ -Java 匿名内部类的分辨        ---Java 匿名内部类的识别 new 一个类或接口(接口本身平时是不能new的), 而这个类已经存在(定义过),但是在这个类名的后面()的后面,是 { }程序块,则这个类就是匿名内部类,编.........
    ▪ 关于String的getBytes()跟charAt()       关于String的getBytes()和charAt() 问题:请教 关于字符编码 和 String.getBytes() 的问题.public static void main(String[] args) throws UnsupportedEncodingException { String s = "中"; for(int i = 0;i<s.length();i++){ System.out.p.........

[1]客户端获取搜集信息
    来源: 互联网  发布时间: 2014-02-18
客户端获取收集信息
package com.img.test01;

import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.provider.Settings.Secure;
import android.telephony.TelephonyManager;

/**
 * 注意:在调用的时候,必须首先添加相对应的权限,谢谢
 *  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
 *	<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
 *  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 * @author Administrator
 *
 */
public class DeviceMessage {
	public Activity activity;
	TelephonyManager tm;

	public DeviceMessage(Activity activity) {
		super();
		this.activity = activity;
		tm = (TelephonyManager) activity
				.getSystemService(activity.TELEPHONY_SERVICE);
	}

	/**
	 * 获取手机号码
	 */
	public String GetTelephone() {
		String TEL = tm.getLine1Number();// 手机号
		return TEL;
	}

	/**
	 * 获取手机IMSI信息
	 */
	public String GetIMSI() {
		String IMSI = tm.getSubscriberId();// 国际移动用户识别码,是区别移动用户的标
		return IMSI;
	}
	
	/**
	 * 获取手机IMEI信息
	 */
	public String GetIMEI() {
		String IMEI = tm.getDeviceId();// 国际移动用户识别码,是区别移动用户的标
		return IMEI;
	}
	
	
	/**
	 * 通过wifi获取Ip地址
	 * 
	 * @return
	 */
	public String GetWiFi() {
		// 获取wifi服务
		WifiManager wifiManager = (WifiManager) activity.getSystemService(Context.WIFI_SERVICE);
		// 判断wifi是否开启
		if (!wifiManager.isWifiEnabled()) {
			wifiManager.setWifiEnabled(true);
		}
		WifiInfo wifiInfo = wifiManager.getConnectionInfo();
		int ipAddress = wifiInfo.getIpAddress();
		String ip = intToIp(ipAddress);
		return ip;
	}

	private String intToIp(int i) {
		return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF)
				+ "." + (i >> 24 & 0xFF);
	}

	/**
	 * 系统唯一的id
	 * 
	 * @return
	 */
	public String getDeviceId() {
		String android_id = Secure.getString(activity.getContentResolver(),
				Secure.ANDROID_ID);
		return android_id;
	}
}
 

 String SIM = tm.getSimSerialNumber();// 获取手机序列号
String version = tm.getDeviceSoftwareVersion();// 设备的软件版本号
int PhoneType = tm.getPhoneType();// 手机类型
String CountryIso = tm.getSimCountryIso();// 获取ISO国家码,相当于提供SIM卡的国家码

    
[2] -Java 匿名内部类的分辨
    来源: 互联网  发布时间: 2014-02-18
---Java 匿名内部类的识别
new 一个类或接口(接口本身平时是不能new的), 而这个类已经存在(定义过),但是在这个类名的后面()的后面,是 { }
程序块,则这个类就是匿名内部类,

编译系统估计也是这么识别的了!

    
[3] 关于String的getBytes()跟charAt()
    来源: 互联网  发布时间: 2014-02-18
关于String的getBytes()和charAt()
问题:
请教 关于字符编码 和 String.getBytes() 的问题.


public static void main(String[] args) throws UnsupportedEncodingException {

String s = "中";
for(int i = 0;i<s.length();i++){
System.out.println((int)s.charAt(i));
System.out.println(Integer.toHexString((int)s.charAt(i)));
}
byte[] b = s.getBytes("gb2312");
for(int i = 0;i<b.length;i++){
System.out.println(Integer.toHexString(b[i]));
}
System.out.println("**************************************");
byte[] b2 = s.getBytes("unicode");
for(int i = 0;i<b2.length;i++){
System.out.println(Integer.toHexString(b2[i]));
}
System.out.println("**************************************");

System.out.println(System.getProperty("file.encoding"));

}

输出结果 如下:

20013
4e2d
ffffffd6
ffffffd0
**************************************
ffffffff
fffffffe
2d
4e
**************************************
GBK


我的问题如下:
首先 我知道 我的本机的 默认编码 是GBK  ,中 这个字符的 UNICODE 编码为 4e2d 它对应的数字是 20013.  ‘中’这个字符对应的GBK 是d6d0  byte[] b = s.getBytes("gb2312"); 这是获得 中 在gb2312编码下的 字节数组。
我跟断点  b 里面的值 为什么 是 [-42,-48]???


byte[] b2 = s.getBytes("unicode");
这个 是获得 '中' 的 unicode 编码的 字节数组?   我看断点 b2 中 为什么是 [-1,-2,45,78]?

将其 转化16进制System.out.println(Integer.toHexString(b2[i]));
为什么输出结果 是
ffffffff
fffffffe
2d
4e
这个 是 2d  4e     那为什么 最上面 输出是 20013  4e2d 为什么顺序不一样呢 ? 

十分感谢
=================================================================================

我跟断点  b 里面的值 为什么 是 [-42,-48]??

b是一个字节数组,字节的取值范围是-128~127
就是说,一个字节范围数字0~FF,大于127的都被解释为负值了
D6也是一样,对应的负值(它的补码)就是-42

-----------------------------------
byte[] b2 = s.getBytes("unicode");
这个 是获得 '中' 的 unicode 编码的 字节数组?   我看断点 b2 中 为什么是 [-1,-2,45,78]?

-1,-2 是unicode编码的前导码,也就是FFFE,
Unicode规范建议在对码位进行编码前,先提供一个表示字节顺序的前导码。对Little-Endian,前导码为FFFE,对Big-Endian,前导码为FEFF。

后面的42,78  十进制对应的十六进制就是2d4e

-------------------------------------
这个 是 2d  4e     那为什么 最上面 输出是 20013  4e2d 为什么顺序不一样呢 ? 

你输出的4e2d是java的字符编码(也是unicode编码),但打印的次序是Big-Endian
即:高字节在前,低字节在后,和前面打印的Little-Endian恰好相反。

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3