androidstringchar-ag真人国际官网
ⅰ android里的charsequence是不是就是string如果是, 為什麼不直接使用string
charsequence是一個介面,string是一個實現了charsequence介面的類。
在jdk1.4中,引入了charsequence介面,實現了這個介面的類有:charbuffer、string、stringbuffer、stringbuilder這個四個類。
ⅱ android studio中string怎麼轉char數組
用指針,
遍歷string,把每一個*p賦值給char[i],遍歷結束的時候,char數組裡面就保存了string的每個字母.
char *p = string;
for (int i=0, *p; i
char[i] = *p;
} 主要部分就是這樣的了.
ⅲ 如何獲取android 簽名信息
android中有時候需要獲取應用的簽名信息,簽名信息一般有:公鑰,演算法名,md5值,序列號。要想獲取這些信息首先該apk應用要有系統許可權。
1. 在配置文件里添加系統許可權:android:shareduserid="android.uid.system"
2. 獲取簽名信息的字元信息:
string signature_key = "";
try{
packageinfo packageinfo = context.getpackagemanager().getpackageinfo(pkgname,
packagemanager.get_signatures);
signature[] signatures =
packageinfo.signatures;
signaturekey.parsesignature(signatures[0].tobytearray());
} catch (namenotfoundexception e) {
e.printstacktrace();
} catch (nullpointerexception e) {
e.printstacktrace();
}
(1).其中packageinfo 得到的是指定包名的簽名信息的字元串。另提及多說一句:在程序中我們一般使用
list list =
mpackagemanager.getinstalledpackages(0);來得到所有的安裝包的信息,這其中包括應用名,包名,大小....
(2).
其中[]signatures里是存放的簽名的字元串數組。我們一般取用第一個signatures[0]來做為該應用的簽名信息。這里有一個疑惑就是為什麼得到的是一個字元串的數組列表,而不是一個字元串,也有的開發者採用:
stringbuilder builder = new stringbuilder();
for(signature sign: signatures
){
builder.append(sign.tocharsstring());
builder.append("/n");
}來得到所有的簽名信息。在這里我驗證過,signatures
的長度為1,所以指定apk的簽名信息就為signatures[0]。
至於第二種方法有待發現。
3 .獲取簽名的md5值
public static final string getmd5string(byte[] paramarrayofbyte)
{
char[] asciitable = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
97, 98, 99, 100, 101, 102 }; // ascii表對應的數字和字元的編碼
try
{
messagedigest md5messagedigest =
messagedigest.getinstance("md5");
md5messagedigest.update(paramarrayofbyte);//
byte[]
tempbyte = md5messagedigest.digest();
int i =
tempbyte.length;
char[] tempchar = new char[i *
2];
int j = 0;
int k =
0;
while (true) { //
將二進制數組轉換成字元串
if (j >= i)
{
return new
string(tempchar);
}
int m
= tempbyte[j];
int n = k
1;
tempchar[k] = asciitable[(0xf & m >>>
4)];
k = n
1;
tempchar[n] = asciitable[(m &
0xf)];
j ;
}
}
catch (exception e)
{
e.printstacktrace();
}
return
null;
}
(1). 其中參數就是上一步得到的簽名的byte數組。
4. 獲取公鑰,簽名演算法,簽名序列號
public static void parsesignature(byte[] signature)
{
try
{
certificatefactory
certfactory =
certificatefactory.getinstance("x.509");
x509certificate cert = (x509certificate) certfactory.generatecertificate(new
bytearrayinputstream(signature));
string pubkey =
cert.getpublickey().tostring(); //公鑰
string signnumber =
cert.getserialnumber().tostring();
system.out.println("signname:"
cert.getsigalgname());//演算法名
system.out.println("pubkey:"
pubkey);
system.out.println("signnumber:"
signnumber);//證書序列編號
system.out.println("subjectdn:" cert.getsubjectdn().tostring());
} catch (certificateexception e)
{
e.printstacktrace();
}
}
5. 電腦查看apk簽名信息
查看三方應用或是系統應用簽名
用winrar打開待查看的apk,將其中meta-inf文件夾解壓出來,得到其中的cert.rsa文件
1.keytool
-printcert -file meta-inf/cert.rsa
命令是:keytool -printcert -file
<簽名文件rsa的路徑>
2.jarsigner -verify -verbose -certs superuser.apk
此條未驗證成功
ⅳ intent傳遞數據時,可以傳遞哪些類型數據
在android應用的開發中,如果我們需要在不同的模塊(比如不同的activity之間)之間傳遞數據,通常有以下兩種方法:
1. 利用intent對象攜帶數據
通過查詢intent/bundle的api文檔,我們可以獲知,intent/bundle支持傳遞基本類型的數據和基本類型的數組數據,以及string/charsequence類型的數據和string/charsequence類型的數組數據。而對於其它類型的數據貌似無能為力,其實不然,我們可以在intent/bundle的api中看到intent/bundle還可以傳遞parcelable(包裹化,郵包)和serializable(序列化)類型的數據,以及它們的數組/列表數據。
所以要讓非基本類型和非string/charsequence類型的數據通過intent/bundle來進行傳輸,我們就需要在數據類型中實現parcelable介面或是serializable介面。
1.1 利用parcelable介面實現數據通過intent/bundle進行傳遞
/**
* 代表一個人的信息
* @author gansc
*/
public class personinfo implements parcelable
{
public string iname; // 人名
publicint isex; // 性別
public string iid; // 身份證號碼
public string imobilenumber; // 手機號碼
public string iemailaddr; // 郵箱地址
// from parcelable
@override
publicint describecontents()
{
return0;
}
// from parcelable
// 保存到包裹中
@override
publicvoid writetoparcel(parcel dest, int flags)
{
dest.writestring(iname);
dest.writeint(isex);
dest.writestring(iid);
dest.writestring(imobilenumber);
dest.writestring(iemailaddr);
}
// 實現parcelable介面的類型中,必須有一個實現了parcelable.creator介面的靜態常量成員欄位,
// 並且它的名字必須為creator的
publicstaticfinal parcelable.creator
=new parcelable.creator
{
// from parcelable.creator
@override
public personinfo createfromparcel(parcel in)
{
personinfo brief =new personinfo();
// 從包裹中讀出數據
brief.iname = in.readstring();
brief.isex = in.readint();
brief.iid = in.readstring();
brief.imobilenumber = in.readstring();
brief.iemailaddr = in.readstring();
return brief;
}
// from parcelable.creator
@override
public personinfo[] newarray(int size)
{
returnnew personinfo[size];
}
};
}
ⅳ 如何在android中的string使用中文
public class conversion {
/**
* 中文轉unicode
* @param str
* @return 反回unicode編碼
*/
public string chinatounicode(string str)
{
string result = null;
for (int i = 0; i < str.length(); i )
{
int chr1 = (char) str.charat(i);
result = "\\u" integer.tohexstring(chr1);
}
return result;
}
/**
* unicode轉中文
* @param str
* @return 中文
*/
public void unicodetochinese(string str)
{
for(char c : str.tochararray())
system.out.print(c);
}
public static void main(string args[])
{
//unicode轉中文
string str = "\u767b\u5f55\u793e\u533a";
conversion con = new conversion();
con.unicodetochinese(str);
//for(char c : str.tochararray())
//system.out.print(c);
}
}
ⅵ android string.valueof(ch).getbytes("gbk");到底何意
string.valueof(ch)表示將字元ch轉換為字元串
string的getbytes(string charset)表示使用指定的字元集將此 string 編碼為 byte 序列,並將結果存儲到一個新的 byte 數組中。
這里的gbk和utf-8指的就是字元集的名字,那麼什麼是字元集:是抽象字元集合和整數集合之間的映射關系。就好像字典一樣,我每次只告訴計算機這個字在哪一頁(假設一頁只有一個漢字),計算機需要顯示的時候就去查字典。這有什麼好處呢?第一大家使用一樣的字典那麼顯示結果就是一樣的,第二計算機中一個字元只需要一個整數來表示就行了,只在需要顯示的時候才去查字典,非常省空間與流量。
這里再解釋兩個概念:編碼與解碼。編碼:通過一個字元在字典里找到他的位置,用這個位置來表示該字元。解碼:通過一個位置在一個字典里找到表示的字元是什麼。
那麼現在就可以解釋為什麼上面的轉換結果不一樣了,gbk和utf-8是兩本不同的字典,而getbytes(string charset)是編碼過程,那麼同一個漢字在不同字典的位置就不一樣,返回的頁數也就不一樣了。
該怎麼用?只要你能保證編碼和解碼時使用的是同一個字典(字元集),那麼你用哪一個都沒有錯,但是很多時候在解碼時會使用默認的字元集(中文xp默認是gbk,而台灣繁體中文默認是big5),所以這時候你就要注意你的編碼方式是否對應