十年網站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網站問題一站解決
今天就跟大家聊聊有關Android如何通過接收UDP消息改寫程序配置,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

創(chuàng)新互聯2013年至今,先為五臺等服務建站,五臺等地企業(yè),進行企業(yè)商務咨詢服務。為五臺企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
Android程序打包成APK發(fā)布后,如果有參數需要根據不同應用環(huán)境作修改,該如何實現呢?
比如這里有個應用場景,Android程序需要調用服務器端的WebService服務來進行后臺數據庫操作,而WebService的IP地址隨各個生產環(huán)境有所不同,如果每次都因為地址的變更而重新編譯打包程序,明顯不便。如果我們能找到一種方式,在不對APK程序做任何改動的情況下,動態(tài)修改這個地址參數配置,將是多么靈活。
還有其它一些場景也需要APK應用程序能隨時改變并且記住我們的設置,如一個安卓電視機大屏,需要實時展示一個HTML網頁報表,那么我們的Web頁面地址就需要發(fā)送給這個APK應用,讓其記住我們的設置,下次程序打開后就可以自動顯示到我們的報表頁面了。
要實現這些需求,一個比較簡單的方法就是通過向APP應用程序發(fā)送UDP消息,將APP需要的一些配置參數發(fā)送給它,APP接收到消息取到參數后,將其保存在手機系統(tǒng)特定的位置,以后程序再打開后就可以讀取到這些設置。
在Android系統(tǒng)中,每當APP應用程序安裝后,都會在系統(tǒng)的data/data目錄下新建一個以應用程序包名稱命名的文件夾,該文件夾包含了應用程序的文件資源,稱之為內部存儲文件。雖然沒有ROOT的手機看不到該文件夾,但其實質存在。我們可以在該文件夾中建立自己的存儲文件,比如建立一個配置文本,存放應用的一些參數配置數據。應用卸載后,這些文件內容自然消失。因此,我們可以在這個路徑下創(chuàng)建自己的配置文件,將通過UDP接收到的參數保存在該文件中。
接收UDP消息是阻塞式的,也就是說直到收到UDP消息后才會繼續(xù)下一步,因此我們把這個過程放在一個獨立的線程中。以下創(chuàng)建一個線程類專門用于接收固定端口的UDP消息,并將接收到的消息文本寫入data/data下指定的文本文件中。
public class UdpReceiveThread extends Thread {
private final String TAG = "UdpReceiveThread";
private Context context;
// 該構造函數用于將主活動線程的上下文環(huán)境傳遞進來
public UdpReceiveThread(Context c)
{
context = c;
}
@Override
public void run() {
while (isAlive()) try {
sleep(1000);
DatagramSocket socket = new DatagramSocket(8808); // 端口固定為8808
byte data[] = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
socket.receive(packet); // 阻塞式,接收發(fā)送方的packet
String result = new String(packet.getData(), packet.getOffset(), packet.getLength());
// 將從UDP端口接收到的消息寫入Android內部存儲文件中做為程序配置參數
try {
FileOutputStream fos = context.openFileOutput("MyScan.txt", Context.MODE_PRIVATE);
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
osw.write(result);
osw.flush();
fos.flush();
osw.close();
fos.close();
} catch (Exception e) {
Log.d(TAG, "run: " + e.getMessage());
break;
}
} catch (Exception e) {
Log.d(TAG, "run: " + e.getMessage());
break;
}
}
}在主Activity活動的onCreate函數中添加以下代碼,從手機系統(tǒng)的data/data路徑中讀取程序配置,調用接收UDP消息的子線程,并將活動的上下文環(huán)境傳遞給子線程。
public void onCreate(Bundle savedInstanceState) {
...
// 從Android內部存儲文件中讀取配置
try {
FileInputStream fis = openFileInput("MyScan.txt");
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
char[] input = new char[fis.available()]; // available()用于獲取文件內容的長度
isr.read(input);
isr.close();
fis.close();
String str = new String(input);
ws_url = str;
} catch (Exception e){
Log.d(TAG, "onCreate: " + e.getMessage());
}
...
// 調用UDP接收線程循環(huán)監(jiān)聽端口消息
UdpReceiveThread udpThread = new UdpReceiveThread(getApplicationContext());
udpThread.start();
...
}由此,程序在運行過程中,一旦接收到固定端口發(fā)來的UDP消息后,將改寫配置,并在下次啟動時,以新的配置參數運行。
看完上述內容,你們對Android如何通過接收UDP消息改寫程序配置有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創(chuàng)新互聯行業(yè)資訊頻道,感謝大家的支持。