android 推送服务实现,android 用signalr 实现推送服务

我做的app需要实现signalr 推送服务

有两种方法

一种人家已经给我们集成了还有视频教程

第二种自己集成

一共分两步

第一步我是在activity 里面实现接收服务器推送的数据

这两个是准备工作,下面就是 生成自己需要的包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得自己重新做了,这里我讲一下怎么做的

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

infodetail-658219.html

3。视频中打包的longPolling。jar 我这边不一样所以打包不起来,选择把用到的所有类全部加在一个包中 其实就相当于解压打包的。当然eclipse里面后期你可以重新打包了用。

infodetail-658219.html

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();

}

}

这里就可以看到推送的消息了。

第二步在你不运行程序的时候实现通知栏通知推送的消息

那就是得自己先写一个服务了其实很简单,就是相当于把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);

// 构建一个通知对象(需要传递的参数有三个,分别是图标,标题和 时间)

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对应的唯一标志

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();

}

}

}

我的服务因为服务器加密了所以得加一步

conn.getHeaders().put("Cookie",

"BearerToken="

+ SharedPref.getToken(getApplicationContext()));

多加了一个head

cookie

这里是新建了一个线程来启动signalr

到此就实现了推送服务。

原文:http://blog.csdn.net/chenaini119/article/details/44095843

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值