多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > android 用signalr 實現推送服務

android 用signalr 實現推送服務

來源:程序員人生   發布時間:2015-03-17 09:15:58 閱讀次數:8902次

我做的app需要實現signalr 推送服務 

有兩種方法

1種人家已給我們集成了還有視頻教程

地址為 https://www.youtube.com/watch?v=f9ih_M7PC10  下載的程序在這 依照視頻做,但是更新了我沒成功完成 https://www.youtube.com/watch?v=f9ih_M7PC10

第2種自己集成  

  1共分兩步

     第1步我是在activity 里面實現接收伏務器推送的數據

首先 google上面下載 java-client 地址 https://github.com/SignalR/java-client

再下載 basic-http-client-android-0.88.jar  地址 basic-http-client-android-0.88.jar

這兩個是準備工作,下面就是 生成自己需要的包jar 

1.Open Android Studio, click "Import Non-Android Studio Project" and select the cloned directory

Build the project.

The signalr-client-sdk.jar will be generated inside the /signalr-client-sdk/build/libs folder

The signalr-client-sdk-android.aar will be generated inside the /signalr-client-sdk-android/build/outputs/aar folder

2.這里用eclipse的只有jar有用了,aar得自己重新做了,這里我講1下怎樣做的

解壓aar 去除布局部份重新打包.jar     Rename *.aar to *.zip and extract the jar.意思是先重新命名aar為zip解壓提取里面的jar 


3。視頻中打包的longPolling。jar 我這邊不1樣所以打包不起來,選擇把用到的所有類全部加在1個包中 其實就相當于解壓打包的。固然eclipse里面后期你可以重新打包了用。


4.編程階段 在activity里面調用很簡單的

public class SignalrActivity extends Activity {


private ImageButton goback;
private TextView what;
private IHubProxy hub = null;
private HubConnection conn = null;
// private final static String
// HUB_URL="http://192.168.1.200:82/signalr/hubs";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.signalr_layout);
goback = (ImageButton) findViewById(R.id.goback);
goback.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
SignalrActivity.this.finish();
}
});
what = (TextView) findViewById(R.id.what);
conn = new HubConnection(Icons.HUB_URL, this,
new LongPollingTransport()) {
@Override
public void OnError(Exception exception) {
}
@Override
public void OnMessage(String message) {
what.setText(message);
}
@Override
public void OnStateChanged(StateBase oldState, StateBase newState) {
}
};
conn.getHeaders().put("Cookie",
"BearerToken=" + SharedPref.getToken(getApplicationContext()));
beginConnect();
}


private void beginConnect() {
// TODO Auto-generated method stub
try {
hub = conn.CreateHubProxy("clientHub");
} catch (OperationApplicationException e) {
e.printStackTrace();
}
hub.On("debug1", new HubOnDataCallback() {//addNewMessageToPage
@Override
public void OnReceived(JSONArray args) {
for (int i = 0; i < args.length(); i++) {
Toast.makeText(getApplicationContext(), "chen"+args, Toast.LENGTH_SHORT
).show();
}
}
});
conn.Start();
}
}

這里就能夠看到推送的消息了。

第2步在你不運行程序的時候實現通知欄通知推送的消息

那就是得自己先寫1個服務了其實很簡單,就是相當于把activity改成service

public class SignalrPushService extends Service {
private String message;
private boolean quit;
private MyBinder binder = new MyBinder();
private IHubProxy hub = null;
private HubConnection conn = null;
// 通知欄消息 數量
private int messageNotificationID = 0;
@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
@SuppressWarnings("deprecation")
public void handleMessage(Message msg) {
if(messageNotificationID<5){
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 構建1個通知對象(需要傳遞的參數有3個,分別是圖標,標題和 時間)
Notification notification = new Notification(
R.drawable.ic_launcher, "通知", System.currentTimeMillis());
Intent intent1 = new Intent(SignalrPushService.this,
AllAlarmActivity.class);//跳轉到查看的activity
PendingIntent pendingIntent = PendingIntent.getActivity(
SignalrPushService.this, 0, intent1, 0);
notification.setLatestEventInfo(getApplicationContext(), "報警提示",
message, pendingIntent);
notification.flags = Notification.FLAG_AUTO_CANCEL;// 點擊后自動消失
notification.defaults = Notification.DEFAULT_SOUND;// 聲音默許
manager.notify(messageNotificationID, notification);// 發動通知,id由自己指定,每個Notification對應的唯1標志
messageNotificationID++;
}
}
};


public class MyBinder extends Binder // ①
{
public String getMessage() {
// 獲得Service的運行狀態:count
return message;
}
}


@Override
public IBinder onBind(Intent arg0) {
return binder;
}


@Override
public void onCreate() {
super.onCreate();
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread() {
public void run() {
Looper.prepare();
beginConnect();// 從服務端獲得消息
Looper.loop();
};
}.start();
return super.onStartCommand(intent, flags, startId);
}


@Override
public void onDestroy() {
super.onDestroy();
this.quit = true;
}


private void beginConnect() {


// TODO Auto-generated method stub
conn = new HubConnection(Icons.HUB_URL, getBaseContext(),
new LongPollingTransport()) {
@Override
public void OnMessage(String message) {
SignalrPushService.this.message = message;
handler.sendEmptyMessage(0);
}
};
conn.getHeaders().put("Cookie",
"BearerToken=" + SharedPref.getToken(getApplicationContext()));
quit = false;
while (!quit) {
try {
hub = conn.CreateHubProxy("clientHub");
} catch (OperationApplicationException e) {
e.printStackTrace();
}
/*
* hub.On("debug1", new HubOnDataCallback() {//addNewMessageToPage

* @Override public void OnReceived(JSONArray args) { Message msg =
* handler.obtainMessage(); msg.what = 1; handler.sendMessage(msg);
* Toast.makeText(SignalrPushService.this, args+"",
* Toast.LENGTH_SHORT).show(); } });
*/
conn.Start();
}
}
}

我的服務由于服務器加密了所以得加1步

conn.getHeaders().put("Cookie",
"BearerToken=" + SharedPref.getToken(getApplicationContext()));

多加了1個head  cookie 

這里是新建了1個線程來啟動signalr

到此就實現了推送服務。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 永久免费网站 | 叼嘿在线观看 | 波多野结衣成人 | 国产精品久久久亚洲456 | 国产一区二区三区久久精品 | 一区二区三区欧美日韩国产 | 中文字幕乱码视频中文字幕14 | 国产1区2区三区不卡 | 高清视频在线播放 | 日韩视频一区 | 综合亚洲欧美日韩一区二区 | 波多野结衣在线观看一区 | 国产一区二区网站 | 欧美性色网 | 日产免费线路一区二区三区 | 亚洲免费观看在线视频 | 亚洲精品天堂 | 火辣福利网站 | 最近中文字幕免费国语 | 亚洲都市春色系列小说类型 | 国产美女久久久亚洲 | 日本欧美一区二区三区不卡视频 | 国产成人一区免费观看 | 中文字幕在线第一页 | 中文在线免费视频 | 欧美性大战久久久久久久 | 在线精品自拍亚洲第一区 | 日韩一级欧美一级一级国产 | 国产黄色在线网站 | 国产永久高清免费动作片www | 亚洲成人黄色网址 | 麻豆精品不卡国产免费看 | 国产免费一级精品视频 | 伊人影院综合 | 亚洲精品图 | 91av综合 | 欧美18 videosex69| 91久久在线 | 亚洲欧美综合在线观看 | 日韩高清一区二区三区五区七区 | 中文乱码一二三四有限公司 |