使用了2個event ,text 以及 color,分別用來改變ImageView顏色及TextView內容。
架構說明
server(python) --->Pusher Service --->Android app
訊息內容為Json格式
{
"message": "Hello"
}
顏色內容Json格式
{
"color": "#FF00FF"
}
接下來看一下程式碼
MainActivity.java
import android.graphics.Color; import android.os.Handler; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; import android.widget.ImageView; import android.widget.TextView; import com.pusher.client.Pusher; import com.pusher.client.channel.Channel; import com.pusher.client.channel.SubscriptionEventListener; import org.json.JSONException; import org.json.JSONObject; public class MainActivity extends ActionBarActivity { final String TEXTEVENT="text"; final String ColorEvent="color"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initPusher(); } private void initPusher() { final TextView message =(TextView)findViewById(R.id.message); final ImageView color=(ImageView)findViewById(R.id.color); final Handler mHandler=new Handler(); Pusher pusher = new Pusher("my key"); Channel channel = pusher.subscribe("test_channel"); channel.bind(TEXTEVENT, new SubscriptionEventListener() { @Override public void onEvent(String channelName, final String eventName, final String data) { Log.d(TEXTEVENT , data); mHandler.post(new Runnable() { @Override public void run() { try { JSONObject jobj = new JSONObject(data); Log.d(TEXTEVENT , jobj.optString("message")); message.setText(jobj.optString("message")); } catch(JSONException jsonEx) { } } }); } }); channel.bind(ColorEvent, new SubscriptionEventListener() { @Override public void onEvent(String channelName, final String eventName, final String data) { mHandler.post(new Runnable() { @Override public void run() { try { JSONObject jobj = new JSONObject(data); color.setBackgroundColor(Color.parseColor(jobj.getString("color"))); } catch(JSONException jsonEx) { } } }); } }); pusher.connect(); } }
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:id="@+id/message" /> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/color" /> </LinearLayout>
記得在Androidmanifest.xml中加入上網的權限(Pusher範例code沒有提醒這個)
<uses-permission android:name="android.permission.INTERNET" />
接下來是增加幾行東西到build.gradle(module: app)裡面
repositories { maven { url 'http://clojars.org/repo' } } dependencies { compile 'com.pusher:pusher-java-client:1.0.0' }
最後是Server端的Python 程式碼
import pusher p = pusher.Pusher( app_id='my id', key='my key', secret='my sec', ssl=True, port=443 ) p.trigger('test_channel', 'text', {'message': 'hello Android'}) p.trigger('test_channel', 'color', {'color': '#ff0000'})
執行結果
接下來我們用一個影片來試看看,Pusher送達的速度,平板走家裡的WiFi,
手機走的是行動網路。
最後還是要提醒大家一件事,Pusher沒有保證送達喔,如果你的裝置並沒有
與Pusher服務連接,你送出去的訊息,是會石沉大海的,所以建議還是做一
個驗證機置啦,push這種東西,常見的用途就是一個事件的觸發,例如喚醒
某個功能,之後就由那個功能接手動作,以及向server回報收到訊息。
沒有留言:
張貼留言