android mqtt詳解_Android mqtt入門 Android studio(轉)

Android mqtt入門 Android studio

2018年04月09日 14:02:30?hbw020?閱讀數:1564

分享 mqtt簡單使用介紹:

1、as創建工程

2、官網下載mqtt支持包放入lib文件,點擊打開鏈接,https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.0/。當前使用的是:

org.eclipse.paho.client.mqttv3-1.2.0.jar

3、然后開始工作:

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;import org.eclipse.paho.client.mqttv3.MqttCallback;import org.eclipse.paho.client.mqttv3.MqttClient;import org.eclipse.paho.client.mqttv3.MqttConnectOptions;import org.eclipse.paho.client.mqttv3.MqttException;import org.eclipse.paho.client.mqttv3.MqttMessage;import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/***全局主服務分發和接收mqtt消息*/public class MQTTServiceextends Service {private static final StringTAG="MQTTService";? ? public final StringSERVICE_CLASSNAME ="de.eclipsemagazin.mqtt.push.MQTTService";? ? private Handlerhandler;? ? //? ? private String host = "tcp://192.168.2.151:1883";//? ? private String userName = "admin";//? ? private String passWord = "password";? ? private int i =1;? ? private static MqttClientclient;? ? //? ? private String myTopic = "qaiot/user/f5c71e03-c324-4b32-823c-563471e86da9";//? ? private String myTopic = "qaiot/user/f5c71e03-c324-4b32";? ? private StringmyTopic ="qaiot/server/user/1.0/cn";? ? StringclientId ="qaiot/user/f5c71e03-c324-4b32";? ? private MqttConnectOptionsoptions;? ? private static ScheduledExecutorServicescheduler;? ? public JooanMQTTService() {? ? }@Override? ? public IBinderonBind(Intent intent) {// TODO: Return the communication channel to the service.throw new UnsupportedOperationException("Not yet implemented");? ? }@Override? ? public void onCreate() {super.onCreate();? ? ? ? initMqttClient();? ? ? ? handler =new Handler() {@Override? ? ? ? ? ? public void handleMessage(Message msg) {super.handleMessage(msg);? ? ? ? ? ? ? ? if (msg.what ==1) {? ? ? ? ? ? ? ? ? ? Toast.makeText(JooanApplication.get(), (String) msg.obj, Toast.LENGTH_SHORT).show();? ? ? ? ? ? ? ? ? ? NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);? ? ? ? ? ? ? ? ? ? Notification notification =new Notification(R.drawable.menu_item_small_bg, "Mqtt即時推送", System.currentTimeMillis());//? ? ? ? ? ? ? ? ? ? notification.contentView = new RemoteViews("com.hxht.testmqttclient", R.layout.activity_notification);? ? ? ? ? ? ? ? ? ? notification.contentView =new RemoteViews("com.jooan.qiaoanzhilian", R.layout.service_jooan_mqtt_notification);? ? ? ? ? ? ? ? ? ? notification.contentView.setTextViewText(R.id.tv_desc, (String) msg.obj);? ? ? ? ? ? ? ? ? ? notification.defaults = Notification.DEFAULT_SOUND;? ? ? ? ? ? ? ? ? ? notification.flags = Notification.FLAG_AUTO_CANCEL;? ? ? ? ? ? ? ? ? ? manager.notify(i++, notification);? ? ? ? ? ? ? ? ? ? Log.e(TAG, "Mqtt收到推送結果: " + (String) msg.obj);? ? ? ? ? ? ? ? }else if (msg.what ==2) {? ? ? ? ? ? ? ? ? ? Log.i(TAG, "連接成功");? ? ? ? ? ? ? ? ? ? Toast.makeText(JooanApplication.get(), "連接成功", Toast.LENGTH_SHORT).show();? ? ? ? ? ? ? ? ? ? try {client.subscribe(clientId, 1);? ? ? ? ? ? ? ? ? ? }catch (Exception e) {? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace();? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? }else if (msg.what ==3) {? ? ? ? ? ? ? ? ? ? Toast.makeText(JooanApplication.get(), "連接失敗,系統正在重連", Toast.LENGTH_SHORT).show();? ? ? ? ? ? ? ? ? ? Log.i(TAG, "連接失敗,系統正在重連");? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? };? ? ? ? startReconnect();? ? }private void initMqttClient() {try {//host為主機名,test為clientid即連接MQTT的客戶端ID,一般以客戶端唯一標識符表示,MemoryPersistence設置clientid的保存形式,默認為以內存保存? ? ? ? ? ? client=new MqttClient(JooanApplication.get().BROKER_URL, myTopic, new MemoryPersistence());? ? ? ? ? ? //MQTT的連接設置? ? ? ? ? ? options =new MqttConnectOptions();? ? ? ? ? ? //設置是否清空session,這里如果設置為false表示服務器會保留客戶端的連接記錄,這里設置為true表示每次連接到服務器都以新的身份連接? ? ? ? ? ? options.setCleanSession(true);? ? ? ? ? ? //設置連接的用戶名? ? ? ? ? ? options.setUserName(JooanApplication.get().userName);? ? ? ? ? ? //設置連接的密碼? ? ? ? ? ? options.setPassword(JooanApplication.get().passWord.toCharArray());? ? ? ? ? ? // 設置超時時間 單位為秒? ? ? ? ? ? options.setConnectionTimeout(10);? ? ? ? ? ? // 設置會話心跳時間 單位為秒 服務器會每隔1.5*20秒的時間向客戶端發送個消息判斷客戶端是否在線,但這個方法并沒有重連的機制? ? ? ? ? ? options.setKeepAliveInterval(20);//? ? ? ? ? ? options.setWill();//如果項目中需要知道客戶端是否掉線可以調用該方法? ? ? ? ? ? //設置回調? ? ? ? ? ? client.setCallback(new MqttCallback() {@Override? ? ? ? ? ? ? ? public void connectionLost(Throwable cause) {//連接丟失后,一般在這里面進行重連? ? ? ? ? ? ? ? ? ? Log.w(TAG, "connectionLost----------: " + cause.getMessage());? ? ? ? ? ? ? ? }@Override? ? ? ? ? ? ? ? public void messageArrived(String topic, MqttMessage message)throws Exception {//subscribe后得到的消息會執行到這里面? ? ? ? ? ? ? ? ? ? Log.w(TAG, "messageArrived---------- ");? ? ? ? ? ? ? ? ? ? Message msg =new Message();? ? ? ? ? ? ? ? ? ? msg.what =1;? ? ? ? ? ? ? ? ? ? msg.obj = topic +"---" + message.toString();? ? ? ? ? ? ? ? ? ? handler.sendMessage(msg);? ? ? ? ? ? ? ? }@Override? ? ? ? ? ? ? ? public void deliveryComplete(IMqttDeliveryToken token) {//publish后會執行到這里? ? ? ? ? ? ? ? ? ? Log.w(TAG, "deliveryComplete---------: " + token.isComplete());? ? ? ? ? ? ? ? }? ? ? ? ? ? });? ? ? ? }catch (Exception e) {? ? ? ? ? ? e.printStackTrace();? ? ? ? }? ? }private void startReconnect() {scheduler= Executors.newSingleThreadScheduledExecutor();? ? ? ? scheduler.scheduleAtFixedRate(new Runnable() {@Override? ? ? ? ? ? public void run() {if (!client.isConnected()) {? ? ? ? ? ? ? ? ? ? connect();? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? }, 0 *1000, 10 *1000, TimeUnit.MILLISECONDS);? ? }private void connect() {new Thread(new Runnable() {@Override? ? ? ? ? ? public void run() {try {client.connect(options);? ? ? ? ? ? ? ? ? ? Message msg =new Message();? ? ? ? ? ? ? ? ? ? msg.what =2;? ? ? ? ? ? ? ? ? ? handler.sendMessage(msg);? ? ? ? ? ? ? ? }catch (Exception e) {? ? ? ? ? ? ? ? ? ? e.printStackTrace();? ? ? ? ? ? ? ? ? ? Message msg =new Message();? ? ? ? ? ? ? ? ? ? msg.what =3;? ? ? ? ? ? ? ? ? ? handler.sendMessage(msg);? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? }).start();? ? }//? ? 判斷服務是否運行中? ? private boolean serviceIsRunning() {? ? ? ? ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);? ? ? ? for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {if (SERVICE_CLASSNAME.equals(service.service.getClassName())) {return true;? ? ? ? ? ? }? ? ? ? }return false;? ? }public static void stopJooanMQTTService() {if (client!=null) {try {client.disconnect();? ? ? ? ? ? }catch (Exception e) {? ? ? ? ? ? ? ? e.printStackTrace();? ? ? ? ? ? }? ? ? ? }if (scheduler!=null) {try {scheduler.shutdown();? ? ? ? ? ? }catch (Exception e) {? ? ? ? ? ? ? ? e.printStackTrace();? ? ? ? ? ? }? ? ? ? }? ? }}

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;import org.eclipse.paho.client.mqttv3.MqttCallback;import org.eclipse.paho.client.mqttv3.MqttException;import org.eclipse.paho.client.mqttv3.MqttMessage;/***發布消息的回調類**必須實現MqttCallback的接口并實現對應的相關接口方法*? ? ? ?CallBack類將實現MqttCallBack。每個客戶機標識都需要一個回調實例。在此示例中,構造函數傳遞客戶機標識以另存為實例數據。*在回調中,將它用來標識已經啟動了該回調的哪個實例。*? ?必須在回調類中實現三個方法:**http://topmanopensource.iteye.com/blog/1700424*@authorlonggangbai*/public class MQTTPushCallbackimplements MqttCallback {private static final StringTAG="PushCallback";? ? private ContextWrappercontext;? ? public JooanMQTTPushCallback(ContextWrapper context) {this.context = context;? ? }/***接收到消息的回調的方法:接收已經預訂的發布*/@Override? ? public void messageArrived(String topic, MqttMessage message)throws Exception {//subscribe(訂閱主題)后得到的消息會執行到這里面//? ? ? ? final NotificationManager notificationManager = (NotificationManager)//? ? ? ? ? ? ? ? context.getSystemService(Context.NOTIFICATION_SERVICE);? ? ? ? final Notification notification = new Notification(R.drawable.snow,//? ? ? ? ? ? ? ? "Black Ice Warning!", System.currentTimeMillis());? ? ? ? // Hide the notification after its selected//? ? ? ? notification.flags |= Notification.FLAG_AUTO_CANCEL;? ? ? ? final Intent intent = new Intent(context, BlackIceActivity.class);//? ? ? ? final PendingIntent activity = PendingIntent.getActivity(context, 0, intent, 0);//? ? ? ? notification.setLatestEventInfo(context, "Black Ice Warning", "Outdoor temperature is " +//? ? ? ? ? ? ? ? new String(message.getPayload()) + "°", activity);//? ? ? ? notification.number += 1;//? ? ? ? notificationManager.notify(0, notification);? ? ? ? Log.w(TAG, "messageArrived: " +"topicName:" + topic +",messageArrived,訂發送消息失敗: " +new String(message.getPayload()));? ? }/***接收到已經發布的QoS 1或QoS 2消息的傳遞令牌時調用。*@paramtoken由MqttClient.connect激活此回調。*/@Override? ? public void deliveryComplete(IMqttDeliveryToken token) {//We do not need this because we do not publish//publish(發送消息)后會執行到這里? ? ? ? try {? ? ? ? ? ? Log.i("PushCallback", "deliveryComplete: " + token.getMessage().toString());? ? ? ? }catch (MqttException e) {? ? ? ? ? ? e.printStackTrace();? ? ? ? }try {? ? ? ? ? ? Log.i(TAG,"Delivery token \"" + token.hashCode());? ? ? ? ? ? System.out.println("訂閱主題: " + token.getMessageId());? ? ? ? ? ? System.out.println("消息數據: " + token.getTopics().toString());? ? ? ? ? ? System.out.println("消息級別(0,1,2): " + token.getGrantedQos().toString());? ? ? ? ? ? System.out.println("是否是實時發送的消息(false=實時,true=服務器上保留的最后消息): " + token.isComplete());? ? ? ? }catch (Exception e) {? ? ? ? ? ? e.printStackTrace();? ? ? ? }? ? }/***當客戶機和broker意外斷開時觸發*可以再此處理重新訂閱*/@Override? ? public void connectionLost(Throwable cause) {//We should reconnect here? //連接丟失后,一般在這里面進行重連? ? ? ? Log.w(TAG, "connectionLost: " + cause.getMessage());? ? ? ? cause.printStackTrace();? ? }}

activity調用發送消息(主題和消息主題與服務器定義一致):

public String BROKER_URL = "tcp://192.168.1.151:1883";//broker host服務器地址

private MqttClient mqttClient;

private String clientId = "qaiot/user/f5c71e03-c324-4b32";

private String TOPIC = "qaiot/server/user/1.0/cn";

@Override

protected void onCreate(Bundle savedInstanceState) {//啟動服務

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_jooan_login);

startService(new Intent(this,MQTTService.class));

}

//發送消息代碼:

new Thread(new Runnable() {

@Override

public void run() {

LogUtil.i("開始登錄");

try {

//創建MqttClient對象

mqttClient = new MqttClient(JooanApplication.get().BROKER_URL, clientId, new MemoryPersistence());

//MqttClient綁定

mqttClient.setCallback(new JooanMQTTPushCallback(JooanLoginActivity.this));

//? ? ? ? ? ? ? ? ? ? ---------------------------------------------------------------

//? ? ? ? ? ? ? ? ? ? MqttConnectOptions connOpts = new MqttConnectOptions();

//? ? ? ? ? ? ? ? ? ? connOpts.setCleanSession(true);

//? ? ? ? ? ? ? ? ? ? System.out.println("Connecting to broker: "+BROKER_URL);

//? ? ? ? ? ? ? ? ? ? mqttClient.connect(connOpts);

//? ? ? ? ? ? ? ? ? ? System.out.println("Connected");

//? ? ? ? ? ? ? ? ? ? System.out.println("Publishing message: "+"Message from MqttPublishSample");

//? ? ? ? ? ? ? ? ? ? ---------------------------------------------------------------

//MqttClient綁定

mqttClient.connect();

//Subscribe to all subtopics of homeautomation

//? ? ? ? ? ? ? ? ? ? mqttClient.subscribe(TOPIC);

//創建MQTT相關的主題

MqttTopic temperatureTopic = mqttClient.getTopic(TOPIC);

Gson gson = new Gson();

String toJson = gson.toJson(getData());

Log.e("MQTTService", "gson對象:" + toJson);

//創建MQTT的消息體

MqttMessage message = new MqttMessage(toJson.getBytes());

//設置消息傳輸的類型:消息級別(0,1,2)

message.setQos(1);

//設置是否在服務器中保存消息體

message.setRetained(false);

//設置消息的內容

//? ? ? ? ? ? ? ? ? ? message.setPayload(WSMQTTServerCommon.publication.getBytes());

//發送消息并獲取回執

MqttDeliveryToken token = temperatureTopic.publish(message);//發送消息

//? ? ? ? ? ? ? ? ? ? token.waitForCompletion();設置超時

System.out.println("Publishing \"" + message.toString()

+ "\" on topic \"" + temperatureTopic.getName() + "\" with QoS = "

+ message.getQos());

System.out.println("For client instance \"" + mqttClient.getClientId()

+ "\" on address " + mqttClient.getServerURI() + "\"");

System.out.println("With delivery token \"" + token.hashCode()

+ " delivered: " + token.isComplete());

//關閉連接

//? ? ? ? ? ? ? ? ? ? if (mqttClient.isConnected())

//? ? ? ? ? ? ? ? ? ? ? ? mqttClient.disconnect(Integer.parseInt(System.getProperty("timeout", "10000")));

//? ? ? ? ? ? ? ? ? ? Log.i(TAG, "發送消息的超時時間: "+Integer.parseInt(System.getProperty("timeout", "10000")));

} catch (MqttException e) {

Toast.makeText(getApplicationContext(), "Something went wrong!" + e.getMessage(), Toast.LENGTH_LONG).show();

e.printStackTrace();

LogUtil.i(e.getMessage());

}

}

}).start();

@Override

protected void onDestroy() {

super.onDestroy();

recycler_view.clearOnScrollListeners();

JooanMQTTService.stopMQTTService();//停止服務

Intent intent = new Intent(this, MQTTService.class);

stopService(intent);

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533789.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533789.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533789.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jupyter kernel_新鄉聯通案例分享:Jupyter開發環境配置的常用技巧

Jupyter開發環境配置的常用技巧新鄉聯通網管中心 邢少華Python開發環境中,大部分人使用的是Jupyter,在Jupyter中有幾個令人困擾的問題:1. Jupyter的默認打開目錄如何修改2. Jupyter默認使用的瀏覽器如何修改3. 好用的Jupyter插件如何安裝4.…

東北大學c語言及程序設計,東大20秋學期《C語言及程序設計》在線平時作業1參考...

20秋學期《C語言及程序設計》在線平時作業1( j- V: Z* f0 i V& k% b, S. ?/ _8 ~1.[單選題] 在C語言中,引用數組元素時,其數組下標的數據類型允許是()。2 6 g, p1 C$ P; B$ _( J附件是答案,核對題目下載4 m1 F; D: R* q; AA.整型常量- _…

mac安裝ipython_Mac下安裝ipython與jupyter

IPython從Python發展而來,更傾向于科學計算。互聯網數據分析更喜歡用。首先切換root用戶:sudo su -pip3自動安裝ipythonMacBook-Pro:~ root# pip3 install ipython自動安裝完成后建立軟連接,方便使用MacBook-Pro:bin root# ln -s /Library/Fr…

二叉樹 中序遍歷 python_LeetCode 105 樹 從前序與中序遍歷序列構造二叉樹(Medium)

17(105) 從前序與中序遍歷序列構造二叉樹(Medium)描述根據一棵樹的前序遍歷與中序遍歷構造二叉樹。注意: 你可以假設樹中沒有重復的元素。示例例如,給出前序遍歷 preorder [3,9,20,15,7] 中序遍歷 inorder [9,3,15,20,7]返回如下的二叉樹:3/ 9 20/ 1…

c語言刪除雙向鏈表重復元素,求一個雙向鏈表的建立,插入刪除的c語言程序完整版的,借鑒一下思想,再多說一下就是能運行的那種...

最佳答案//鏈表的操作編輯//線性表的雙向鏈表存儲結構typedef struct DuLNode{ElemType data;struct DuLNode *prior,*next;}DuLNode,*DuLinkList;////帶頭結點的雙向循環鏈表的基本操作void InitList(DuLinkList L){ /* 產生空的雙向循環鏈表L */L(DuLinkList)malloc(sizeof(D…

華為p10和p10plus區別_華為p10和p10plus哪個好 華為p10與p10plus區別對比【圖文】

華為p10與p10plus是華為在2017年的首發旗艦手機,作為顏值與配置都很亮眼的華為p10與p10plus自然成了大眾的焦點,當然也就避不可免的用來對比。究竟華為p10和p10plus哪個好?下面小編就來給大家講講華為p10與p10plus的區別對比。華為P10與P10 Plus區別對比…

python數學圓周率_Python編程超簡單方法算圓周率

我們都知道,圓周率是3.1415926也就是π,但你有沒有想過,圓周率是怎么算出來的呢? 這個是德國數學家萊布尼茲發明的算圓周率的方法,公式為:π4(1-1/31/51/71/9-1/11……),其中,分母每…

計算payload長度c語言,C語言0長度數組(可變數組/柔性數組)詳解

1 零長度數組概念眾所周知, GNU/GCC 在標準的 C/C 基礎上做了有實用性的擴展, 零長度數組(Arrays of Length Zero) 就是其中一個知名的擴展.多數情況下, 其應用在變長數組中, 其定義如下struct Packet{ int state; int len; char cData[0]; //這里的0長結構體就為變長結構體提供…

iphone主屏幕動態壁紙_iPhone8怎么設置動態壁紙?iPhone8動態壁紙設置教程

iPhone8怎么設置動態壁紙?朋友們平時想把一些拍攝的動態圖片設置iPhone8壁紙,該怎么設置呢?估計有 不少朋友還不知道如何設置, 在這里我就來為大家介紹一下iPhone8設置動態壁紙的教程,一起來看一看吧!iPhone8動態壁紙設置教程首先打開iPhon…

python封裝介紹_談python3的封裝

這章給大家介紹,如何封裝一個簡單的python庫首先創建一個以下型式的文件結構rootFile/setup.pyexample_package/__init__.pyexample_module.pyexample_package2/__init__.pyexample_module.py其中的兩個__init__.py可以是一個空文件,但是它是導入package…

go語言調用c 的頭文件 so,golang 學習(10): 使用go語言調用c語言的so動態庫-Go語言中文社區...

一、前言最近在學習go,因為需要調用c語言打包成的so動態庫里面的方法,避免自己再去造輪子,所以想直接使用golang調用so,但是參考了其他博客大佬寫的,我每一步原封不動的寫下來,結果都是一堆錯誤&#xff0c…

log nginx 客戶端請求大小_Nginx日志分析和參數詳解

本文檔主要介紹Nginx設置日志參數的作用,以及Nginx日志常用分析命令基本大綱:1.Nginx日志記錄格式的介紹2.Nginx日志參數詳解3.Web服務流量名詞介紹4.Nginx日志常用分析命令示范一:Nginx日志記錄格式的介紹log_format用來設置日志的記錄格式&…

python函數的封裝調用_Python封裝一個函數來打印到變量

如果我有一個包含大量打印語句的函數: 即. def funA(): print "Hi" print "There" print "Friend" print "!" 我想做的是這樣的事情 def main(): ##funA() does not print to screen here a getPrint(funA()) ##where get…

android 開機動畫 漸變,[Parallax Animation]實現知乎 Android 客戶端啟動頁視差滾動效果...

前言Parallax Scrolling (視差滾動),是一種常見的動畫效果。視差一詞來源于天文學,但在日常生活中也有它的身影。在疾馳的動車上看風景時,會發現越是離得近的,相對運動速度越快,而遠處的山川河流只是緩慢的移動著&…

js訪問對方手機文件夾_求JS大神幫我寫個利用JS來實現手機端和PC端訪問自動選擇樣式文件代碼...

展開全部現在比較流行的辦法是 一個網站2套代碼,一套是手機一套pc,在網站首頁開e68a84e8a2ad3231313335323631343130323136353331333363353735頭寫上一段識別各瀏覽器的判斷方法,根據結果引入不同的樣式詳細判斷如下:var browser{…

python可以做計量分析嗎_技術分享 - python數據分析(2)——數據特征分析(上)...

1 分布分析 分布分析能揭示數據的分布特征和分布類型。對于定量數據,欲了解其分布形式是對稱的還是非對稱的,發現某些特大或特小的可疑值,可通過繪制頻率分布表、繪制頻率分布直方圖、繪制莖葉圖進行直觀地分析;對于定性分類數據&…

android lrc 歌詞顯示,Android歌詞 AndroidLrc歌詞

[ti:Android][ar:川畑要][al:0][by:黃病病][00:00.00][00:01.69]Android[00:07.51]歌手:川畑要[00:10.96]作詞:Kaname Kawabata[00:12.64]作曲:UTAKaname Kawabata[00:14.06]BY:黃病病[00:15.80][00:15.66]一際目を引くまるでandroid[00:23.1…

web前端開發技術期末考試_Web前端開發技術期末試題1

絕密★啟用前Web前端開發技術期一、單項選擇題(本大題共25小題,每小題1分,共25分)1.網頁制作工具按照其工作方式可分為( )A.HTML語言和非HTML語言兩大類B.DHTML方式和JavaScript方式兩大類C.標注型網頁制作工具和所見即所得型網頁制作工具兩大類D.基于Wi…

matlab的7.3版本是什么_樂建工程寶V6.3版本升級說明公告

尊敬的樂建工程寶客戶:您好!為了給客戶提供更加優質的產品和服務,我司已于2019年11月20日開始樂建工程寶V6.3版本升級服務。目前,Android系統各應用市場已基本審核完畢,iOS系統已上傳AppStore,目前蘋果官方…

魅族android 版本 6.0下載,flyme6.0內測版

由魅族開發的全新安卓系統flyme6.0系統固件已經到來,相對于Flyme 5系統有了眾多改變和提升,全新的智能服務系統,多達400于項全新功能,同時讓操作界面更加簡潔,易于操作,而系統運行速度也將有所提升&#xf…