發表文章

目前顯示的是 7月, 2018的文章

簡單的android MediaPlayer 使用

紅定字體為需要自已修改的地方 R.raw.voice_189是要播放的檔案。先在Res中建一個raw的資料匣,把聲音檔放進去,這裡音檔為voice_189 public static MediaPlayer mediaPlayer; if (mediaPlayer == null) {         mediaPlayer = new MediaPlayer();       } mediaPlayer = MediaPlayer.create( this.context .getApplicationContext(), R.raw.voice_189 ); mediaPlayer.setLooping( true ); // Set looping mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); final AudioManager mAudioManager = (AudioManager) this.context.getSystemService(AUDIO_SERVICE); final int originalVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0); 想要關掉如下 確是是否在播放中  isPlaying, 然後先STOP,再RESET。最後真得不要再RELEASE if (mediaPlayer.isPlaying()){         mediaPlayer.stop();         mediaPlayer.reset();         mediaPlayer.release();       }

Python Multi thread

一個簡單的MULTI THREAD from threading import Thread def add_100(): tmp = 0 for i in range(0,100): tmp += i print tmp def add_2000(): tmp = 0 for i in range(0,2000): tmp += i print tmp threads = [] for func in [add_100, add_2000]: threads.append(Thread(target=func)) threads[-1].start() for thread in threads: thread.join() 試一下LOCK 之 無LOCK from threading import Lock, Thread import random, time lock = Lock() g = 0 def add_1000(): global g #lock.acquire() for i in range(0,5): time.sleep(random.randrange(2, 5)) g += 1 print str(g) + "\n" #lock.release() def add_2000(): global g #lock.acquire() for i in range(0,5): time.sleep(random.randrange(2, 5)) g += 10 print str(g) + "\n" #lock.release() threads = [] for func in [add_1000, add_2000]: threads.append(Thread(target=func)) threads[-1].start() for thread in threads: thread.join() 結果 1 11 21 22 32 33 43 44 54 55 g 這個參數被兩個thread 同時更動。 試一

MQTT android studio

先在APP的build.gradle中的dependencies加入以下紅字 dependencies { compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0' compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1' } 然後在 AndroidManifest.xml中加入 <uses-permission android:name="android.permission.INTERNET"> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> <uses-permission android:name="android.permission.WAKE_LOCK"> 在 AndroidManifest.xml <application 加入 <service android:name="org.eclipse.paho.android.service.MqttService" /> 讓我們做一個MqttHelper import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; 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.ec

MQTT 簡介與使用

目前物聯網(IoT)有許多的服務開發,想要萬物皆連網,一張簡單的無線網卡與一個可以做中介溝通的服務器就變成是必要條件。MQTT是乎是目前蠻多人用的一個方案。這個簡介一下。 https://test.mosquitto.org/ 這是一個免費的MQTT服務站。大家可以多多使用。 https://mosquitto.org/download/ 下載頁中有許多作業系統可選,也有程式碼可看。 安裝完後,會有三個可用的程式 mosquitto -> MQTT server,執行後,電腦就有MQTT服務的功能。記得到mosquitto.config中更改一下設定。也要把防火牆設定好。讓MQTT的通訊可以通過。 mosquitto_pub ->發佈 使用方法 mosquitto_pub -h test.mosquitto.org -t  JurassicPark  -m "Hello World" -P password -u username mosquitto_sub ->訂閱 使用方法 mosquitto_sub -h test.mosquitto.org -t  JurassicPark  -P password -u username 如果沒有使用者的設定,-P password -u username是可以省略的。指令上也頗好記。 -h 就是指host,也就是伺服器的IP或是域名。 -t 就是Topic。Topic就是一個要溝通的主題。如果我們訂閱了(如上例) JurassicPark這個主題。也就只能收到針對這個主題發佈的訊息。 -m 就是指要發佈的訊息。 補充幾個名詞 Clean session  指client斷線時,server是否要 保留 client沒有收到的訊息,等client再次連線,再發佈給client。 設為1,不保留。  設為0,保留。 QoS (Quality of Service)  每個 發佈者 或是 訂閱者 都可以設自己的QoS。 有三個level,0,1,2 以下以發佈者跟MQTT代理人(Server)來說明。 設為0 代表發佈者送給MQTT代理人,就不管了。 設為1代表 發佈者送給 MQTT代理人 , MQT