900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 原生Android 极光推送收到通知后自动点亮屏幕

原生Android 极光推送收到通知后自动点亮屏幕

时间:2020-09-21 09:53:06

相关推荐

原生Android 极光推送收到通知后自动点亮屏幕

1.新增屏幕唤醒权限

<uses-permission android:name="android.permission.WAKE_LOCK" />

2.集成极光sdk的过程在这就省略了, 直接说唤醒屏幕的方法以及在哪调用

按照官方提供的demo, 在AndroidManifest.xml中添加自定义的广播接收器 代码如下

<!--用户自定义的广播接收器--><receiverandroid:name="这里是自定义reciver的路径"android:exported="false"android:enabled="true"><intent-filter><action android:name="cn.jpush.android.intent.REGISTRATION" /> <!--Required 用户注册SDK的intent--><action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!--Required 用户接收SDK消息的intent--><action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!--Required 用户接收SDK通知栏信息的intent--><action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Required 用户打开自定义通知栏的intent--><action android:name="cn.jpush.android.intent.CONNECTION" /><!-- 接收网络变化 连接/断开 since 1.6.3 --><category android:name="这里填写应用的包名" /></intent-filter></receiver>

下面是唤醒屏幕的方法

/*** 唤醒屏幕* @param context*/private void wakeUpScreen(Context context) {PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);boolean screenOn = pm.isScreenOn();if (!screenOn) {@SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");wl.acquire(10*60*1000L /*10 minutes*/); // 点亮屏幕wl.release(); // 释放}}

将唤醒屏幕的方法在接收到有通知推送下来时候调用即可, 自定义接收器类的全部代码如下:

/*** 自定义接收器** 如果不定义这个 Receiver,则:* 1) 默认用户会打开主界面* 2) 接收不到自定义消息*/public class MyReceiver extends BroadcastReceiver {private static final String TAG = "JIGUANG-Example";@Overridepublic void onReceive(Context context, Intent intent) {try {Bundle bundle = intent.getExtras();Logger.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);Logger.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);//send the Registration Id to your server...} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {Logger.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));processCustomMessage(context, bundle);} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {Logger.d(TAG, "[MyReceiver] 接收到推送下来的通知");wakeUpScreen(context);//int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);//Logger.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {Logger.d(TAG, "[MyReceiver] 用户点击打开了通知");//打开自定义的ActivityIntent 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())) {Logger.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);Logger.w(TAG, "[MyReceiver]" + intent.getAction() +" connected state change to "+connected);} else {Logger.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());}} catch (Exception e){}}/*** 唤醒屏幕* @param context*/private void wakeUpScreen(Context context) {PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);boolean screenOn = pm.isScreenOn();if (!screenOn) {@SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");wl.acquire(10*60*1000L /*10 minutes*/); // 点亮屏幕wl.release(); // 释放}}// 打印所有的 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 (TextUtils.isEmpty(bundle.getString(JPushInterface.EXTRA_EXTRA))) {Logger.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();sb.append("\nkey:" + key + ", value: [" +myKey + " - " +json.optString(myKey) + "]");}} catch (JSONException e) {Logger.e(TAG, "Get message extra JSON error!");}} else {sb.append("\nkey:" + key + ", value:" + bundle.get(key));}}return sb.toString();}//send msg to MainActivityprivate void processCustomMessage(Context context, Bundle bundle) {// if (MainViewActivity.isForeground) {// String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);// String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);// Intent msgIntent = new Intent(MainViewActivity.MESSAGE_RECEIVED_ACTION);// msgIntent.putExtra(MainViewActivity.KEY_MESSAGE, message);// if (!ExampleUtil.isEmpty(extras)) {//try {//JSONObject extraJson = new JSONObject(extras);//if (extraJson.length() > 0) {// msgIntent.putExtra(MainViewActivity.KEY_EXTRAS, extras);//}//} catch (JSONException e) {////}//// }// LocalBroadcastManager.getInstance(context).sendBroadcast(msgIntent);// }}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。