當前位置:首頁 » 安卓系統 » androidbyteint

androidbyteint

發布時間: 2023-05-02 01:30:20

① 在android中實現在Edittext中輸入兩個位元組的二進制,將兩個位元組轉換十進制數據,在兩個textview中顯示

首先需要說明的是,在Android中用於輸入的控制項是EditText;
對EditText使用getText()方法,返回一個Editable對象,對這個對象使用toString()方法,獲得一個String對象;
使用Integer.parseInt(String str);方法可以將String對象轉換成Int型數據;
最後對TextView對象使用setText()方法,需要注意的是這個方法接受String對象,或者int型資源ID;
private EditText etvalue2;
private EditText etvalue1;
private TextView textView;
private int value1;
private int value2;
private int result;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textView=(TextView)findViewById(R.id.textView);
etvalue1 = (EditText) findViewById(R.id.editText);
etvalue2=(EditText)findViewById(R.id.editText2);

findViewById(R.id.btn_run).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
value1 =Integer.parseInt(etvalue1.getText().toString()) ;
value2 = Integer.parseInt(etvalue2.getText().toString());
result =value1+value2;
textView.setText(""+result+"");
}
});
}
分享

② Android中各基本數據類型所佔位元組數是多少

android的也就是java的,如下:
byte 1個位元組
short 2個位元組
char 2個位元組
int 4個位元組
long 8個位元組
float 4個位元組
double 8個位元組

③ android開發中怎樣實現混音

音頻混音的原理: 量化的語音信號的疊加等價於空氣中聲波的疊加。

下面是代碼,可以參照來學習:

publicvoidmixAudios(File[]rawAudioFiles){	
finalintfileSize=rawAudioFiles.length;

FileInputStream[]audioFileStreams=newFileInputStream[fileSize];
FileaudioFile=null;

FileInputStreaminputStream; byte[][]allAudioBytes=newbyte[fileSize][]; boolean[]streamDoneArray=newboolean[fileSize]; byte[]buffer=newbyte[512]; intoffset;
try{
for(intfileIndex=0;fileIndex<fileSize;++fileIndex){
audioFile=rawAudioFiles[fileIndex];
audioFileStreams[fileIndex]=newFileInputStream(audioFile);
} while(true){
for(intstreamIndex=0;streamIndex<fileSize;++streamIndex){

inputStream=audioFileStreams[streamIndex]; if(!streamDoneArray[streamIndex]&&(offset=inputStream.read(buffer))!=-1){
allAudioBytes[streamIndex]=Arrays.Of(buffer,buffer.length);
}else{
streamDoneArray[streamIndex]=true;
allAudioBytes[streamIndex]=newbyte[512];
}
}
byte[]mixBytes=mixRawAudioBytes(allAudioBytes);
//mixBytes就是混合後的數據

booleandone=true; for(booleanstreamEnd:streamDoneArray){ if(!streamEnd){
done=false;
}
}
if(done){ break;
}
}

}catch(IOExceptione){
e.printStackTrace(); if(mOnAudioMixListener!=null)
mOnAudioMixListener.onMixError(1);
}finally{ try{ for(FileInputStreamin:audioFileStreams){ if(in!=null)
in.close();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
}/**
*每一行是一個音頻的數據
*/byte[]averageMix(byte[][]bMulRoadAudioes){
if(bMulRoadAudioes==null||bMulRoadAudioes.length==0) returnnull; byte[]realMixAudio=bMulRoadAudioes[0];
if(bMulRoadAudioes.length==1) returnrealMixAudio;
for(intrw=0;rw<bMulRoadAudioes.length;++rw){ if(bMulRoadAudioes[rw].length!=realMixAudio.length){
Log.e("app","columnoftheroadofaudio+"+rw+"isdiffrent."); returnnull;
}
}
introw=bMulRoadAudioes.length; intcoloum=realMixAudio.length/2; short[][]sMulRoadAudioes=newshort[row][coloum]; for(intr=0;r<row;++r){ for(intc=0;c<coloum;++c){
sMulRoadAudioes[r][c]=(short)((bMulRoadAudioes[r][c*2]&0xff)|(bMulRoadAudioes[r][c*2+1]&0xff)<<8);
}
} short[]sMixAudio=newshort[coloum]; intmixVal; intsr=0; for(intsc=0;sc<coloum;++sc){
mixVal=0;
sr=0; for(;sr<row;++sr){
mixVal+=sMulRoadAudioes[sr][sc];
}
sMixAudio[sc]=(short)(mixVal/row);
} for(sr=0;sr<coloum;++sr){
realMixAudio[sr*2]=(byte)(sMixAudio[sr]&0x00FF);
realMixAudio[sr*2+1]=(byte)((sMixAudio[sr]&0xFF00)>>8);
} returnrealMixAudio;
}

④ 如何在android程序中執行adb shell命令

android程序執行adbshell命令(實例源碼)packagenet.gimite.nativeexe;importjava.io.BufferedReader;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.MalformedURLException;importjava.net.URL;importnet.gimite.nativeexe.R;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.*;{privateTextViewoutputView;privateButtonlocalRunButton;privateEditTextlocalPathEdit;privateHandlerhandler=newHandler();privateEditTexturlEdit;privateButtonremoteRunButton;/**.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);outputView=(TextView)findViewById(R.id.outputView);localPathEdit=(EditText)findViewById(R.id.localPathEdit);localRunButton=(Button)findViewById(R.id.localRunButton);localRunButton.setOnClickListener(onLocalRunButtonClick);}=newOnClickListener(){publicvoidonClick(Viewv){Stringoutput=exec(localPathEdit.getText().toString());output(output);//try{//////Processprocess=Runtime.getRuntime().exec(localPathEdit.getText().toString());////}catch(IOExceptione){////TODOAuto-generatedcatchblock//e.printStackTrace();//}}};//ExecutesUNIXcommand.privateStringexec(Stringcommand){try{Processprocess=Runtime.getRuntime().exec(command);BufferedReaderreader=newBufferedReader(newInputStreamReader(process.getInputStream()));intread;char[]buffer=newchar[4096];StringBufferoutput=newStringBuffer();while((read=reader.read(buffer))>0){output.append(buffer,0,read);}reader.close();process.waitFor();returnoutput.toString();}catch(IOExceptione){thrownewRuntimeException(e);}catch(InterruptedExceptione){thrownewRuntimeException(e);}}privatevoiddownload(StringurlStr,StringlocalPath){try{URLurl=newURL(urlStr);HttpURLConnectionurlconn=(HttpURLConnection)url.openConnection();urlconn.setRequestMethod("GET");urlconn.setInstanceFollowRedirects(true);urlconn.connect();InputStreamin=urlconn.getInputStream();FileOutputStreamout=newFileOutputStream(localPath);intread;byte[]buffer=newbyte[4096];while((read=in.read(buffer))>0){out.write(buffer,0,read);}out.close();in.close();urlconn.disconnect();}catch(MalformedURLExceptione){thrownewRuntimeException(e);}catch(IOExceptione){thrownewRuntimeException(e);}}privatevoidoutput(finalStringstr){Runnableproc=newRunnable(){publicvoidrun(){outputView.setText(str);}};handler.post(proc);}}

⑤ eclipse寫android程序,怎麼將從藍牙模塊中接受的16進制的數據轉換成十進制

/* *
* Convert byte[] to hex string.我byte轉換int利用Integer.toHexString(int)
*轉換16進制字元串
* @param src byte[] data
* @return hex string
*/
public static String bytesToHexString(byte[] src){
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
能byte[]轉化16進制字元串希望能幫

⑥ android 藍牙如何發送十六進制數據

與藍牙模塊通信最重要的地方就是數據的發送和接收,因為是底層的操作,所以更多是發送16進制數據。
進制轉換是我們程序員的必修課,屬於基本素質。這里需要的是將位元組數組轉化為16進制字元串,方法都是通用的:

[java] view plain
public static String bytesToHexString(byte[] bytes) {
String result = "";
for (int i = 0; i < bytes.length; i++) {
String hexString = Integer.toHexString(bytes[i] & 0xFF);
if (hexString.length() == 1) {
hexString = '0' + hexString;
}
result += hexString.toUpperCase();
}
return result;
}

接下來就是發送數據。
發送數據非常簡單,之前有關於藍牙編程的博文已經講到了,http://www.cnblogs.com/wenjiang/p/3200138.html,這里只講重要的一點:大容量位元組數組的發送。
我們需要發送64個位元組的數組,如果一次性發送過去,單片機那裡可能無法及時處理以致沒有任何回應,因為單片機那裡是設置了數據接收的延時時間。要想暢通的與藍牙模塊通信,考慮這個時間差非常重要。調整位元組的發送速率,就成為非常關鍵的一步。值得注意的是,數據的發送是非常快的,就是因為這樣才會導致單片機那裡無法及時處理,所以,每次發送後的延時是非常重要的。我們單片機那裡的延時是10毫秒,所以我們選擇發送完每個位元組後就延時10毫秒再發下個位元組。
[java] view plain
for (byte b : bytes) {
out.write(b);
Thread.sleep(10);
}

具體的延時時間和位元組發送速率得看單片機那裡程序的設置。
在使用InputStream的時候,必須注意,InputStream的讀取是阻塞的。這點在一般的情況下是不會影響到我們的程序,但是記住這個情況對於代碼的設計是非常重要的,尤其是在考慮用戶體驗的時候。
無參數的read()是每次只從流中讀取一個位元組,這種做法效率非常低,但是簡單,像是讀取整數值這種情況,使用read()就非常好,但如果是16進制字元串呢?使用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int off,int len)方法,這樣一次就能讀取多個位元組。
如果是讀取多個位元組,我們常常使用InputStream.available()方法來獲取數據流中可讀位元組的個數。讀取本地數據的時候,該方法發揮得非常好,但如果是讀取非本地數據,就可能出現位元組遺漏的問題,像是要讀取100個位元組,可能就是90個,甚至是0個。
出現0個的情況就是單片機那邊沒有響應或者位元組還沒發送過來,這時我們就需要一個循環來保證我們能夠拿到數據:
[java] view plain
int count = 0;
while (count == 0) {
count = in.available();
}
byte[] bytes = new byte[count];
in.read(bytes);

但像是上面的90個位元組的情況就是位元組遺漏。對於這種情況,解決方法也很簡單:

[java] view plain
byte[] bytes = new byte[count];
int readCount = 0; // 已經成功讀取的位元組的個數
while (readCount < count) {
readCount += in.read(bytes, readCount, count - readCount);
}

⑦ 安卓開發中怎麼將文件轉換成base64字元串

將文件轉成base64 字元串,android 手機開發的時候會用到,當然在android有轉base64的方法,這里調用的是jdk的api
[代碼] [Java]代碼
01 package com.xbl.test;
02
03 import java.io.File;
04 import java.io.FileInputStream;
05 import java.io.FileOutputStream;
06
07 import sun.misc.BASE64Decoder;
08 import sun.misc.BASE64Encoder;
09
10 public class File2Code {
11
12 /**
13 * <p>將文件轉成base64 字元串</p>
14 * @param path 文件路徑
15 * @return
16 * @throws Exception
17 */
18 public static String encodeBase64File(String path) throwsException {
19 File file = new File(path);
20 FileInputStream inputFile = new FileInputStream(file);
21 byte[] buffer = new byte[(int)file.length()];
22 inputFile.read(buffer);
23 inputFile.close();
24 return new BASE64Encoder().encode(buffer);
25 }
26 /**
27 * <p>將base64字元解碼保存文件</p>
28 * @param base64Code
29 * @param targetPath
30 * @throws Exception
31 */
32 public static void decoderBase64File(String base64Code,String targetPath) throws Exception {
33 byte[] buffer = new BASE64Decoder().decodeBuffer(base64Code);
34 FileOutputStream out = new FileOutputStream(targetPath);
35 out.write(buffer);
36 out.close();
37 }
38 /**
39 * <p>將base64字元保存文本文件</p>
40 * @param base64Code
41 * @param targetPath
42 * @throws Exception
43 */
44 public static void toFile(String base64Code,String targetPath)throws Exception {
45 byte[] buffer = base64Code.getBytes();
46 FileOutputStream out = new FileOutputStream(targetPath);
47 out.write(buffer);
48 out.close();
49 }
50 public static void main(String[] args) {
51 try {
52 String base64Code =encodeBase64File("D:\\1.jpg");
53 System.out.println(base64Code);
54 decoderBase64File(base64Code, "D:\\2.jpg");
55 toFile(base64Code, "D:\\three.txt");
56 } catch (Exception e) {
57 e.printStackTrace();
58 }
59 }
60
61 }

⑧ android藍牙BLE(三) —— 廣播

​ 在藍牙開發中,有些情況是不需要連接的,只要外設廣播自己的數據即可,例如蘋果的 ibeacon 。自 Android 5.0 更新藍牙API後,手機可以作為外設廣播數據。

廣播包有兩種:

其中 廣播包是每個外設都必須廣播的,而響應包是可選的 。每個廣播包的長度必須是 31個位元組 ,如果不到 31個位元組 ,則剩下的全用 0 填充 補全,這部分的數據是無效的

廣播包中包含若干個廣播數據單元,廣播數據單元也稱為 AD Structure 。

廣播數據單元 = 長度值Length + AD type + AD Data。

長度值 Length 只佔 一個位元組 ,並且位於廣播數據單元的 第一個位元組

概念的東西有些抽象,先看看下面的廣播報文:

​ 0x代表這串字元串是十六進制的字元串。 兩位十六進制數代表一個位元組 。因為兩個字元組成的十六進制字元串最大為 FF ,即255,而Java中byte類型的取值范圍是-128到127,剛好可以表示一個255的大小。所以兩個十六進制的字元串表示一個位元組。

​ 繼續查看報文內容,開始讀取第一個廣播數據單元。讀取 第一個 位元組: 0x07 ,轉換為十進制就是7,即表示後面的7個位元組是這個廣播數據單元的數據內容。超過這7個位元組的數據內容後,表示是一個新的廣播數據單元。

​ 而第二個廣播數據單元,第一個位元組的值是 0x16 ,轉換為十進制就是22,表示後面22個位元組為第二個廣播數據單元。

​ 在廣播數據單元的 數據部分 中, 第一個位元組 代表 數據類型 (AD type),決定數據部分表示的是什麼數據。(即廣播數據單元第二個位元組為AD type)

AD Type 的類型如下:

​ 這bit 1~7分別代表著發送該廣播的藍牙晶元的物理連接狀態。當bit的值為1時,表示支持該功能。
例:

藍牙廣播的數據格式大致講了一下,有助於下面的廣播操作的理解。

先看看廣播設置( AdvertiseSettings )如何定義:

(1)、通過 AdvertiseSettings.Builder#setAdvertiseMode() 設置廣播模式。其中有3種模式:

(2)、通過 AdvertiseSettings.Builder#setAdvertiseMode() 設置廣播發射功率。共有4種功率模式:

(3)、通過 AdvertiseSettings.Builder#setTimeout() 設置持續廣播的時間,單位為毫秒。最多180000毫秒。當值為0則無時間限制,持續廣播,除非調用 BluetoothLeAdvertiser#stopAdvertising() 停止廣播。

(4)、通過 AdvertiseSettings.Builder#setConnectable() 設置該廣播是否可以連接的。

之前說過,外設必須廣播廣播包,掃描包是可選。但添加掃描包也意味著廣播更多得數據,即可廣播62個位元組。

可見無論是廣播包還是掃描包,其廣播的內容都是用 AdvertiseData 類封裝的。

(1)、 AdvertiseData.Builder#setIncludeDeviceName() 方法,可以設置廣播包中是否包含藍牙的名稱。

(2)、 AdvertiseData.Builder#setIncludeTxPowerLevel() 方法,可以設置廣播包中是否包含藍牙的發射功率。

(3)、 AdvertiseData.Builder#addService UUID (Parcel UUID ) 方法,可以設置特定的 UUID 在廣播包中。

(4)、 AdvertiseData.Builder#addServiceData(Parcel UUID ,byte[]) 方法,可以設置特定的 UUID 和其數據在廣播包中。

(5)、 AdvertiseData.Builder#addManufacturerData(int,byte[]) 方法,可以設置特定廠商Id和其數據在廣播包中。

​ 從 AdvertiseData.Builder 的設置中可以看出,如果一個外設需要在不連接的情況下對外廣播數據,其數據可以存儲在 UUID 對應的數據中,也可以存儲在廠商數據中。但由於廠商ID是需要由Bluetooth SIG進行分配的,廠商間一般都將數據設置在廠商數據。

另外可以通過 BluetoothAdapter#setName() 設置廣播的名稱

先看一個例子,我們分別在 廣播包 掃描包 中設置 AdvertiseData.Builder 的 每一種廣播報文參數 ,得到一下報文內容:

(1)、Type = 0x01 表示設備LE物理連接。

(2)、Type = 0x09 表示設備的全名

(3)、Type = 0x03 表示完整的16bit UUID 。其值為0xFFF7。

(4)、Type = 0xFF 表示廠商數據。前兩個位元組表示廠商ID,即廠商ID為0x11。後面的為廠商數據,具體由用戶自行定義。

(5)、Type = 0x16 表示16 bit UUID 的數據,所以前兩個位元組為 UUID ,即 UUID 為0xF117,後續為 UUID 對應的數據,具體由用戶自行定義。

最後繼承 AdvertiseCallback 自定義廣播回調。

初始化完畢上面的對象後,就可以進行廣播:

​ 廣播主要是通過 BluetoothLeAdvertiser#startAdvertising() 方法實現,但在之前需要先獲取 BluetoothLeAdvertiser 對象。

BluetoothLeAdvertiser 對象存在兩個情況獲取為Null:

所以在調用 BluetoothAdapter#getBluetoothLeAdvertiser() 前,需要先調用判斷藍牙已開啟,並判斷在 BluetoothAdapter 中獲取的 BluetoothLeAdvertiser 是否為空(測試過某些華為手機 mBluetoothAdapter.() 為 false , 但是能發送ble廣播)。

​ 與廣播成對出現就是 BluetoothLeAdvertiser.stopAdvertising() 停止廣播了,傳入開啟廣播時傳遞的廣播回調對象,即可關閉廣播:

​ 雖然通過廣播告知外邊自身擁有這些Service,但手機自身並沒有初始化Gattd的Service。導致外部的中心設備連接手機後,並不能找到對應的 GATT Service 和 獲取對應的數據。

Service類型有兩個級別:

創建 BluetoothGattService 時,傳入兩個參數: UUID 和Service類型:

​ 我們都知道Gatt中, Service 的下一級是 Characteristic , Characteristic 是最小的通信單元,通過對 Characteristic 進行讀寫操作來進行通信。

​ 特徵屬性表示該 BluetoothGattCharacteristic 擁有什麼功能,即能對 BluetoothGattCharacteristic 進行什麼操作。其中主要有3種:

許可權屬性用於配置該特徵值所具有的功能。主要兩種:

Characteristic 下還有 Descriptor ,初始化 BluetoothGattDescriptor 時傳入: Descriptor UUID 和 許可權屬性

為 Service 添加 Characteristic ,為 Characteristic 添加 Descriptor :

​ 通過藍牙管理器 mBluetoothManager 獲取 Gatt Server ,用來添加 Gatt Service 。添加完 Gatt Service 後,外部中心設備連接手機時,將能獲取到對應的 GATT Service 和 獲取對應的數據

​ 定義 Gatt Server 回調。當中心設備連接該手機外設、修改特徵值、讀取特徵值等情況時,會得到相應情況的回調。

最後開啟廣播後,用nRF連接後看到的特徵值信息如下圖所示:(加多了一個只能都的特徵值)

android藍牙BLE(一) —— 掃描

android藍牙BLE(二) —— 通信

android藍牙BLE(三) —— 廣播

android藍牙BLE(四) —— 實戰

⑨ android中如何進行強制類型轉換

Java 的自動轉換

如果下列2個條件都能滿足,那麼將一世慶種類型的數據賦給另外一種類型變數時,將執行自動類型轉換(automatic type conversion):

1,這2種類型是兼容的。
2,目的類型數的范圍比來源類型的大。 ,
當以上2個條件都滿足時,拓寬轉換(widening conversion )發生。
例如,int 型的范圍比所有byte 型的合法范圍大,因此不要求顯式強制類型轉換語句。
對於拓寬轉換,數字類型,包括整數(integer )和浮點(floating-point )類型都是彼此兼容的,
但是,數字類型和字元類型(char)或布爾類型(bollean )是不兼容的。字元類型(char )和布爾類型(bollean )也是互相不兼容的。

不兼容類型的強制轉換

盡管自動類型轉換是很有幫助的,但並不能滿足所有的編程需要。例如,如果你需要將int 型的值賦給一個byte 型的變數,
你將怎麼辦?困返念這種轉換不會自動進行,因為byte 型的變化范圍比int 型的要小。這種轉換有時稱為「縮小轉換」(),
因為你肯定要將源數據類型的值變小才能適合目標數據類型。

為了完成兩種不兼容類型之間的轉換,你就必須進行強制類型轉換。所謂強制類型轉換只不過是一種顯式的類型變換。它的通用格式如下:

(target-type)value

其中,目標類型(target-type )指定了要將指定值轉換成的類型。例如,下面的程序段將int 型強制轉換成byte 型。
如果整數的值超出了byte 型的取值范圍,它的值將會因為對byte 型值域取模(整數除以byte 得到的余數)而減少。

int a;

byte b;

// ...

b = (byte) a;

當把浮點值賦給整數類型時一種不同的類型轉換發生了:截斷(truncation )。你知道整數沒有小數部分。
這樣,當把浮點值賦給整數類型時,它的小數部分汪困會被捨去。例如,如果將值1.23賦給一個整數,其結果值只是1,0.23 被丟棄了。
當然,如果浮點值太大而不能適合目標整數類型,那麼它的值將會因為對目標類型值域取模而減少。

⑩ android byte和byte的區別

估計題寫錯了哇byte與int的區別:
主要是存儲空間的大小和取值范圍不同。
byte佔用1個位元組存儲空間,取值范圍-128~127
int佔用4個位元組存儲空間,取值范圍-2的31次方~2的31次方-1

熱點內容
php函數遞歸 發布:2025-05-20 07:39:36 瀏覽:780
登陸認證失敗請檢查伺服器地址 發布:2025-05-20 07:06:55 瀏覽:831
無限分類實現php 發布:2025-05-20 06:57:40 瀏覽:681
數據結構c語言版嚴蔚敏李冬梅 發布:2025-05-20 06:55:05 瀏覽:449
iphone快捷訪問 發布:2025-05-20 06:55:05 瀏覽:929
如何加密硬碟分區 發布:2025-05-20 06:52:29 瀏覽:363
反編譯gd 發布:2025-05-20 06:52:23 瀏覽:838
java源碼知乎 發布:2025-05-20 06:47:59 瀏覽:483
dos解壓縮命令 發布:2025-05-20 06:47:57 瀏覽:639
安卓傳數據給蘋果的軟體叫什麼 發布:2025-05-20 06:42:48 瀏覽:804