Jpush接收到推送通知,保存到数据库,然后列表展示
写的不好,还望见谅,不对地方,多多指教

先给出效果图:

在官网推送内容:

手机接收到通知

点击,跳转到展示页面

1、集成Jpush

(1)创建应用,输入包名,下载demo,给出官方链接http://docs.jiguang.cn/jpush/console/Instructions/

(2)手动集成,导入必要文件,给出官方链接 http://docs.jiguang.cn/jpush/client/Android/android_guide/
倒入两个jar,

导入so文件,
复制 res/ 中drawable-hdpi, layout, values文件夹中的资源文件到你的工程中 res/ 对应同名的目录下

(3)配置 AndroidManifest.xml

1)添加权限(注意更改包名)
                                                 
2)复制核心代码(注意更改包名以及appkey)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

(4) 创建你自己的广播接收MyReceiver

/** * 自定义接收器 * 

* 如果不定义这个 Receiver,则: * 1) 默认用户会打开主界面 * 2) 接收不到自定义消息 */public class MyReceiver extends BroadcastReceiver { private static final String TAG = "JPush"; private List list = new ArrayList<>(); public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) { String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID); Log.d(TAG, "[MyReceiver] 接收Registration Id : " + regId); } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) { Log.d(TAG, "收到了自定义消息。消息内容是:" + bundle.getString(JPushInterface.EXTRA_MESSAGE)); // 自定义消息不会展示在通知栏,完全要开发者写代码去处理 String content = bundle.getString(JPushInterface.EXTRA_MESSAGE); Toast.makeText(context, content, Toast.LENGTH_SHORT).show(); } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) { // 在这里可以做些统计,或者做些其他工作 } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { String content = bundle.getString(JPushInterface.EXTRA_ALERT);//此处,我们取出的是通知的内容。还可以取出别的信息,这个大家可自行处理// 在这里可以自己写代码去定义用户点击后的行为 Intent i = new Intent(context, TestActivity.class); i.putExtra("content", content); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } else { } }}

注意: i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 是需要设置的
此外,当你接收到推送的通知。点击就跳转Activity,所以最好设置一下Activity的启动方式为singleTask

(在TestActivity中接受值的时候,有一点需要注意,稍后会说到)
(5)集成 JPush Android SDK 的混淆

请下载4.x及以上版本的proguard.jar, 并替换你Android Sdk “tools\proguard\lib\proguard.jar”
请在工程的混淆文件中添加以下配置:
-dontoptimize
-dontpreverify
-dontwarn cn.jpush.**
-keep class cn.jpush.** { ; }
-dontwarn cn.jiguang.
*
-keep class cn.jiguang.** { *; }

v2.0.5 ~ v2.1.7 版本有引入 gson 和 protobuf ,增加排除混淆的配置。(2.1.8版本不需配置)
gson && protobuf========
-dontwarn com.google.**
-keep class com.google.gson.** {;}
-keep class com.google.protobuf.** {
;}

(6)注册(最好在application中注册)

JPushInterface.init(this); 

此时,启动程序,已经可以接受服务器或者jpush官网推送的消息了(我们接下来将推送的通知 取出来,存入数据库)

2构建数据库

(1)MySQLiteOpenHelper类

/** * @describe: * @author: Gao Chunfa. * @time: 2017/4/8-11:14. */public class MySQLiteOpenHelper extends SQLiteOpenHelper {    private static final String NAME = "mysqlite.db";    private static final int VERSION = 1;    public MySQLiteOpenHelper(Context context) {        super(context, NAME, null, VERSION);    }    @Override    public void onCreate(SQLiteDatabase db) {        String sql = "create table if not exists message(_id integer primary key autoincrement,content varchar,time long)";        db.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}

(2)SqlDao

/** * @describe:增加,查询 * @author: Gao Chunfa. * @time: 2017/4/8-11:22. */public class SqlDao {    private MySQLiteOpenHelper helper;    private SQLiteDatabase db;    public SqlDao(Context context) {        helper = new MySQLiteOpenHelper(context);    }//只做最简单的增加和查询操作,大家可自行操作    //增加    public void add(String message) {        db = helper.getWritableDatabase();        String sql = "insert into message (content , time) values (?,?)";        db.execSQL(sql, new String[]{message, System.currentTimeMillis() + ""});        db.close();    }//查询    public List find() {        List list = new ArrayList<>();        db = helper.getReadableDatabase();        Cursor cursor = db.query("message", null, null, null, null, null, "time desc", "10");        while (cursor.moveToNext()) {            list.add(cursor.getString(cursor.getColumnIndex("content")));        }        cursor.close();        db.close();        return list;    }}

(3)TestActivity(用来展示列表)

public class TestActivity extends AppCompatActivity {    private ListView listView;    private SqlDao dao;    private List list = new ArrayList<>();    private String content;    private ArrayAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_test);        listView = (ListView) findViewById(R.id.listView);        dao = new SqlDao(this);        adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);        listView.setAdapter(adapter);                content = getIntent().getStringExtra("content");        if (!content.equals("")){            dao.add(content);        }        list.clear();        list.addAll(dao.find());        adapter.notifyDataSetChanged();    }    @Override    protected void onNewIntent(Intent intent) {        super.onNewIntent(intent);        setIntent(intent);        content = getIntent().getStringExtra("content");        if (!content.equals("")){            dao.add(content);        }        list.clear();        list.addAll(dao.find());        adapter.notifyDataSetChanged();    }}

因为之前说到。我们设置启动方式为singleTask;所以当你第二次点击进入该页面(即该回退栈中已经有
该页面的时候),他不会执行onCreate方法,而是执行onNewIntent()方法,所以。我们在这两
个方法中均作了取值操作,然后刷新adapter;此外,activity的getIntent()方法只是获取activity原来的
intent。我们还需要在onNewIntent()方法中重载一下:setIntent(intent);,要不然,接收到的数据
依然为空。

这就是大体一个流程,很多操作都可以根据实际情况而做处理。

更多相关文章

  1. 利用makefile的语法功能,查看Android中Android.mk里面的变量的值
  2. Android(安卓)核心分析 -----IPC框架分析 Binder,Service,Service
  3. Android(安卓)App实现仅有横屏切换功能或仅有竖屏切换功能
  4. Android(安卓)简单实现倒计时功能
  5. Android(安卓)studio禁用启动时自动更新SDK功能
  6. OpenERP Android(安卓)DEMO工程发布下载
  7. android实现一个简单的加法功能
  8. [Android] Dalvik opcodes
  9. Android(安卓)配置PhoneGap开发环境

随机推荐

  1. Python利用itchat模块定时给朋友发送微信
  2. C语言中字符型数据和浮点型数据介绍
  3. 表单事件,字符串,数组apl
  4. 数组常用api
  5. javascript得dom编程初体验
  6. 流程控制、字面量与函数
  7. 流程控制和函数和返回值
  8. JS函数类型及数据类型
  9. 学习了事件的冒泡与事件的委托代理以及表
  10. android Drawable转Bitmap| Bitmap转byte