android 本地简易消息推送

首先建一个activity,布局.xml文件的格式如图:

代码如下:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context="com.ghp.practice4_tuisong.MainActivity" >
 6     <LinearLayout
 7         android:layout_width="match_parent"
 8         android:layout_height="wrap_content"
 9         android:orientation="vertical" >
10         <Button
11             android:id="@+id/btsend"
12             android:layout_width="wrap_content"
13             android:layout_height="wrap_content"
14             android:text="发送消息" />
15         <Button
16             android:id="@+id/btRegister"
17             android:layout_width="wrap_content"
18             android:layout_height="wrap_content"
19             android:text="订阅消息" />
20         <Button
21             android:id="@+id/btUnReg"
22             android:layout_width="wrap_content"
23             android:layout_height="wrap_content"
24             android:text="取消订阅" />
25     </LinearLayout>
26 </RelativeLayout>

在activity里,首先对这3个button注册事件:

1 private void initView(){
2         myReceiver=new MyReceiver();
3         btsend=(Button) findViewById(R.id.btsend);
4         btRegister=(Button) findViewById(R.id.btRegister);
5         btUnReg=(Button) findViewById(R.id.btUnReg);
6         btsend.setOnClickListener(this);
7         btRegister.setOnClickListener(this);
8         btUnReg.setOnClickListener(this);
9     }

然后分别对3个onclick处理:

 1 @Override
 2     public void onClick(View v) {
 3         // TODO Auto-generated method stub
 4         switch (v.getId()) {
 5         case R.id.btsend:
 6             //推送消息
 7             sendBroadCast();
 8             break;
 9         case R.id.btRegister:
10             //手动代码注册发送
11             reg();
12             break;
13         case R.id.btUnReg:
14             unReg();
15             break;
16         default:
17             break;
18         }
19     }
20     public void sendBroadCast() {
21         Intent intent=new Intent();
22         intent.setAction(Intent.ACTION_EDIT);//类型
23         intent.putExtra("topic", "最新消息");
24         intent.putExtra("msg", "出来了");
25         super.sendBroadcast(intent);
26     }
27     public void reg(){
28
29         IntentFilter intentFilter=new IntentFilter();
30         intentFilter.addAction(Intent.ACTION_EDIT);
31         //intentFilter.addAction("wakeup");
32         super.registerReceiver(myReceiver, intentFilter);
33     }
34
35     public void unReg(){
36         super.unregisterReceiver(myReceiver);
37     }

上面这些是最简单的,下面是重点:

需要自己建立一个MyReceiver,继承BroadcastReceiver

代码如下,注释已详细讲解:

 1 package com.ghp.receiver;
 2
 3 import java.util.Random;
 4
 5 import com.ghp.practice4_tuisong.MainActivity;
 6 import com.ghp.practice4_tuisong.R;
 7
 8 import android.app.NotificationManager;
 9 import android.app.PendingIntent;
10 import android.content.BroadcastReceiver;
11 import android.content.Context;
12 import android.content.Intent;
13 import android.media.RingtoneManager;
14 import android.net.Uri;
15 import android.support.v4.app.NotificationCompat;
16 import android.support.v4.app.TaskStackBuilder;
17 import android.widget.Toast;
18
19 public class MyReceiver extends BroadcastReceiver {
20     private String msg;
21     private String topic;
22     @Override
23     public void onReceive(Context context, Intent intent) {
24         // TODO Auto-generated method stub
25         //根据匹配类型处理
26
27         if(intent.getAction().equals(Intent.ACTION_EDIT)){
28             topic=intent.getStringExtra("topic");
29             msg=intent.getStringExtra("msg");
30             Toast.makeText(context, topic+":"+msg, Toast.LENGTH_SHORT).show();
31
32         }
33
34         //获取设置的提示音,用的是系统声音
35         Uri alarmSound=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
36         /**
37          * 初始化通知提示框的布局,即在NotificationCompat.Builder对象中为通知指定UI信息和动作
38          * 布局里有提示图标,一般是应用的logo,提示的标题,及内容,有声音设置,震动设置
39          * 所有其他通知设置和内容都是可选的,具体可参考API NotificationCompat.Builder类
40          */
41         NotificationCompat.Builder nBuilder=new NotificationCompat.Builder(context)
42         .setSmallIcon(R.drawable.ic_launcher).setContentText(msg).setContentTitle(topic)
43         .setSound(alarmSound).setVibrate(new long[]{500,500,500,500}).setAutoCancel(true);
44
45         //单击消息后连接打开的Avtivity
46         Intent reslutIntent=new Intent(context,MainActivity.class);
47         reslutIntent.putExtra("topic", topic);
48         reslutIntent.putExtra("msg", msg);
49
50         //添加动作到通知,当用户点击通知时,触发
51         //在通知里面,这个动作通过PendingIntent来定义
52         //想要启动Activity,可以通过调用setContentIntent()来添加一个PendingIntent
53         TaskStackBuilder stackBuilder=TaskStackBuilder.create(context);//
54         stackBuilder.addParentStack(MainActivity.class);
55         stackBuilder.addNextIntent(reslutIntent);
56         PendingIntent resultPendingIntent=stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
57         nBuilder.setContentIntent(resultPendingIntent);//设置显示框内容点击后对应的任务目标,及进入相应的activity
58
59         /**
60          * 消息管理器:NotificationManager
61          * nBuilder.build(): 发送前必须先使用NotificationCompat.Builder.build()来创建通知
62          * 这个方法会返回一个Notification对象
63          * 为了发布通知,可以通过调用NotificationManager.notify()来传递Notification对象到系统中
64          */
65         NotificationManager mNotificationManager=(NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
66         Random r=new Random();
67         mNotificationManager.notify(r.nextInt(), nBuilder.build());//发生通知,产生消息框
68     }
69
70 }

以上是一种方式,还有一种方式,是在AndroidManifest.xml设置:

首先添加权限:

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

然后设置:

<!--配置文件:自动注册发送  -->
        <receiver android:name="com.ghp.receiver.MyReceiver">
            <intent-filter>
                <action android:name="android.intent.action.EDIT"/>
                <action android:name="wakeup"/>
            </intent-filter>
        </receiver>

以上是简单的本地推送,一般是通过第三方推送消息,可以用极光推送和云推送等

时间: 2024-08-05 10:03:33

android 本地简易消息推送的相关文章

Android 几种消息推送方案总结

首先看一张国内Top500 Android应用中它们用到的第三方推送以及所占数量: 现在总结下Android平台下几种推送方案的基本情况以及优缺点: 一.使用GCM(Google Cloude Messaging) Android自带的推送GCM可以帮助开发人员给他们的Android应用程序发送数据.它是一个轻量级的消息,告诉Android应用程序有新的数据要从服务器获取,或者它可能是一个消息,其中包含了4KB的payload data(像即时通讯这类应用程序可以直接使用该payload消息).

Android中实现消息推送(JPush)

1,去JPush官网注册一个账号,创建你的app的应用,并且拿到你应用的AppKey 2,在JPush官网下载对应的sdk,解压出来,将libs文件下的所有的文件全部复制到你工程的libs文件中 3,在清单文件中添加对应的权限和activity(更改对应的包名和对应的AppKey) AndroidManifest.xml权限配置: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:andr

android集成极光消息推送

推送功能现在在app中已是成常用的功能,而要实现推送功能,为了省时省力一般考虑采用第三方推送sdk来实现,这里总结是极光推送(JPush)这也是本人在项目中经常用到的第三方推送sdk , 总的来说集成起来挺简单的,只要按照官方的文档一步步集成还是能够完成,本人第一次集成的时候也是这样干的,其实其它的第三方sdk一般都是根据官方的文档文档一步步集成的,但对于一些从来没有用过极光推送或是刚开始的人来说,总会有这样的那样的问题,会走一些弯路,会躺过一些坑,现在将以前的集成经验进行流程化,再此做些记录,

使用WeCloud消息推送接口发送消息NodeJs版

WeCloud是一家初创公司的产品,目前主要在做Android和IOS消息推送这块.他们提供了用于向设备发送消息的协议,具体协议内容见消息推送协议. 这篇文章将使用NodeJs基于这个推送协议完成向App用户推送消息的服务端SDK. 首先你需要注册一个帐号,然后系统会为你自动生成一个测试demo,你可以通过扫二维码或先下载到电脑的方式获得apk文件,再将其安装到自己的手机上之后就可以测试发送效果了,每个应用都会有对应的Appkey和Master Secret这两个属性,它是作为发送消息的凭证而存

Android本地消息推送

项目介绍:cocos2dx跨平台游戏 项目需求:实现本地消息推送,需求①:定点推送:需求②:根据游戏内逻辑实现推送(比如玩家体力满时,需要计算后到点推送):需求③:清理后台程序或重启后依然能够实现本地推送. 功能实现:由于IOS有一套比较成熟的UILocalNotification推送机制,这里主要说明Android下的实现.另外大家感兴趣可以看下第三方的推送:个推.极光.腾讯信鸽.百度云推送等,第三方多是要接入服务端,否则只能自己在第三方申请的应用的后台手动推送,另外第三方也不保证能100%所

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

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

本地消息和消息推送

在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事 情.iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知.两种通知在iOS中的表现一致,可以通过横幅或者弹出 提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同.今天就和大家一块去看一下如何在iOS中实现这两种机制,并且在文章后 面会补充通知中心的内容避免初学者对两种概念的混淆. 本文包括下面内容

Android 基于Netty的消息推送方案之Hello World(一)

消息推送方案(轮询.长连接) 轮询 轮询:比较简单的,最容易理解和实现的就是客户端去服务器上拉信息,信息的及时性要求越高则拉信息的频率越高.客户端拉信息的触发可以是一些事件,也可以是一个定时器,不断地去查询服务器.所以这个方案的弊端也是显而易见的,在轮询的频率较高时,服务器端的压力很大,通讯的流量也很大,并且大部分时间都是做的无用功. 长连接 长连接:客户端和服务端维持一个长连接,服务端在有信息推送的时候,借助这个连接把信息发送到客户端.这个方案的优点是信息推送的及时性很高,基本是实时的,并且除

Android 基于Netty的消息推送方案(一)

消息推送方案(轮询.长连接) 轮询 轮询:比较简单的,最容易理解和实现的就是客户端去服务器上拉信息,信息的及时性要求越高则拉信息的频率越高.客户端拉信息的触发可以是一些事件,也可以是一个定时器,不断地去查询服务器.所以这个方案的弊端也是显而易见的,在轮询的频率较高时,服务器端的压力很大,通讯的流量也很大,并且大部分时间都是做的无用功. 长连接 长连接:客户端和服务端维持一个长连接,服务端在有信息推送的时候,借助这个连接把信息发送到客户端.这个方案的优点是信息推送的及时性很高,基本是实时的,并且除