Android push 极光通信

2024-06-04 21:48
文章标签 android push 光通信

本文主要是介绍Android push 极光通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


Android push 极光通信

代码下载地址:http://download.csdn.net/detail/u011324501/9436135

JPush 官方提供了一个简单 Demo, 向我们演示了 JPush 基本的推送流程基本步骤分为下面几块

-- Web 配置操作部分 : 包括 注册开发者帐号创建应用;

-- 下载手机示例 : 下载系统自动生成的 Android 应用示例;

-- 发送推送指令 : 在 Web 端发送推送指令手机端接收该指令;

-- 官方地址 : 关于该模块详细信息可参考官方文档, http://docs.jpush.cn/pages/viewpage.action?pageId=557074 ;

1、首先注册账号可以去注册一个账号便可:https://www.jpush.cn/push/apps/e09817a6f8d1112753979ef2/push/notification/sent/

注册完后可以点击创建应用,输入应用名称上传一个图标然后填写一个包名, JPush 系统会在后台根据你输入的包名生成的推送的 Android 应用 Demo, 该 Demo 包含了该配置的信息;

2、可以直接在这里下载一个example的代码例子。但是要在权限文件里面加上Appkey跟应用包名。

3、配置好后就可以直接在网页上点击推送-->发送通知。就可以将想要发送的消息推送出去。但前提是有安装了官方的应用跟配置好了。推送成功后可以在手机上看到有推送过来的消息。详细可看:http://www.it165.net/pro/html/201504/39082.html

代码:MainActivity.java

package com.example.jpushdemo;import java.util.Timer;
import java.util.TimerTask;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import cn.jpush.android.api.InstrumentedActivity;
import cn.jpush.android.api.JPushInterface;public class MainActivity extends InstrumentedActivity implements OnClickListener{private Button mInit;private Button mStopPush;private Button mResumePush;private TextView text;public static MainActivity macActivity;public static boolean isForeground = false;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);macActivity = this;initView();   }private void initView(){TextView mImei = (TextView) findViewById(R.id.tv_imei);String udid =  ExampleUtil.getImei(getApplicationContext(), "");if (null != udid) mImei.setText("IMEI: " + udid);TextView mAppKey = (TextView) findViewById(R.id.tv_appkey);String appKey = ExampleUtil.getAppKey(getApplicationContext());if (null == appKey) appKey = "AppKey异常";mAppKey.setText("AppKey: " + appKey);String packageName =  getPackageName();TextView mPackage = (TextView) findViewById(R.id.tv_package);mPackage.setText("PackageName: " + packageName);String deviceId = ExampleUtil.getDeviceId(getApplicationContext());TextView mDeviceId = (TextView) findViewById(R.id.tv_device_id);mDeviceId.setText("deviceId:" + deviceId);String versionName =  ExampleUtil.GetVersion(getApplicationContext());TextView mVersion = (TextView) findViewById(R.id.tv_version);mVersion.setText("Version: " + versionName);mInit = (Button)findViewById(R.id.init);mInit.setOnClickListener(this);mStopPush = (Button)findViewById(R.id.stopPush);mStopPush.setOnClickListener(this);mResumePush = (Button)findViewById(R.id.resumePush);mResumePush.setOnClickListener(this);text = (TextView)findViewById(R.id.text);		timer.schedule(task, 1000, 1000); // 1s后执行task,经过1s再次执行 }@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.init:init();break;case R.id.stopPush:JPushInterface.stopPush(getApplicationContext());break;case R.id.resumePush:JPushInterface.resumePush(getApplicationContext());break;}}// 初始化 JPush。如果已经初始化,但没有登录成功,则执行重新登录。private void init(){JPushInterface.init(getApplicationContext());}@Overrideprotected void onResume() {isForeground = true;super.onResume();}@Overrideprotected void onPause() {isForeground = false;super.onPause();}@Overrideprotected void onDestroy() {//	unregisterReceiver(mMessageReceiver);super.onDestroy();}Handler handler = new Handler() {    public void handleMessage(Message msg) {    if (msg.what == 1) {  //接收msg然后处理想做的事情  text.setText(MyReceiver.messg());    }    super.handleMessage(msg);    };    };    Timer timer = new Timer();    TimerTask task = new TimerTask() {      @Override    public void run() {    // 需要做的事:发送消息    Message message = new Message();    message.what = 1;    handler.sendMessage(message);    }    };       }
MyReceiver.java

package com.example.jpushdemo;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;import org.json.JSONException;
import org.json.JSONObject;import java.util.Iterator;import cn.jpush.android.api.JPushInterface;/*** 自定义接收器* * 如果不定义这个 Receiver,则:* 1) 默认用户会打开主界面* 2) 接收不到自定义消息*/
public class MyReceiver extends BroadcastReceiver {private static final String TAG = "JPush";private static String msg = "";@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();Log.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);Log.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);//send the Registration Id to your server...} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {Log.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));//processCustomMessage(context, bundle);} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {Log.d(TAG, "[MyReceiver] 接收到推送下来的通知");int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);Log.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {Log.d(TAG, "[MyReceiver] 用户点击打开了通知");//打开自定义的Activity//Intent i = new Intent(context, TestActivity.class);//i.putExtras(bundle);//i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//	i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );//	context.startActivity(i);} else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {Log.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));//在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等..} else if(JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);Log.w(TAG, "[MyReceiver]" + intent.getAction() +" connected state change to "+connected);} else {Log.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());}}public static String messg(){	String aa = msg;return aa;}// 打印所有的 intent extra 数据private static String printBundle(Bundle bundle) {StringBuilder sb = new StringBuilder();for (String key : bundle.keySet()) {if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {sb.append("\nkey:" + key + ", value:" + bundle.getInt(key));				}else if(key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)){sb.append("\nkey:" + key + ", value:" + bundle.getBoolean(key));} else if (key.equals(JPushInterface.EXTRA_EXTRA)) {if (bundle.getString(JPushInterface.EXTRA_EXTRA).isEmpty()) {Log.i(TAG, "This message has no Extra data");continue;}try {JSONObject json = new JSONObject(bundle.getString(JPushInterface.EXTRA_EXTRA));Iterator<String> it =  json.keys();while (it.hasNext()) {String myKey = it.next().toString();sb.append("\nkey:" + key + ", value: [" +myKey + " - " +json.optString(myKey) + "]");				}} catch (JSONException e) {Log.e(TAG, "Get message extra JSON error!");}} else {sb.append("\nkey:" + key + ", value:" + bundle.getString(key));System.out.println("nsc3:"+ bundle.getString(key)+":"+key);if(key.equals("cn.jpush.android.ALERT")){msg = bundle.getString(key);System.out.println("nsc1:"+ bundle.getString(key)+":"+key);Toast.makeText(MainActivity.macActivity, bundle.getString(key), Toast.LENGTH_SHORT).show();}	}}return sb.toString();}}

详细代码自己下载。http://download.csdn.net/detail/u011324501/9436135




这篇关于Android push 极光通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1031218

相关文章

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到

android系统源码12 修改默认桌面壁纸--SRO方式

1、aosp12修改默认桌面壁纸 代码路径 :frameworks\base\core\res\res\drawable-nodpi 替换成自己的图片即可,不过需要覆盖所有目录下的图片。 由于是静态修改,则需要make一下,重新编译。 2、方法二Overlay方式 由于上述方法有很大缺点,修改多了之后容易遗忘自己修改哪些文件,为此我们采用另外一种方法,使用Overlay方式。