From c67024dde5e4b26d31a451a22aaf45f13ee0becd Mon Sep 17 00:00:00 2001 From: Godfather <981964879@qq.com> Date: Tue, 22 Feb 2022 10:10:02 +0800 Subject: [PATCH] =?UTF-8?q?version:2.4=20fix:=E6=9B=B4=E6=8D=A2=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=EF=BC=8C=E4=BF=AE=E6=94=B9=E6=A1=8C=E9=9D=A2=E9=9A=90?= =?UTF-8?q?=E8=97=8F=E5=85=B6=E4=BB=96=E5=BA=94=E7=94=A8=20add:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AndroidManifest-common.xml | 175 ++--- build.gradle | 29 +- res/drawable-hdpi/com_android_browser.png | Bin 3871 -> 7899 bytes .../com_android_gallery3d_app.png | Bin 3651 -> 3504 bytes res/drawable-hdpi/com_android_mms_ui.png | Bin 3628 -> 4130 bytes res/drawable-hdpi/com_android_music.png | Bin 4677 -> 4523 bytes res/mipmap-hdpi/ic_launcher_home.png | Bin 4205 -> 4104 bytes res/mipmap-mdpi/ic_launcher_home.png | Bin 4205 -> 4104 bytes res/mipmap-xhdpi/ic_launcher_home.png | Bin 4205 -> 4104 bytes res/mipmap-xxhdpi/ic_launcher_home.png | Bin 4205 -> 4104 bytes src/com/aoleyun/os/Launcher.java | 20 +- src/com/aoleyun/os/base/BaseApplication.java | 53 +- .../aoleyun/os/jpush/ExampleApplication.java | 5 +- src/com/aoleyun/os/jpush/ExampleUtil.java | 7 +- .../os/jpush/MyJPushMessageReceiver.java | 68 +- src/com/aoleyun/os/jpush/MyReceiver.java | 254 ++++--- src/com/aoleyun/os/jpush/PushService.java | 7 +- .../os/jpush/TagAliasOperatorHelper.java | 657 +++++++++--------- src/com/aoleyun/os/jpush/TestActivity.java | 6 +- src/com/aoleyun/os/model/LoaderTask.java | 16 +- src/com/aoleyun/os/network/HTTPInterface.java | 23 +- src/com/aoleyun/os/uiuiutils/JGYUtils.java | 28 + 22 files changed, 700 insertions(+), 648 deletions(-) diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml index c4db91f..d730279 100644 --- a/AndroidManifest-common.xml +++ b/AndroidManifest-common.xml @@ -214,96 +214,96 @@ - + + + + + - - - + + + + + + + + - - - - + + + + - - - - - - - - + + + + + + + + + + + - + + + + + + - - - - - + + + + + + + + - + - + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - + + + - + + + @@ -336,16 +336,16 @@ android:exported="true" /> - - - - - - + + + + + + + + + + @@ -359,11 +359,12 @@ - - + + + + + + + diff --git a/build.gradle b/build.gradle index c58e423..faa659b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,18 @@ buildscript { repositories { - mavenCentral() google() + mavenCentral() + maven {url 'http://developer.huawei.com/repo/'} + maven { url "https://jitpack.io" } + maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' } + maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } } + dependencies { classpath GRADLE_CLASS_PATH classpath PROTOBUF_CLASS_PATH + classpath "com.tencent.android.tpns:tpnsplugin:1.8.0" + } } @@ -30,6 +37,8 @@ final String FRAMEWORK_PREBUILTS_DIR = "${ANDROID_TOP}/prebuilts/framework_inter apply plugin: 'com.android.application' apply plugin: 'com.google.protobuf' +//apply plugin: "com.tencent.android.tpns" + android { gradle.projectsEvaluated { @@ -57,17 +66,19 @@ android { defaultConfig { minSdkVersion 26 targetSdkVersion 28 - versionCode 13 - versionName "2.2" + versionCode 15 + versionName "2.4" ndk { //选择要添加的对应 cpu 类型的 .so 库。 abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' // 还可以添加 'x86', 'x86_64', 'mips', 'mips64' } manifestPlaceholders = [ - JPUSH_PKGNAME: "com.aoleyun.os", - JPUSH_APPKEY : "0c7ba5a1622dba78d5bd00cc", //JPush 上注册的包名对应的 Appkey. - JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. + XG_ACCESS_ID : "1500026378", + XG_ACCESS_KEY: "AH5QD9ZMBJ6R", +// JPUSH_PKGNAME: "com.aoleyun.os", +// JPUSH_APPKEY : "0c7ba5a1622dba78d5bd00cc", //JPush 上注册的包名对应的 Appkey. +// JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. ] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -314,9 +325,11 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.7' //mmkv implementation 'com.tencent:mmkv-static:1.2.10' + //腾讯移动推送 TPNS + implementation 'com.tencent.tpns:tpns:1.2.2.0-release' //极光推送 - implementation 'cn.jiguang.sdk:jpush:3.8.6' // 此处以JPush 3.8.6 版本为例。 - implementation 'cn.jiguang.sdk:jcore:2.6.0' // 此处以JCore 2.6.0 版本为例。 +// implementation 'cn.jiguang.sdk:jpush:3.8.6' // 此处以JPush 3.8.6 版本为例。 +// implementation 'cn.jiguang.sdk:jcore:2.6.0' // 此处以JCore 2.6.0 版本为例。 //下载 implementation 'me.laoyuyu.aria:core:3.8.16' annotationProcessor 'me.laoyuyu.aria:compiler:3.8.16' diff --git a/res/drawable-hdpi/com_android_browser.png b/res/drawable-hdpi/com_android_browser.png index 28d243b92f351de9a88ced25c1127b8212a67ea3..f0c9cb15f134853d3553ab76c75f37bffcf40507 100644 GIT binary patch delta 7276 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 delta 3216 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 diff --git a/res/drawable-hdpi/com_android_mms_ui.png b/res/drawable-hdpi/com_android_mms_ui.png index 9f62b9183b5c85adb6eeac5134bb980d95dd38dd..3b8ddc50ba0965fbc6801321ab61fcd7c79c727a 100644 GIT binary patch delta 3451 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 diff --git a/res/mipmap-hdpi/ic_launcher_home.png b/res/mipmap-hdpi/ic_launcher_home.png index 98da1fc21cd5afefa6b212d8038f4f12a443836f..cc24a001acff1e181147e9f50d8b0b708285ca8c 100644 GIT binary patch delta 3486 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 { @Override public void onSubscribe(Disposable d) { diff --git a/src/com/aoleyun/os/base/BaseApplication.java b/src/com/aoleyun/os/base/BaseApplication.java index bcac4ed..05f61a1 100644 --- a/src/com/aoleyun/os/base/BaseApplication.java +++ b/src/com/aoleyun/os/base/BaseApplication.java @@ -8,13 +8,15 @@ import android.util.Log; import com.aoleyun.os.BuildConfig; import com.aoleyun.os.uiuiutils.ToastUtil; import com.aoleyun.os.uiuiutils.Utils; -import com.aoleyun.os.jpush.TagAliasOperatorHelper; import com.aoleyun.os.network.HTTPInterface; import com.aoleyun.os.network.NetworkManager; import com.aoleyun.os.network.URLPath; import com.aoleyun.os.uiuiutils.JGYUtils; import com.aoleyun.os.uiuiutils.TimeUtils; import com.arialyy.aria.core.Aria; +import com.tencent.android.tpush.XGIOperateCallback; +import com.tencent.android.tpush.XGPushConfig; +import com.tencent.android.tpush.XGPushManager; import com.tencent.mmkv.MMKV; import org.jetbrains.annotations.NotNull; @@ -22,8 +24,6 @@ import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.util.concurrent.TimeUnit; -import cn.jpush.android.api.JPushInterface; -import cn.jpush.android.api.JPushMessage; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; @@ -67,8 +67,21 @@ public class BaseApplication extends Application { } private void initJPush() { - JPushInterface.setDebugMode(BuildConfig.DEBUG); // 设置开启日志,发布时请关闭日志 - JPushInterface.init(this); +// JPushInterface.setDebugMode(BuildConfig.DEBUG); // 设置开启日志,发布时请关闭日志 +// JPushInterface.init(this); + XGPushConfig.enableDebug(this,true); + XGPushManager.registerPush(this, new XGIOperateCallback() { + @Override + public void onSuccess(Object data, int flag) { + //token在设备卸载重装的时候有可能会变 + Log.d("TPush", "注册成功,设备token为:" + data); + } + + @Override + public void onFail(Object data, int errCode, String msg) { + Log.d("TPush", "注册失败,错误码:" + errCode + ",错误信息:" + msg); + } + }); initAliasObservable(); initTagObservable(); setJpushAlias(); @@ -157,17 +170,17 @@ public class BaseApplication extends Application { }); } - public void onAliasOperatorResult(JPushMessage jPushMessage) { - if (jPushMessage == null) { - return; - } - int errorCode = jPushMessage.getErrorCode(); - onAliasResult.onResult(errorCode); - } +// public void onAliasOperatorResult(JPushMessage jPushMessage) { +// if (jPushMessage == null) { +// return; +// } +// int errorCode = jPushMessage.getErrorCode(); +// onAliasResult.onResult(errorCode); +// } public static void setJpushAlias() { Log.e("jiguangInterface", "30s后重新设置alias"); - JPushInterface.setAlias(context, TagAliasOperatorHelper.sequence++, Utils.getSerial()); +// JPushInterface.setAlias(context, TagAliasOperatorHelper.sequence++, Utils.getSerial()); } private void initTagObservable() { @@ -266,13 +279,13 @@ public class BaseApplication extends Application { }); } - public void onTagOperatorResult(JPushMessage jPushMessage) { - if (jPushMessage == null) { - return; - } - int errorCode = jPushMessage.getErrorCode(); - onTagResult.onResult(errorCode); - } +// public void onTagOperatorResult(JPushMessage jPushMessage) { +// if (jPushMessage == null) { +// return; +// } +// int errorCode = jPushMessage.getErrorCode(); +// onTagResult.onResult(errorCode); +// } public static void setJpushTags() { Log.e("jiguangInterface", "30s后重新设置tags"); diff --git a/src/com/aoleyun/os/jpush/ExampleApplication.java b/src/com/aoleyun/os/jpush/ExampleApplication.java index 353e5c6..0106f47 100644 --- a/src/com/aoleyun/os/jpush/ExampleApplication.java +++ b/src/com/aoleyun/os/jpush/ExampleApplication.java @@ -1,7 +1,6 @@ package com.aoleyun.os.jpush; import android.app.Application; -import cn.jpush.android.api.JPushInterface; /** * For developer startup JPush SDK @@ -16,7 +15,7 @@ public class ExampleApplication extends Application { Logger.d(TAG, "[ExampleApplication] onCreate"); super.onCreate(); - JPushInterface.setDebugMode(true); // 设置开启日志,发布时请关闭日志 - JPushInterface.init(this); // 初始化 JPush +// JPushInterface.setDebugMode(true); // 设置开启日志,发布时请关闭日志 +// JPushInterface.init(this); // 初始化 JPush } } diff --git a/src/com/aoleyun/os/jpush/ExampleUtil.java b/src/com/aoleyun/os/jpush/ExampleUtil.java index a0d152c..9de70b0 100644 --- a/src/com/aoleyun/os/jpush/ExampleUtil.java +++ b/src/com/aoleyun/os/jpush/ExampleUtil.java @@ -15,7 +15,6 @@ import android.text.TextUtils; import java.util.regex.Matcher; import java.util.regex.Pattern; -import cn.jpush.android.api.JPushInterface; public class ExampleUtil { public static final String PREFS_NAME = "JPUSH_EXAMPLE"; @@ -126,7 +125,7 @@ public class ExampleUtil { } } - public static String getDeviceId(Context context) { - return JPushInterface.getUdid(context); - } +// public static String getDeviceId(Context context) { +// return JPushInterface.getUdid(context); +// } } diff --git a/src/com/aoleyun/os/jpush/MyJPushMessageReceiver.java b/src/com/aoleyun/os/jpush/MyJPushMessageReceiver.java index 1f6f237..8b0a136 100644 --- a/src/com/aoleyun/os/jpush/MyJPushMessageReceiver.java +++ b/src/com/aoleyun/os/jpush/MyJPushMessageReceiver.java @@ -4,43 +4,37 @@ import android.content.Context; import com.aoleyun.os.base.BaseApplication; -import cn.jpush.android.api.CustomMessage; -import cn.jpush.android.api.JPushMessage; -import cn.jpush.android.service.JPushMessageReceiver; - /** * 自定义JPush message 接收器,包括操作tag/alias的结果返回(仅仅包含tag/alias新接口部分) * */ -public class MyJPushMessageReceiver extends JPushMessageReceiver { - - @Override - public void onTagOperatorResult(Context context, JPushMessage jPushMessage) { - TagAliasOperatorHelper.getInstance().onTagOperatorResult(context,jPushMessage); - super.onTagOperatorResult(context, jPushMessage); - BaseApplication.getInstance().onTagOperatorResult(jPushMessage); - } - @Override - public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage){ - TagAliasOperatorHelper.getInstance().onCheckTagOperatorResult(context,jPushMessage); - super.onCheckTagOperatorResult(context, jPushMessage); - } - @Override - public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) { - TagAliasOperatorHelper.getInstance().onAliasOperatorResult(context,jPushMessage); - super.onAliasOperatorResult(context, jPushMessage); - BaseApplication.getInstance().onAliasOperatorResult(jPushMessage); - } - - @Override - public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) { - TagAliasOperatorHelper.getInstance().onMobileNumberOperatorResult(context,jPushMessage); - super.onMobileNumberOperatorResult(context, jPushMessage); - } - - @Override - public void onMessage(Context context, CustomMessage customMessage) { - super.onMessage(context, customMessage); - } - - -} +//public class MyJPushMessageReceiver extends JPushMessageReceiver { +// +// @Override +// public void onTagOperatorResult(Context context, JPushMessage jPushMessage) { +// TagAliasOperatorHelper.getInstance().onTagOperatorResult(context,jPushMessage); +// super.onTagOperatorResult(context, jPushMessage); +// BaseApplication.getInstance().onTagOperatorResult(jPushMessage); +// } +// @Override +// public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage){ +// TagAliasOperatorHelper.getInstance().onCheckTagOperatorResult(context,jPushMessage); +// super.onCheckTagOperatorResult(context, jPushMessage); +// } +// @Override +// public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) { +// TagAliasOperatorHelper.getInstance().onAliasOperatorResult(context,jPushMessage); +// super.onAliasOperatorResult(context, jPushMessage); +// BaseApplication.getInstance().onAliasOperatorResult(jPushMessage); +// } +// +// @Override +// public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) { +// TagAliasOperatorHelper.getInstance().onMobileNumberOperatorResult(context,jPushMessage); +// super.onMobileNumberOperatorResult(context, jPushMessage); +// } +// +// @Override +// public void onMessage(Context context, CustomMessage customMessage) { +// super.onMessage(context, customMessage); +// } +//} diff --git a/src/com/aoleyun/os/jpush/MyReceiver.java b/src/com/aoleyun/os/jpush/MyReceiver.java index 566214f..f2236c5 100644 --- a/src/com/aoleyun/os/jpush/MyReceiver.java +++ b/src/com/aoleyun/os/jpush/MyReceiver.java @@ -15,8 +15,6 @@ import org.json.JSONObject; import java.util.Iterator; -import cn.jpush.android.api.JPushInterface; - /** * 自定义接收器 *

@@ -24,132 +22,130 @@ import cn.jpush.android.api.JPushInterface; * 1) 默认用户会打开主界面 * 2) 接收不到自定义消息 */ -public class MyReceiver extends BroadcastReceiver { - private static final String TAG = "JIGUANG-Example"; - - @Override - public 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] 接收到推送下来的通知"); - 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] 用户点击打开了通知"); - - //打开自定义的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_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) { - - } - - } - - // 打印所有的 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 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(); - } - - private static final String SEND_RUNNING_APP = "2"; - //应用锁 - private static final String UPDATE_APP_LOCK = "39"; - - - //send msg to MainActivity - private void processCustomMessage(Context context, Bundle bundle) { -// if (Launcher.isForeground) { -// String message = bundle.getString(JPushInterface.EXTRA_MESSAGE); -// String extras = bundle.getString(JPushInterface.EXTRA_EXTRA); -// Intent msgIntent = new Intent(Launcher.MESSAGE_RECEIVED_ACTION); -// msgIntent.putExtra(Launcher.KEY_MESSAGE, message); -// if (!ExampleUtil.isEmpty(extras)) { -// try { -// JSONObject extraJson = new JSONObject(extras); -// if (extraJson.length() > 0) { -// msgIntent.putExtra(Launcher.KEY_EXTRAS, extras); -// } -// } catch (JSONException e) { +//public class MyReceiver extends BroadcastReceiver { +// private static final String TAG = "JIGUANG-Example"; // -// } +// @Override +// public void onReceive(Context context, Intent intent) { +// try { +// Bundle bundle = intent.getExtras(); +// Logger.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle)); // -// } -// LocalBroadcastManager.getInstance(context).sendBroadcast(msgIntent); -// } - - String message = bundle.getString(JPushInterface.EXTRA_MESSAGE); - String title = bundle.getString(JPushInterface.EXTRA_TITLE); - String type = bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE); - String extras = bundle.getString(JPushInterface.EXTRA_EXTRA); - - switch (message) { - case SEND_RUNNING_APP: - getRunningApp(context); - break; - case UPDATE_APP_LOCK: - HTTPInterface.getAppPasswd(); - break; - default: - break; - } - - - } - - private void getRunningApp(Context context) { - HTTPInterface.sendRunningApp(context); - } - -} +// 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] 接收到推送下来的通知"); +// 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] 用户点击打开了通知"); +// +// //打开自定义的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_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) { +// +// } +// +// } +// +// // 打印所有的 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 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(); +// } +// +// private static final String SEND_RUNNING_APP = "2"; +// //应用锁 +// private static final String UPDATE_APP_LOCK = "39"; +// +// +// //send msg to MainActivity +// private void processCustomMessage(Context context, Bundle bundle) { +//// if (Launcher.isForeground) { +//// String message = bundle.getString(JPushInterface.EXTRA_MESSAGE); +//// String extras = bundle.getString(JPushInterface.EXTRA_EXTRA); +//// Intent msgIntent = new Intent(Launcher.MESSAGE_RECEIVED_ACTION); +//// msgIntent.putExtra(Launcher.KEY_MESSAGE, message); +//// if (!ExampleUtil.isEmpty(extras)) { +//// try { +//// JSONObject extraJson = new JSONObject(extras); +//// if (extraJson.length() > 0) { +//// msgIntent.putExtra(Launcher.KEY_EXTRAS, extras); +//// } +//// } catch (JSONException e) { +//// +//// } +//// +//// } +//// LocalBroadcastManager.getInstance(context).sendBroadcast(msgIntent); +//// } +// +// String message = bundle.getString(JPushInterface.EXTRA_MESSAGE); +// String title = bundle.getString(JPushInterface.EXTRA_TITLE); +// String type = bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE); +// String extras = bundle.getString(JPushInterface.EXTRA_EXTRA); +// +// switch (message) { +// case SEND_RUNNING_APP: +// getRunningApp(context); +// break; +// case UPDATE_APP_LOCK: +// HTTPInterface.getAppPasswd(); +// break; +// default: +// break; +// } +// } +// +// private void getRunningApp(Context context) { +// HTTPInterface.sendRunningApp(context); +// } +// +//} diff --git a/src/com/aoleyun/os/jpush/PushService.java b/src/com/aoleyun/os/jpush/PushService.java index 249cc39..06cdefd 100644 --- a/src/com/aoleyun/os/jpush/PushService.java +++ b/src/com/aoleyun/os/jpush/PushService.java @@ -1,7 +1,6 @@ package com.aoleyun.os.jpush; -import cn.jpush.android.service.JCommonService; -public class PushService extends JCommonService { - -} +//public class PushService extends JCommonService { +// +//} diff --git a/src/com/aoleyun/os/jpush/TagAliasOperatorHelper.java b/src/com/aoleyun/os/jpush/TagAliasOperatorHelper.java index 0c8c321..55f9394 100644 --- a/src/com/aoleyun/os/jpush/TagAliasOperatorHelper.java +++ b/src/com/aoleyun/os/jpush/TagAliasOperatorHelper.java @@ -11,335 +11,334 @@ import com.aoleyun.os.uiuiutils.ToastUtil; import java.util.Locale; import java.util.Set; -import cn.jpush.android.api.JPushInterface; -import cn.jpush.android.api.JPushMessage; - /** * 处理tagalias相关的逻辑 * */ -public class TagAliasOperatorHelper { - private static final String TAG = "JIGUANG-TagAliasHelper"; - public static int sequence = 1; - /**增加*/ - public static final int ACTION_ADD = 1; - /**覆盖*/ - public static final int ACTION_SET = 2; - /**删除部分*/ - public static final int ACTION_DELETE = 3; - /**删除所有*/ - public static final int ACTION_CLEAN = 4; - /**查询*/ - public static final int ACTION_GET = 5; - - public static final int ACTION_CHECK = 6; - - public static final int DELAY_SEND_ACTION = 1; - - public static final int DELAY_SET_MOBILE_NUMBER_ACTION = 2; - - private Context context; - - private static TagAliasOperatorHelper mInstance; - private TagAliasOperatorHelper(){ - } - public static TagAliasOperatorHelper getInstance(){ - if(mInstance == null){ - synchronized (TagAliasOperatorHelper.class){ - if(mInstance == null){ - mInstance = new TagAliasOperatorHelper(); - } - } - } - return mInstance; - } - public void init(Context context){ - if(context != null) { - this.context = context.getApplicationContext(); - } - } - private SparseArray setActionCache = new SparseArray(); - - public Object get(int sequence){ - return setActionCache.get(sequence); - } - public Object remove(int sequence){ - return setActionCache.get(sequence); - } - public void put(int sequence, Object tagAliasBean){ - setActionCache.put(sequence,tagAliasBean); - } - private Handler delaySendHandler = new Handler(){ - @Override - public void handleMessage(Message msg) { - switch (msg.what){ - case DELAY_SEND_ACTION: - if(msg.obj !=null && msg.obj instanceof TagAliasBean){ - Logger.i(TAG,"on delay time"); - sequence++; - TagAliasBean tagAliasBean = (TagAliasBean) msg.obj; - setActionCache.put(sequence, tagAliasBean); - if(context!=null) { - handleAction(context, sequence, tagAliasBean); - }else{ - Logger.e(TAG,"#unexcepted - context was null"); - } - }else{ - Logger.w(TAG,"#unexcepted - msg obj was incorrect"); - } - break; - case DELAY_SET_MOBILE_NUMBER_ACTION: - if(msg.obj !=null && msg.obj instanceof String) { - Logger.i(TAG, "retry set mobile number"); - sequence++; - String mobileNumber = (String) msg.obj; - setActionCache.put(sequence, mobileNumber); - if(context !=null) { - handleAction(context, sequence, mobileNumber); - }else { - Logger.e(TAG, "#unexcepted - context was null"); - } - }else{ - Logger.w(TAG,"#unexcepted - msg obj was incorrect"); - } - break; - } - } - }; - public void handleAction(Context context, int sequence, String mobileNumber){ - put(sequence,mobileNumber); - Logger.d(TAG,"sequence:"+sequence+",mobileNumber:"+mobileNumber); - JPushInterface.setMobileNumber(context,sequence,mobileNumber); - } - /** - * 处理设置tag - * */ - public void handleAction(Context context, int sequence, TagAliasBean tagAliasBean){ - init(context); - if(tagAliasBean == null){ - Logger.w(TAG,"tagAliasBean was null"); - return; - } - put(sequence,tagAliasBean); - if(tagAliasBean.isAliasAction){ - switch (tagAliasBean.action){ - case ACTION_GET: - JPushInterface.getAlias(context,sequence); - break; - case ACTION_DELETE: - JPushInterface.deleteAlias(context,sequence); - break; - case ACTION_SET: - JPushInterface.setAlias(context,sequence,tagAliasBean.alias); - break; - default: - Logger.w(TAG,"unsupport alias action type"); - return; - } - }else { - switch (tagAliasBean.action) { - case ACTION_ADD: - JPushInterface.addTags(context, sequence, tagAliasBean.tags); - break; - case ACTION_SET: - JPushInterface.setTags(context, sequence, tagAliasBean.tags); - break; - case ACTION_DELETE: - JPushInterface.deleteTags(context, sequence, tagAliasBean.tags); - break; - case ACTION_CHECK: - //一次只能check一个tag - String tag = (String)tagAliasBean.tags.toArray()[0]; - JPushInterface.checkTagBindState(context,sequence,tag); - break; - case ACTION_GET: - JPushInterface.getAllTags(context, sequence); - break; - case ACTION_CLEAN: - JPushInterface.cleanTags(context, sequence); - break; - default: - Logger.w(TAG,"unsupport tag action type"); - return; - } - } - } - private boolean RetryActionIfNeeded(int errorCode,TagAliasBean tagAliasBean){ - if(!ExampleUtil.isConnected(context)){ - Logger.w(TAG,"no network"); - return false; - } - //返回的错误码为6002 超时,6014 服务器繁忙,都建议延迟重试 - if(errorCode == 6002 || errorCode == 6014){ - Logger.d(TAG,"need retry"); - if(tagAliasBean!=null){ - Message message = new Message(); - message.what = DELAY_SEND_ACTION; - message.obj = tagAliasBean; - delaySendHandler.sendMessageDelayed(message,1000*60); - String logs =getRetryStr(tagAliasBean.isAliasAction, tagAliasBean.action,errorCode); - ExampleUtil.showToast(logs, context); - return true; - } - } - return false; - } - private boolean RetrySetMObileNumberActionIfNeeded(int errorCode, String mobileNumber){ - if(!ExampleUtil.isConnected(context)){ - Logger.w(TAG,"no network"); - return false; - } - //返回的错误码为6002 超时,6024 服务器内部错误,建议稍后重试 - if(errorCode == 6002 || errorCode == 6024){ - Logger.d(TAG,"need retry"); - Message message = new Message(); - message.what = DELAY_SET_MOBILE_NUMBER_ACTION; - message.obj = mobileNumber; - delaySendHandler.sendMessageDelayed(message,1000*60); - String str = "Failed to set mobile number due to %s. Try again after 60s."; - str = String.format(Locale.ENGLISH,str,(errorCode == 6002 ? "timeout" : "server internal error”")); - ExampleUtil.showToast(str, context); - return true; - } - return false; - - } - private String getRetryStr(boolean isAliasAction, int actionType, int errorCode){ - String str = "Failed to %s %s due to %s. Try again after 60s."; - str = String.format(Locale.ENGLISH,str,getActionStr(actionType),(isAliasAction? "alias" : " tags") ,(errorCode == 6002 ? "timeout" : "server too busy")); - return str; - } - - private String getActionStr(int actionType){ - switch (actionType){ - case ACTION_ADD: - return "add"; - case ACTION_SET: - return "set"; - case ACTION_DELETE: - return "delete"; - case ACTION_GET: - return "get"; - case ACTION_CLEAN: - return "clean"; - case ACTION_CHECK: - return "check"; - } - return "unkonw operation"; - } - public void onTagOperatorResult(Context context, JPushMessage jPushMessage) { - int sequence = jPushMessage.getSequence(); - Logger.i(TAG,"action - onTagOperatorResult, sequence:"+sequence+",tags:"+jPushMessage.getTags()); - Logger.i(TAG,"tags size:"+jPushMessage.getTags().size()); - init(context); - //根据sequence从之前操作缓存中获取缓存记录 - TagAliasBean tagAliasBean = (TagAliasBean)setActionCache.get(sequence); - if(tagAliasBean == null){ - ExampleUtil.showToast("获取缓存记录失败", context); - return; - } - if(jPushMessage.getErrorCode() == 0){ - Logger.i(TAG,"action - modify tag Success,sequence:"+sequence); - setActionCache.remove(sequence); - String logs = getActionStr(tagAliasBean.action)+" tags success"; - Logger.i(TAG,logs); - Log.e(TAG,"Tag绑定成功: " + jPushMessage.getTags()); - ToastUtil.betaShow("Tag绑定成功: " + jPushMessage.getTags()); - ExampleUtil.showToast(logs, context); - }else{ - String logs = "Failed to " + getActionStr(tagAliasBean.action)+" tags"; - if(jPushMessage.getErrorCode() == 6018){ - //tag数量超过限制,需要先清除一部分再add - logs += ", tags is exceed limit need to clean"; - } - logs += ", errorCode:" + jPushMessage.getErrorCode(); - Logger.e(TAG, logs); - if(!RetryActionIfNeeded(jPushMessage.getErrorCode(),tagAliasBean)) { - ExampleUtil.showToast(logs, context); - } - } - } - public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage){ - int sequence = jPushMessage.getSequence(); - Logger.i(TAG,"action - onCheckTagOperatorResult, sequence:"+sequence+",checktag:"+jPushMessage.getCheckTag()); - init(context); - //根据sequence从之前操作缓存中获取缓存记录 - TagAliasBean tagAliasBean = (TagAliasBean)setActionCache.get(sequence); - if(tagAliasBean == null){ - ExampleUtil.showToast("获取缓存记录失败", context); - return; - } - if(jPushMessage.getErrorCode() == 0){ - Logger.i(TAG,"tagBean:"+tagAliasBean); - setActionCache.remove(sequence); - String logs = getActionStr(tagAliasBean.action)+" tag "+jPushMessage.getCheckTag() + " bind state success,state:"+jPushMessage.getTagCheckStateResult(); - Logger.i(TAG,logs); - ExampleUtil.showToast(logs, context); - }else{ - String logs = "Failed to " + getActionStr(tagAliasBean.action)+" tags, errorCode:" + jPushMessage.getErrorCode(); - Logger.e(TAG, logs); - if(!RetryActionIfNeeded(jPushMessage.getErrorCode(),tagAliasBean)) { - ExampleUtil.showToast(logs, context); - } - } - } - public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) { - int sequence = jPushMessage.getSequence(); - Logger.i(TAG,"action - onAliasOperatorResult, sequence:"+sequence+",alias:"+jPushMessage.getAlias()); - init(context); - //根据sequence从之前操作缓存中获取缓存记录 - TagAliasBean tagAliasBean = (TagAliasBean)setActionCache.get(sequence); - if(tagAliasBean == null){ - ExampleUtil.showToast("获取缓存记录失败", context); - return; - } - if(jPushMessage.getErrorCode() == 0){ - Logger.i(TAG,"action - modify alias Success,sequence:"+sequence); - setActionCache.remove(sequence); - String logs = getActionStr(tagAliasBean.action)+" alias success"; - Logger.i(TAG,logs); - Log.e(TAG,"Alias绑定成功: "+jPushMessage.getAlias()); - ToastUtil.betaShow("Alias绑定成功: "+jPushMessage.getAlias()); - ExampleUtil.showToast(logs, context); - }else{ - String logs = "Failed to " + getActionStr(tagAliasBean.action)+" alias, errorCode:" + jPushMessage.getErrorCode(); - Logger.e(TAG, logs); - if(!RetryActionIfNeeded(jPushMessage.getErrorCode(),tagAliasBean)) { - ExampleUtil.showToast(logs, context); - } - } - } - //设置手机号码回调 - public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) { - int sequence = jPushMessage.getSequence(); - Logger.i(TAG,"action - onMobileNumberOperatorResult, sequence:"+sequence+",mobileNumber:"+jPushMessage.getMobileNumber()); - init(context); - if(jPushMessage.getErrorCode() == 0){ - Logger.i(TAG,"action - set mobile number Success,sequence:"+sequence); - setActionCache.remove(sequence); - }else{ - String logs = "Failed to set mobile number, errorCode:" + jPushMessage.getErrorCode(); - Logger.e(TAG, logs); - if(!RetrySetMObileNumberActionIfNeeded(jPushMessage.getErrorCode(),jPushMessage.getMobileNumber())){ - ExampleUtil.showToast(logs, context); - } - } - } - public static class TagAliasBean{ - public int action; - public Set tags; - public String alias; - public boolean isAliasAction; - - @Override - public String toString() { - return "TagAliasBean{" + - "action=" + action + - ", tags=" + tags + - ", alias='" + alias + '\'' + - ", isAliasAction=" + isAliasAction + - '}'; - } - } - - -} +//public class TagAliasOperatorHelper { +// private static final String TAG = "JIGUANG-TagAliasHelper"; +// public static int sequence = 1; +// /**增加*/ +// public static final int ACTION_ADD = 1; +// /**覆盖*/ +// public static final int ACTION_SET = 2; +// /**删除部分*/ +// public static final int ACTION_DELETE = 3; +// /**删除所有*/ +// public static final int ACTION_CLEAN = 4; +// /**查询*/ +// public static final int ACTION_GET = 5; +// +// public static final int ACTION_CHECK = 6; +// +// public static final int DELAY_SEND_ACTION = 1; +// +// public static final int DELAY_SET_MOBILE_NUMBER_ACTION = 2; +// +// private Context context; +// +// private static TagAliasOperatorHelper mInstance; +// private TagAliasOperatorHelper(){ +// } +// public static TagAliasOperatorHelper getInstance(){ +// if(mInstance == null){ +// synchronized (TagAliasOperatorHelper.class){ +// if(mInstance == null){ +// mInstance = new TagAliasOperatorHelper(); +// } +// } +// } +// return mInstance; +// } +// public void init(Context context){ +// if(context != null) { +// this.context = context.getApplicationContext(); +// } +// } +// private SparseArray setActionCache = new SparseArray(); +// +// public Object get(int sequence){ +// return setActionCache.get(sequence); +// } +// public Object remove(int sequence){ +// return setActionCache.get(sequence); +// } +// public void put(int sequence, Object tagAliasBean){ +// setActionCache.put(sequence,tagAliasBean); +// } +// private Handler delaySendHandler = new Handler(){ +// @Override +// public void handleMessage(Message msg) { +// switch (msg.what){ +// case DELAY_SEND_ACTION: +// if(msg.obj !=null && msg.obj instanceof TagAliasBean){ +// Logger.i(TAG,"on delay time"); +// sequence++; +// TagAliasBean tagAliasBean = (TagAliasBean) msg.obj; +// setActionCache.put(sequence, tagAliasBean); +// if(context!=null) { +// handleAction(context, sequence, tagAliasBean); +// }else{ +// Logger.e(TAG,"#unexcepted - context was null"); +// } +// }else{ +// Logger.w(TAG,"#unexcepted - msg obj was incorrect"); +// } +// break; +// case DELAY_SET_MOBILE_NUMBER_ACTION: +// if(msg.obj !=null && msg.obj instanceof String) { +// Logger.i(TAG, "retry set mobile number"); +// sequence++; +// String mobileNumber = (String) msg.obj; +// setActionCache.put(sequence, mobileNumber); +// if(context !=null) { +// handleAction(context, sequence, mobileNumber); +// }else { +// Logger.e(TAG, "#unexcepted - context was null"); +// } +// }else{ +// Logger.w(TAG,"#unexcepted - msg obj was incorrect"); +// } +// break; +// } +// } +// }; +// public void handleAction(Context context, int sequence, String mobileNumber){ +// put(sequence,mobileNumber); +// Logger.d(TAG,"sequence:"+sequence+",mobileNumber:"+mobileNumber); +// JPushInterface.setMobileNumber(context,sequence,mobileNumber); +// } +// /** +// * 处理设置tag +// * */ +// public void handleAction(Context context, int sequence, TagAliasBean tagAliasBean){ +// init(context); +// if(tagAliasBean == null){ +// Logger.w(TAG,"tagAliasBean was null"); +// return; +// } +// put(sequence,tagAliasBean); +// if(tagAliasBean.isAliasAction){ +// switch (tagAliasBean.action){ +// case ACTION_GET: +// JPushInterface.getAlias(context,sequence); +// break; +// case ACTION_DELETE: +// JPushInterface.deleteAlias(context,sequence); +// break; +// case ACTION_SET: +// JPushInterface.setAlias(context,sequence,tagAliasBean.alias); +// break; +// default: +// Logger.w(TAG,"unsupport alias action type"); +// return; +// } +// }else { +// switch (tagAliasBean.action) { +// case ACTION_ADD: +// JPushInterface.addTags(context, sequence, tagAliasBean.tags); +// break; +// case ACTION_SET: +// JPushInterface.setTags(context, sequence, tagAliasBean.tags); +// break; +// case ACTION_DELETE: +// JPushInterface.deleteTags(context, sequence, tagAliasBean.tags); +// break; +// case ACTION_CHECK: +// //一次只能check一个tag +// String tag = (String)tagAliasBean.tags.toArray()[0]; +// JPushInterface.checkTagBindState(context,sequence,tag); +// break; +// case ACTION_GET: +// JPushInterface.getAllTags(context, sequence); +// break; +// case ACTION_CLEAN: +// JPushInterface.cleanTags(context, sequence); +// break; +// default: +// Logger.w(TAG,"unsupport tag action type"); +// return; +// } +// } +// } +// private boolean RetryActionIfNeeded(int errorCode,TagAliasBean tagAliasBean){ +// if(!ExampleUtil.isConnected(context)){ +// Logger.w(TAG,"no network"); +// return false; +// } +// //返回的错误码为6002 超时,6014 服务器繁忙,都建议延迟重试 +// if(errorCode == 6002 || errorCode == 6014){ +// Logger.d(TAG,"need retry"); +// if(tagAliasBean!=null){ +// Message message = new Message(); +// message.what = DELAY_SEND_ACTION; +// message.obj = tagAliasBean; +// delaySendHandler.sendMessageDelayed(message,1000*60); +// String logs =getRetryStr(tagAliasBean.isAliasAction, tagAliasBean.action,errorCode); +// ExampleUtil.showToast(logs, context); +// return true; +// } +// } +// return false; +// } +// private boolean RetrySetMObileNumberActionIfNeeded(int errorCode, String mobileNumber){ +// if(!ExampleUtil.isConnected(context)){ +// Logger.w(TAG,"no network"); +// return false; +// } +// //返回的错误码为6002 超时,6024 服务器内部错误,建议稍后重试 +// if(errorCode == 6002 || errorCode == 6024){ +// Logger.d(TAG,"need retry"); +// Message message = new Message(); +// message.what = DELAY_SET_MOBILE_NUMBER_ACTION; +// message.obj = mobileNumber; +// delaySendHandler.sendMessageDelayed(message,1000*60); +// String str = "Failed to set mobile number due to %s. Try again after 60s."; +// str = String.format(Locale.ENGLISH,str,(errorCode == 6002 ? "timeout" : "server internal error”")); +// ExampleUtil.showToast(str, context); +// return true; +// } +// return false; +// +// } +// private String getRetryStr(boolean isAliasAction, int actionType, int errorCode){ +// String str = "Failed to %s %s due to %s. Try again after 60s."; +// str = String.format(Locale.ENGLISH,str,getActionStr(actionType),(isAliasAction? "alias" : " tags") ,(errorCode == 6002 ? "timeout" : "server too busy")); +// return str; +// } +// +// private String getActionStr(int actionType){ +// switch (actionType){ +// case ACTION_ADD: +// return "add"; +// case ACTION_SET: +// return "set"; +// case ACTION_DELETE: +// return "delete"; +// case ACTION_GET: +// return "get"; +// case ACTION_CLEAN: +// return "clean"; +// case ACTION_CHECK: +// return "check"; +// } +// return "unkonw operation"; +// } +// +// public void onTagOperatorResult(Context context, JPushMessage jPushMessage) { +// int sequence = jPushMessage.getSequence(); +// Logger.i(TAG,"action - onTagOperatorResult, sequence:"+sequence+",tags:"+jPushMessage.getTags()); +// Logger.i(TAG,"tags size:"+jPushMessage.getTags().size()); +// init(context); +// //根据sequence从之前操作缓存中获取缓存记录 +// TagAliasBean tagAliasBean = (TagAliasBean)setActionCache.get(sequence); +// if(tagAliasBean == null){ +// ExampleUtil.showToast("获取缓存记录失败", context); +// return; +// } +// if(jPushMessage.getErrorCode() == 0){ +// Logger.i(TAG,"action - modify tag Success,sequence:"+sequence); +// setActionCache.remove(sequence); +// String logs = getActionStr(tagAliasBean.action)+" tags success"; +// Logger.i(TAG,logs); +// Log.e(TAG,"Tag绑定成功: " + jPushMessage.getTags()); +// ToastUtil.betaShow("Tag绑定成功: " + jPushMessage.getTags()); +// ExampleUtil.showToast(logs, context); +// }else{ +// String logs = "Failed to " + getActionStr(tagAliasBean.action)+" tags"; +// if(jPushMessage.getErrorCode() == 6018){ +// //tag数量超过限制,需要先清除一部分再add +// logs += ", tags is exceed limit need to clean"; +// } +// logs += ", errorCode:" + jPushMessage.getErrorCode(); +// Logger.e(TAG, logs); +// if(!RetryActionIfNeeded(jPushMessage.getErrorCode(),tagAliasBean)) { +// ExampleUtil.showToast(logs, context); +// } +// } +// } +// +// public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage){ +// int sequence = jPushMessage.getSequence(); +// Logger.i(TAG,"action - onCheckTagOperatorResult, sequence:"+sequence+",checktag:"+jPushMessage.getCheckTag()); +// init(context); +// //根据sequence从之前操作缓存中获取缓存记录 +// TagAliasBean tagAliasBean = (TagAliasBean)setActionCache.get(sequence); +// if(tagAliasBean == null){ +// ExampleUtil.showToast("获取缓存记录失败", context); +// return; +// } +// if(jPushMessage.getErrorCode() == 0){ +// Logger.i(TAG,"tagBean:"+tagAliasBean); +// setActionCache.remove(sequence); +// String logs = getActionStr(tagAliasBean.action)+" tag "+jPushMessage.getCheckTag() + " bind state success,state:"+jPushMessage.getTagCheckStateResult(); +// Logger.i(TAG,logs); +// ExampleUtil.showToast(logs, context); +// }else{ +// String logs = "Failed to " + getActionStr(tagAliasBean.action)+" tags, errorCode:" + jPushMessage.getErrorCode(); +// Logger.e(TAG, logs); +// if(!RetryActionIfNeeded(jPushMessage.getErrorCode(),tagAliasBean)) { +// ExampleUtil.showToast(logs, context); +// } +// } +// } +// +// public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) { +// int sequence = jPushMessage.getSequence(); +// Logger.i(TAG,"action - onAliasOperatorResult, sequence:"+sequence+",alias:"+jPushMessage.getAlias()); +// init(context); +// //根据sequence从之前操作缓存中获取缓存记录 +// TagAliasBean tagAliasBean = (TagAliasBean)setActionCache.get(sequence); +// if(tagAliasBean == null){ +// ExampleUtil.showToast("获取缓存记录失败", context); +// return; +// } +// if(jPushMessage.getErrorCode() == 0){ +// Logger.i(TAG,"action - modify alias Success,sequence:"+sequence); +// setActionCache.remove(sequence); +// String logs = getActionStr(tagAliasBean.action)+" alias success"; +// Logger.i(TAG,logs); +// Log.e(TAG,"Alias绑定成功: "+jPushMessage.getAlias()); +// ToastUtil.betaShow("Alias绑定成功: "+jPushMessage.getAlias()); +// ExampleUtil.showToast(logs, context); +// }else{ +// String logs = "Failed to " + getActionStr(tagAliasBean.action)+" alias, errorCode:" + jPushMessage.getErrorCode(); +// Logger.e(TAG, logs); +// if(!RetryActionIfNeeded(jPushMessage.getErrorCode(),tagAliasBean)) { +// ExampleUtil.showToast(logs, context); +// } +// } +// } +// //设置手机号码回调 +// public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) { +// int sequence = jPushMessage.getSequence(); +// Logger.i(TAG,"action - onMobileNumberOperatorResult, sequence:"+sequence+",mobileNumber:"+jPushMessage.getMobileNumber()); +// init(context); +// if(jPushMessage.getErrorCode() == 0){ +// Logger.i(TAG,"action - set mobile number Success,sequence:"+sequence); +// setActionCache.remove(sequence); +// }else{ +// String logs = "Failed to set mobile number, errorCode:" + jPushMessage.getErrorCode(); +// Logger.e(TAG, logs); +// if(!RetrySetMObileNumberActionIfNeeded(jPushMessage.getErrorCode(),jPushMessage.getMobileNumber())){ +// ExampleUtil.showToast(logs, context); +// } +// } +// } +// +// public static class TagAliasBean{ +// public int action; +// public Set tags; +// public String alias; +// public boolean isAliasAction; +// +// @Override +// public String toString() { +// return "TagAliasBean{" + +// "action=" + action + +// ", tags=" + tags + +// ", alias='" + alias + '\'' + +// ", isAliasAction=" + isAliasAction + +// '}'; +// } +// } +//} diff --git a/src/com/aoleyun/os/jpush/TestActivity.java b/src/com/aoleyun/os/jpush/TestActivity.java index ac04156..9094603 100644 --- a/src/com/aoleyun/os/jpush/TestActivity.java +++ b/src/com/aoleyun/os/jpush/TestActivity.java @@ -6,8 +6,6 @@ import android.os.Bundle; import android.view.ViewGroup.LayoutParams; import android.widget.TextView; -import cn.jpush.android.api.JPushInterface; - public class TestActivity extends Activity { @Override @@ -21,8 +19,8 @@ public class TestActivity extends Activity { String title = null; String content = null; if(bundle!=null){ - title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE); - content = bundle.getString(JPushInterface.EXTRA_ALERT); +// title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE); +// content = bundle.getString(JPushInterface.EXTRA_ALERT); } tv.setText("Title : " + title + " " + "Content : " + content); } diff --git a/src/com/aoleyun/os/model/LoaderTask.java b/src/com/aoleyun/os/model/LoaderTask.java index 9aa83d6..f9f0271 100644 --- a/src/com/aoleyun/os/model/LoaderTask.java +++ b/src/com/aoleyun/os/model/LoaderTask.java @@ -35,6 +35,8 @@ import android.content.pm.ShortcutInfo; import android.os.Handler; import android.os.Process; import android.os.UserHandle; +import android.provider.Settings; +import android.provider.SettingsValidators; import android.text.TextUtils; import android.util.Log; import android.util.LongSparseArray; @@ -274,8 +276,8 @@ public class LoaderTask implements Runnable { this.add("com.aoleyunos.dop1"); this.add("com.aoleyunos.dop2"); //system - this.add("com.android.documentsui"); - this.add("com.android.messaging"); +// this.add("com.android.documentsui"); +// this.add("com.android.messaging"); this.add("com.android.music"); this.add("com.android.camera"); this.add("com.android.camera2"); @@ -296,16 +298,26 @@ public class LoaderTask implements Runnable { final Context context = mApp.getContext(); ArrayList> installQueue = new ArrayList<>(); final List profiles = mUserManager.getUserProfiles(); + String whiteList = Settings.System.getString(context.getContentResolver(), "only_jgy_shortcut_list"); for (UserHandle user : profiles) { final List apps = mLauncherApps.getActivityList(null, user); ArrayList added = new ArrayList(); synchronized (this) { for (LauncherActivityInfo app : apps) { + if (BuildConfig.APPLICATION_ID.equals(app.getApplicationInfo().packageName)) + continue; + Log.e(TAG, "verifyApplications: " + app.getApplicationInfo().packageName); /*系统应用*/ if ((app.getApplicationFlags() & ApplicationInfo.FLAG_SYSTEM) == 1) { if (!showApp.contains(app.getApplicationInfo().packageName)) { continue; } + } else { + if (TextUtils.isEmpty(whiteList)) { + continue; + } else if (!whiteList.contains(app.getApplicationInfo().packageName)){ + continue; + } } InstallShortcutReceiver.PendingInstallShortcutInfo pendingInstallShortcutInfo = new InstallShortcutReceiver.PendingInstallShortcutInfo(app, context); added.add(pendingInstallShortcutInfo); diff --git a/src/com/aoleyun/os/network/HTTPInterface.java b/src/com/aoleyun/os/network/HTTPInterface.java index 7a83b36..e246824 100644 --- a/src/com/aoleyun/os/network/HTTPInterface.java +++ b/src/com/aoleyun/os/network/HTTPInterface.java @@ -7,7 +7,7 @@ import android.util.Log; import com.aoleyun.os.network.bean.AppPasswdBean; import com.aoleyun.os.network.bean.BaseResponse; import com.aoleyun.os.uiuiutils.APKUtils; -import com.aoleyun.os.jpush.TagAliasOperatorHelper; +//import com.aoleyun.os.jpush.TagAliasOperatorHelper; import com.aoleyun.os.uiuiutils.JGYUtils; import com.aoleyun.os.uiuiutils.TimeUtils; import com.google.gson.Gson; @@ -23,9 +23,6 @@ import io.reactivex.Observer; import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; -import static com.aoleyun.os.jpush.TagAliasOperatorHelper.ACTION_SET; -import static com.aoleyun.os.jpush.TagAliasOperatorHelper.sequence; - /** * @author : fanhuitong * e-mail : @@ -97,7 +94,7 @@ public class HTTPInterface { } } }); - setTag(context, set); +// setTag(context, set); } else { Log.e(TAG + ":" + "setJpushTags", "onNext: " + "batch empty"); } @@ -159,13 +156,13 @@ public class HTTPInterface { }); } - private static void setTag(Context context, Set set) { - TagAliasOperatorHelper.TagAliasBean tagAliasBean = new TagAliasOperatorHelper.TagAliasBean(); - tagAliasBean.action = ACTION_SET; - sequence++; - tagAliasBean.tags = set; - tagAliasBean.isAliasAction = false; - TagAliasOperatorHelper.getInstance().handleAction(context, sequence, tagAliasBean); - } +// private static void setTag(Context context, Set set) { +// TagAliasOperatorHelper.TagAliasBean tagAliasBean = new TagAliasOperatorHelper.TagAliasBean(); +// tagAliasBean.action = ACTION_SET; +// sequence++; +// tagAliasBean.tags = set; +// tagAliasBean.isAliasAction = false; +// TagAliasOperatorHelper.getInstance().handleAction(context, sequence, tagAliasBean); +// } } diff --git a/src/com/aoleyun/os/uiuiutils/JGYUtils.java b/src/com/aoleyun/os/uiuiutils/JGYUtils.java index 0f0e71a..74badf7 100644 --- a/src/com/aoleyun/os/uiuiutils/JGYUtils.java +++ b/src/com/aoleyun/os/uiuiutils/JGYUtils.java @@ -1,14 +1,17 @@ package com.aoleyun.os.uiuiutils; import android.annotation.SuppressLint; +import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; +import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; +import com.android.server.BootReceiver; import com.aoleyun.os.BuildConfig; import com.aoleyun.os.model.LoaderTask; @@ -180,5 +183,30 @@ public class JGYUtils { appSet.addAll(LoaderTask.showApp); return appSet.contains(pkg); } + + + + public static final String PACKAGE_DEVICEINFO = "com.aoleyun.sn"; + public static final String PACKAGE_APPSTORE = "com.aoleyun.appstore"; + + public static final String CLASS_DEVICEINFO = "com.aoleyun.sn.receiver.BootReceiver"; + public static final String CLASS_APPSTORE = "com.aoleyun.appstore.receiver.BootReceiver"; + + public static final String ACTION_DEVICEINFO = "com.aoleyun.sn.intent.action.BOOT_COMPLETED"; + public static final String ACTION_APPSTORE = "com.aoleyun.appstore.intent.action.BOOT_COMPLETED"; + + public void wakeUpDeviceInfo() { + //启动设备信息 + Intent bootIntent = new Intent(ACTION_DEVICEINFO); + bootIntent.setComponent(new ComponentName(PACKAGE_DEVICEINFO, CLASS_DEVICEINFO)); + mContext.sendBroadcast(bootIntent); + } + + public void wakeUpAppstore() { + //启动应用市场 + Intent bootIntent = new Intent(ACTION_APPSTORE); + bootIntent.setComponent(new ComponentName(PACKAGE_APPSTORE, CLASS_APPSTORE)); + mContext.sendBroadcast(bootIntent); + } }