Android开发--推送

需要的知识点:Notification、Service

第三方开源框架 : android-async-http-master

推送的来源:android项目中,有时会有这样一种需求:客户每隔一段时间,就像服务器发送一个请求,以获取某些重要的、实时更新的消息。比如版本更新,请求是否重新下载等。

关键点在于: 如何让应用实现在后台一直处于运行状态,并且每个一段时间就向服务器发一个请求?

一、在Activity中,通过startService()来启动服务

     public void open(View view) {

Intent intent = new Intent(this, PushSmsService.class); //跳转页面

startService(intent);  // 启动服务

}

二、自定义一个服务类,去继承android的Service类

    /*******************************************************/

//短信推送服务类,在后台长期运行,每个一段时间就向服务器发送一次请求

/*******************************************************/

public class PushSmsService extends Service {

private MyThread myThread; //线程

private NotificationManager manager;  //notificationManager  

private Notification notification;  //notification

private PendingIntent pi;  //intent

private AsyncHttpClient client;  //异步http客户端

private boolean flag = true;  //标志位为true

@Override

public IBinder onBind(Intent intent) {

return null;

}

/****************************************< 加载页面 >******************************************/

@Override

public void onCreate() {

System.out.println("oncreate()");

this.client = new AsyncHttpClient();

this.myThread = new MyThread();

this.myThread.start();  //启动线程

super.onCreate();

}

//销毁页面

public void onDestroy() {

this.flag = false; //标志位为:false

super.onDestroy();

}

/****************************************< notification >******************************************/

private void notification(String content, String number, String date) {

manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  // 获取系统的通知管理器

notification = new Notification(R.drawable.ic_menu_compose, content,   System.currentTimeMillis());  //获取图标、内容、时间等等

notification.defaults = Notification.DEFAULT_ALL; // 使用默认设置(比如铃声、震动、闪灯)

notification.flags = Notification.FLAG_AUTO_CANCEL; // 但用户点击消息后,消息自动在通知栏自动消失

notification.flags |= Notification.FLAG_NO_CLEAR;// 点击通知栏的删除,消息不会依然不会被删除

Intent intent = new Intent(getApplicationContext(),   ContentActivity.class);  //跳转页面

intent.putExtra("content", content);  //封装内容

intent.putExtra("number", number);  //封装数字

intent.putExtra("date", date);  //封装时间

pi = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);

notification.setLatestEventInfo(getApplicationContext(), number  + "发来短信", content, pi);

manager.notify(0, notification);  // 将消息推送到状态栏

/****************************************< 线程 >******************************************/

private class MyThread extends Thread {

public void run() {

String url = "http://110.65.99.66:8080/jerry/PushSmsServlet";  //定位服务器

while (flag) {//检查并判断标志位

System.out.println("发送请求");

try {

Thread.sleep(10000); // 每个10秒向服务器发送一次请求

} catch (InterruptedException e)

{

e.printStackTrace();

}

// 采用get方式向服务器发送请求

client.get(url, new AsyncHttpResponseHandler() {

public void onSuccess(int statusCode, Header[] headers,  byte[] responseBody) {

try {

JSONObject result = new JSONObject(new String(  responseBody, "utf-8"));

int state = result.getInt("state");

// 假设偶数为未读消息

if (state % 2 == 0) {

String content = result.getString("content");

String date = result.getString("date");

String number = result.getString("number");

notification(content, number, date);

}

} catch (Exception e) {

e.printStackTrace();

}

}

public void onFailure(int statusCode, Header[] headers,   byte[] responseBody, Throwable error) {

Toast.makeText(getApplicationContext(), "数据请求失败", 0)  .show();

}

});

}

三、清单文件中注册

      3.1 service注册:

<service android:name=".PushSmsService"></service>

四、权限配置问题

4.1 由于通知信息使用到了手机的震动功能和网络访问,所以需要配置权限。

<uses-permission android:name="android.permission.VIBRATE"/>  <!-震动权限->

<uses-permission android:name="android.permission.INTERNET"/>  <!-网络权限->

五、再定义Activity

(用于用户点击下拉通知栏里的某条消息后,跳转到详细的消息界面)

public class ContentActivity extends Activity {

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_content);

Intent intent = getIntent();

TextView tv_content = (TextView) this.findViewById(R.id.tv_content);

TextView tv_number = (TextView) this.findViewById(R.id.tv_number);

TextView tv_date = (TextView) this.findViewById(R.id.tv_date);

if (intent != null) {

String content = intent.getStringExtra("content");

String number = intent.getStringExtra("number");

String date = intent.getStringExtra("date");

tv_content.setText("内容:" + content);

tv_number.setText("号码:" + number);

tv_date.setText("日期:" + date);

}

}

5.1 在清单文件中注册新的Activity

<activity android:name=".ContentActivity"></activity>

5.2 注意到上边的代码是需要服务器提供支持的,我们去新建一个简单的服务器,里边添加一个Servlet和一个实体类就可以了

public class PushSmsServlet extends HttpServlet {

private static int index = 1;

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println(index);

// List<Sms> smsList = new ArrayList<Sms>();

Sms sms = new Sms(index,  "傻逼" + index, "2016-08-08",  "15208432222");

index++;

// smsList.add(sms);

// sms = new Sms(0, "傻逼", "2016-08-08", "15208432222");

// smsList.add(sms);

// sms = new Sms(1, "傻逼", "2016-08-08", "13522224444");

// smsList.add(sms);

response.setContentType("text/html");

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("utf-8");

PrintWriter out = response.getWriter();

Gson gson = new Gson();

// 将Sms类的数据转换为json数据格式

String json = gson.toJson(sms);

out.write(json);

out.flush();

out.close();

}

//doPost

public void doPost(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {

this.doGet(request, response);

}

/****************************************< 定义封装用于存放消息的类 >******************************************/

public class Sms {

private int state;

private String content;

private String date;

private String number;

public Sms(int state, String content, String date, String number) {

super();

this.state = state;

this.content = content;

this.date = date;

this.number = number;

}

}

这部只是分核心代码,其余的就请自行扩充!

时间: 2024-10-01 05:12:35

Android开发--推送的相关文章

Android消息推送:手把手教你集成小米推送

前言 在Android开发中,消息推送功能的使用非常常见. 为了降低开发成本,使用第三方推送是现今较为流行的解决方案. 今天,我将手把手教大家如何在你的应用里集成小米推送 该文档基于小米推送官方Demo,并给出简易推送Demo 看该文档前,请先阅读我写的另外两篇文章: 史上最全解析Android消息推送解决方案 Android推送:第三方消息推送平台详细解析 目录 1. 官方Demo解析 首先,我们先对小米官方的推送Demo进行解析. 请先到官网下载官方Demo和SDK说明文档 1.1 Demo

Android消息推送机制

1.推送方式基础知识: 当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,比如<地震应急通>就需要及时获取服务器上最新的地震信息.要获取服务器 上不定时更新的信息一般来说有两种方法,第一种是客户端使用Pull(拉)的方式,隔一段时间就去服务器上获取信息,看是否有更新的信息出现.第二种就是 服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上.? 虽然Pull和Push两种方式都能实现获取服务器端更新信息的功能,但是明显来说Push is

Android实现推送方式解决方案【转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378971.html】

本文介绍在Android中实现推送方式的基础知识及相关解决方案.推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息.这种推送功能是好的一面,但是也会经常看到很多推送过来的垃圾信息,这就让我们感到厌烦了,关于这个我们就不能多说什么了,毕竟很多商家要做广告.本文就是来探讨下Android中实现推送功能的一些解决方案,也希望能够起到抛砖引玉的作用.^_^ 1.推送方式基础知识:  在移动互联网时代以前的手机,如果有事情

Android实现推送方式解决方案

Android实现推送方式解决方案 本文介绍在Android中实现推送方式的基础知识及相关解决方案.推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息.这种推送功能是好的一面,但是也会经常看到很多推送过来的垃圾信息,这就让我们感到厌烦了,关于这个我们就不能多说什么了,毕竟很多商家要做广告.本文就是来探讨下Android中实现推送功能的一些解决方案,也希望能够起到抛砖引玉的作用.^_^ 1.推送方式基础知识: 在移

【转】Android实现推送方式解决方案

本文介绍在Android中实现推送方式的基础知识及相关解决方案.推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息.这种推送功能是好的一面,但是也会经常看到很多推送过来的垃圾信息,这就让我们感到厌烦了,关于这个我们就不能多说什么了,毕竟很多商家要做广告.本文就是来探讨下Android中实现推送功能的一些解决方案,也希望能够起到抛砖引玉的作用.^_^ 1.推送方式基础知识:  在移动互联网时代以前的手机,如果有事情

Android消息推送

1.推送方式基础知识:  在移动互联网时代以前的手机,如果有事情发生需要通知用户,则会有一个窗口弹出,将告诉用户正在发生什么事情.可能是未接电话的提示,日历的提醒,或是一封新的彩信.推送功能最早是被用于Email中,用来提示我们新的信息.由于时代的发展和移动互联网的热潮,推送功能更加地普及,已经不再仅仅用在推送邮件了,更多地用在我们的APP中了. 当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,比如<地震应急通>就需要及时获取服务器上最新的地震信息.要获取服务器上不定时

【android极光推送】—从客户端到后台,一文通吃

前记 推送原理浅析 平台说明 概念解释 推送的三种实现方式 客户端直接向推送服务方发送Http请求 项目服务器通过Http转发推送请求至推送服务方 项目服务端使用SDK进行功能集成 关于推送的种类概述 android客户端初步实现 集成SDK说明 集成步骤 1下载官方提供的SDK集成包 2手动导入SDK 3在极光的官网创建一个应用 4编写一个MyApplication类初始化SDK 5配置 AndroidManifestxml wampServer服务端配置 配置推送SDK 通过composer

Android实现推送方式解决方案(转)

本文介绍在Android中实现推送方式的基础知识及相关解决方案.推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息.这种推送功能是好的一面,但是也会经常看到很多推送过来的垃圾信息,这就让我们感到厌烦了,关于这个我们就不能多说什么了,毕竟很多商家要做广告.本文就是来探讨下Android中实现推送功能的一些解决方案,也希望能够起到抛砖引玉的作用.^_^ 1.推送方式基础知识:  在移动互联网时代以前的手机,如果有事情

Android消息推送完美解决方案全析

推送功能在手机应用开发中越来越重要,已经成为手机开发的必须.在Android应用开发中,由于众所周知的原因,Android消息推送我们不得不大费周折.本文就是用来和大家共同探讨一种Android消息推送的完美解决方案. 一.消息推送基础 消息推送,就是在互联网上通过定期传送用户需要的信息来减少信息过载的一项新技术.推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间.它根据用户的兴趣来搜索.过滤信息,并将其定期推给用户,帮助用户高效率地发掘有价值的信息 当我们开发需要和服务器交互的移动应用