From c72030f8b2c09da8a7cf75964f197f5b0f2760fe Mon Sep 17 00:00:00 2001 From: Administrator <981964879@qq.com> Date: Fri, 21 Aug 2020 18:00:47 +0800 Subject: [PATCH] =?UTF-8?q?2020.08.21=20=E6=9E=81=E5=85=89=E6=8E=A8?= =?UTF-8?q?=E9=80=81=EF=BC=8C=E5=88=86=E8=BE=A8=E7=8E=87=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + app/.gitignore | 4 +- app/build.gradle | 152 +++++++- app/proguard-rules.pro | 21 ++ app/src/jks/tt.jks | Bin 0 -> 2097 bytes app/src/jks/xueshibaoos.jks | Bin 0 -> 2552 bytes app/src/main/AndroidManifest.xml | 220 +++++++++++- app/src/main/java/com/tt/MyApplication.kt | 13 - .../java/com/tt/activity/JMainActivity.java | 22 ++ .../main/java/com/tt/activity/MainActivity.kt | 14 +- .../main/java/com/tt/base/BaseActivity.java | 131 +++++++ .../main/java/com/tt/base/JMyApplication.java | 45 +++ .../main/java/com/tt/base/MyApplication.kt | 47 +++ .../tt/sdk/jpush/jpushdemo/ExampleUtil.java | 133 +++++++ .../jpushdemo/LocalBroadcastManager.java | 263 ++++++++++++++ .../com/tt/sdk/jpush/jpushdemo/Logger.java | 42 +++ .../tt/sdk/jpush/jpushdemo/MyReceiver.java | 123 +++++++ .../jpush/jpushdemo/PushMessageReceiver.java | 140 ++++++++ .../tt/sdk/jpush/jpushdemo/PushService.java | 8 + .../jpushdemo/TagAliasOperatorHelper.java | 338 ++++++++++++++++++ .../tt/sdk/jpush/jpushdemo/TestActivity.java | 32 ++ .../com/tt/ttutils/java/DevicesUtils.java | 45 +++ .../java/com/tt/ttutils/java/ToastUtil.java | 1 - .../main/java/com/tt/ttutils/kt/ToastUtil.kt | 7 + app/src/main/jni/getSn.cpp | 18 + .../main/res/layout-land/activity_main.xml | 3 +- .../main/res/layout-port/activity_main.xml | 2 +- app/src/zip/JPushExample(1725787).zip | Bin 0 -> 1056441 bytes 28 files changed, 1799 insertions(+), 28 deletions(-) create mode 100644 app/proguard-rules.pro create mode 100644 app/src/jks/tt.jks create mode 100644 app/src/jks/xueshibaoos.jks delete mode 100644 app/src/main/java/com/tt/MyApplication.kt create mode 100644 app/src/main/java/com/tt/activity/JMainActivity.java create mode 100644 app/src/main/java/com/tt/base/BaseActivity.java create mode 100644 app/src/main/java/com/tt/base/JMyApplication.java create mode 100644 app/src/main/java/com/tt/base/MyApplication.kt create mode 100644 app/src/main/java/com/tt/sdk/jpush/jpushdemo/ExampleUtil.java create mode 100644 app/src/main/java/com/tt/sdk/jpush/jpushdemo/LocalBroadcastManager.java create mode 100644 app/src/main/java/com/tt/sdk/jpush/jpushdemo/Logger.java create mode 100644 app/src/main/java/com/tt/sdk/jpush/jpushdemo/MyReceiver.java create mode 100644 app/src/main/java/com/tt/sdk/jpush/jpushdemo/PushMessageReceiver.java create mode 100644 app/src/main/java/com/tt/sdk/jpush/jpushdemo/PushService.java create mode 100644 app/src/main/java/com/tt/sdk/jpush/jpushdemo/TagAliasOperatorHelper.java create mode 100644 app/src/main/java/com/tt/sdk/jpush/jpushdemo/TestActivity.java create mode 100644 app/src/main/java/com/tt/ttutils/java/DevicesUtils.java create mode 100644 app/src/main/java/com/tt/ttutils/kt/ToastUtil.kt create mode 100644 app/src/main/jni/getSn.cpp create mode 100644 app/src/zip/JPushExample(1725787).zip diff --git a/.gitignore b/.gitignore index f0c20a1..aac3b37 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,6 @@ lint/generated/ lint/outputs/ lint/tmp/ # lint/reports/ +/.idea/ +/gradlew.bat +/gradlew diff --git a/app/.gitignore b/app/.gitignore index 42afabf..b1b19de 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1 +1,3 @@ -/build \ No newline at end of file +/build +/src/androidTest/java/com/tt/ttutils/ +/src/test/java/com/tt/ttutils/ diff --git a/app/build.gradle b/app/build.gradle index 935c06b..fd9af64 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,28 +2,133 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' +def appName() { + return "TT" +} + +def releaseTime() { + return new Date().format("yyyyMMdd", TimeZone.getDefault()) +} + android { - compileSdkVersion 30 + compileSdkVersion 29 buildToolsVersion "30.0.1" defaultConfig { applicationId "com.tt.ttutils" minSdkVersion 14 - targetSdkVersion 30 - versionCode 1 - versionName "1.0" + targetSdkVersion 29 +// versionCode 1 +// versionName "1.0" + multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + ndk { + //选择要添加的对应 cpu 类型的 .so 库。 + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a','x86' + // 还可以添加 'x86', 'x86_64', 'mips', 'mips64' + } + manifestPlaceholders = [ + JPUSH_PKGNAME: applicationId, + JPUSH_APPKEY : "731637f412deca8540a1f873", //JPush 上注册的包名对应的 Appkey. + JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. + ] + } + + lintOptions { + checkReleaseBuilds false + } + dexOptions { + jumboMode true + } + //多版本 + productFlavors { + official { + flavorDimensions "default" + versionCode 1 + versionName "1.0" + signingConfig signingConfigs.debug + } + + beta { + flavorDimensions "default" + versionCode 1 + versionName "1.0" + signingConfig signingConfigs.debug + buildConfigField "String", "test", '"测试文本"' + } + } + sourceSets { + beta.res.srcDirs = ['src/beta/res'] + } + +//签名 + signingConfigs { + debug { + storeFile file("src/jks/tt.jks") + storePassword "fht19961207" + keyAlias "key0" + keyPassword "981964879aa" + v1SigningEnabled true + v2SigningEnabled false + } + + release { + storeFile file("src/jks/tt.jks") + storePassword "fht19961207" + keyAlias "key0" + keyPassword "981964879aa" + v1SigningEnabled true + v2SigningEnabled false + } } buildTypes { - release { + debug { + // 显示Log + buildConfigField "boolean", "LOG_DEBUG", "true" + versionNameSuffix "-debug" minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + //Zipalign优化 + zipAlignEnabled true + signingConfig signingConfigs.debug + applicationVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null) { + def fileName = "${appName()}-${variant.versionCode}-V${variant.versionName}-${releaseTime()}-${buildType.name}.apk" + output.outputFileName = fileName + } + } + } + } + release { + // 不显示Log + buildConfigField "boolean", "LOG_DEBUG", "false" + //混淆 + minifyEnabled false + //Zipalign优化 + zipAlignEnabled true + //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + //签名 + signingConfig signingConfigs.release +// 将release版本的包名重命名,加上版本及日期 + applicationVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = "" + if (outputFile != null) { + def fileName = "${appName()}-${variant.versionCode}-V${variant.versionName}-${releaseTime()}-${productFlavors[0].name}-${buildType.name}.apk" + output.outputFileName = new File(outputFile, fileName) + } + } + } } } } + dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" @@ -33,5 +138,40 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + ////三方 + //极光推送 + implementation 'cn.jiguang.sdk:jpush:3.7.0' // 此处以JPush 3.7.0 版本为例。 + implementation 'cn.jiguang.sdk:jcore:2.4.2' // 此处以JCore 2.4.2 版本为例。 + //okhttp + implementation 'com.squareup.okhttp3:okhttp:4.6.0' + //RxJava和Retrofit + implementation 'io.reactivex.rxjava2:rxjava:2.2.5' + implementation 'io.reactivex.rxjava2:rxandroid:2.1.0' + implementation 'com.squareup.retrofit2:retrofit:2.3.0' + implementation 'com.squareup.retrofit2:converter-gson:2.3.0' + implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' + ////json解析 + //Gson + implementation 'com.google.code.gson:gson:2.8.6' + //Jackson + implementation 'org.codehaus.jackson:jackson-mapper-asl:1.9.13' + implementation 'org.codehaus.jackson:jackson-core-asl:1.9.13' + //二维码 + implementation 'com.google.zxing:core:3.3.0' + + //个人 + //更换字体框架 + implementation 'uk.co.chrisjenx:calligraphy:2.3.0' + ////图片加载框架 + //Glide + implementation 'com.github.bumptech.glide:glide:4.11.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' + //Fresco + implementation 'com.facebook.fresco:fresco:2.2.0' + //Picasso + implementation 'com.squareup.picasso:picasso:2.71828' + //屏幕适配方案 + //https://github.com/JessYanCoding/AndroidAutoSize + implementation 'me.jessyan:autosize:1.2.1' } \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/jks/tt.jks b/app/src/jks/tt.jks new file mode 100644 index 0000000000000000000000000000000000000000..34e26b45eb9ac8f1d54b8b7aa24566482b630318 GIT binary patch literal 2097 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 h=~IOHotm-=tG={6OY~?wV#1*=AWE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/tt/MyApplication.kt b/app/src/main/java/com/tt/MyApplication.kt deleted file mode 100644 index 9d129d9..0000000 --- a/app/src/main/java/com/tt/MyApplication.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.tt - -import android.app.Application -import com.tt.ttutils.java.ToastUtil - -class MyApplication : Application() { - override fun onCreate() { - super.onCreate() - ToastUtil.init(this) - } - - -} \ No newline at end of file diff --git a/app/src/main/java/com/tt/activity/JMainActivity.java b/app/src/main/java/com/tt/activity/JMainActivity.java new file mode 100644 index 0000000..cf01cd7 --- /dev/null +++ b/app/src/main/java/com/tt/activity/JMainActivity.java @@ -0,0 +1,22 @@ +package com.tt.activity; + +import com.tt.base.BaseActivity; +import com.tt.ttutils.R; + +public class JMainActivity extends BaseActivity { + + @Override + protected int setLayoutResourceID() { + return R.layout.activity_main; + } + + @Override + protected void initView() { + + } + + @Override + protected void initData() { + + } +} diff --git a/app/src/main/java/com/tt/activity/MainActivity.kt b/app/src/main/java/com/tt/activity/MainActivity.kt index 66ac0f8..3ea535d 100644 --- a/app/src/main/java/com/tt/activity/MainActivity.kt +++ b/app/src/main/java/com/tt/activity/MainActivity.kt @@ -1,16 +1,22 @@ package com.tt.activity -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.util.Log +import androidx.appcompat.app.AppCompatActivity import com.tt.ttutils.R import com.tt.ttutils.java.CmdUtil +import com.tt.ttutils.java.DevicesUtils +import kotlinx.android.synthetic.main.activity_main.* +import me.jessyan.autosize.internal.CancelAdapt -class MainActivity : AppCompatActivity() { +class MainActivity : AppCompatActivity(), CancelAdapt { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //截图 - CmdUtil.execute(" screencap -p /sdcard/" + "screen" + System.currentTimeMillis() + ".png"); - + CmdUtil.execute(" screencap -p /sdcard/" + "screen" + System.currentTimeMillis() + ".png") + textView.setText(DevicesUtils.getSerial()) } + + } \ No newline at end of file diff --git a/app/src/main/java/com/tt/base/BaseActivity.java b/app/src/main/java/com/tt/base/BaseActivity.java new file mode 100644 index 0000000..db869c5 --- /dev/null +++ b/app/src/main/java/com/tt/base/BaseActivity.java @@ -0,0 +1,131 @@ +package com.tt.base; + +import android.os.Build; +import android.os.Bundle; + + +import android.os.Handler; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + + +public abstract class BaseActivity extends AppCompatActivity { + private static Handler sHandler; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(setLayoutResourceID()); + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + sHandler = new Handler(); + sHandler.post(mHideRunnable); // hide the navigation bar + final View decorView = getWindow().getDecorView(); + decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { + @Override + public void onSystemUiVisibilityChange(int visibility) { + if (visibility == View.SYSTEM_UI_FLAG_VISIBLE) { + sHandler.postDelayed(mHideRunnable, 3000); // hide the navigation bar + } + } + }); + + initView(); + initData(); + setListener(); + + } + + + protected abstract int setLayoutResourceID(); + + protected abstract void initView(); + + + protected void setListener() { + } + + + protected abstract void initData(); + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (hasFocus) { +// initViewFull(this); + } + } + +// public static void initViewFull(final Activity activity) { +// activity.getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { +// @Override +// public void onSystemUiVisibilityChange(int visibility) { +// new Thread() { +// @Override +// public void run() { +// super.run(); +// try { +// Thread.sleep(3000); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// activity.runOnUiThread(new Runnable() { +// @Override +// public void run() { +// initViewFull(activity); +// +// } +// }); +// } +// }.start(); +// } +// }); +// // //设置无标题 +// activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, +// WindowManager.LayoutParams.FLAG_FULLSCREEN); +// activity.getWindow().getDecorView().setSystemUiVisibility( +// View.SYSTEM_UI_FLAG_LAYOUT_STABLE +// | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION +// | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN +// | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar +// | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar +// | View.SYSTEM_UI_FLAG_IMMERSIVE); +// } + + Runnable mHideRunnable = new Runnable() { + @Override + public void run() { + int flags; + int curApiVersion = Build.VERSION.SDK_INT; + // This work only for android 4.4+ + if (curApiVersion >= Build.VERSION_CODES.KITKAT) { + // This work only for android 4.4+ + // hide navigation bar permanently in android activity + // touch the screen, the navigation bar will not show + flags = +// View.SYSTEM_UI_FLAG_HIDE_NAVIGATION +// | View.SYSTEM_UI_FLAG_IMMERSIVE +// | View.SYSTEM_UI_FLAG_FULLSCREEN; + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar + | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar + | View.SYSTEM_UI_FLAG_IMMERSIVE; + getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); + } else { + // touch the screen, the navigation bar will show + flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; + } + // must be executed in main thread + + getWindow().getDecorView().setSystemUiVisibility(flags); + } + }; + +} diff --git a/app/src/main/java/com/tt/base/JMyApplication.java b/app/src/main/java/com/tt/base/JMyApplication.java new file mode 100644 index 0000000..ba30f39 --- /dev/null +++ b/app/src/main/java/com/tt/base/JMyApplication.java @@ -0,0 +1,45 @@ +package com.tt.base; + +import android.app.Application; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; + +import com.tt.ttutils.BuildConfig; + +public class JMyApplication extends Application { + @Override + public void onCreate() { + super.onCreate(); + if (!BuildConfig.DEBUG) { + catchException(); + } + } + private void catchException() { + Thread.setDefaultUncaughtExceptionHandler( + new Thread.UncaughtExceptionHandler() { + @Override + public void uncaughtException(Thread t, Throwable e) { + Log.d("捕获异常子线程:", Thread.currentThread().getName() + + "在:" + e.getStackTrace()[0].getClassName()); + } + } + ); + //下面是新增方法! + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + while (true) { + try { + Looper.loop(); //会先执行这个方法,然后在执行下面的异常捕获方法! + } catch (Exception e) { + Log.d("捕获异常主线程:", Thread.currentThread().getName() + "在:" + e.getStackTrace()[0].getClassName()); + e.printStackTrace(); + } + } + } + }); + } + + +} diff --git a/app/src/main/java/com/tt/base/MyApplication.kt b/app/src/main/java/com/tt/base/MyApplication.kt new file mode 100644 index 0000000..5dad1b7 --- /dev/null +++ b/app/src/main/java/com/tt/base/MyApplication.kt @@ -0,0 +1,47 @@ +package com.tt.base + +import android.app.Application +import android.os.Handler +import android.os.Looper +import android.util.Log +import cn.jpush.android.api.JPushInterface +import com.tt.ttutils.BuildConfig +import com.tt.ttutils.java.ToastUtil + + +class MyApplication : Application() { + private val debug = BuildConfig.DEBUG; + override fun onCreate() { + super.onCreate() + ToastUtil.init(this) + JPushInterface.setDebugMode(debug) // 设置开启日志,发布时请关闭日志 + JPushInterface.init(this) // 初始化 JPush + if (!BuildConfig.DEBUG) { + catchException(); + } + + } + private fun catchException() { + Thread.setDefaultUncaughtExceptionHandler { t, e -> + Log.d( + "捕获异常子线程:", Thread.currentThread().name + + "在:" + e.stackTrace[0].className + ) + } + //下面是新增方法! + Handler(Looper.getMainLooper()).post(Runnable { + while (true) { + try { + Looper.loop() //会先执行这个方法,然后在执行下面的异常捕获方法! + } catch (e: Exception) { + Log.d( + "捕获异常主线程:", + Thread.currentThread().name + "在:" + e.stackTrace[0].className + ) + e.printStackTrace() + } + } + }) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tt/sdk/jpush/jpushdemo/ExampleUtil.java b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/ExampleUtil.java new file mode 100644 index 0000000..75fb5e7 --- /dev/null +++ b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/ExampleUtil.java @@ -0,0 +1,133 @@ +package com.tt.sdk.jpush.jpushdemo; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.Bundle; +import android.os.Looper; +import android.telephony.TelephonyManager; +import android.text.TextUtils; +import android.widget.Toast; + +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"; + public static final String PREFS_DAYS = "JPUSH_EXAMPLE_DAYS"; + public static final String PREFS_START_TIME = "PREFS_START_TIME"; + public static final String PREFS_END_TIME = "PREFS_END_TIME"; + public static final String KEY_APP_KEY = "JPUSH_APPKEY"; + + public static boolean isEmpty(String s) { + if (null == s) + return true; + if (s.length() == 0) + return true; + if (s.trim().length() == 0) + return true; + return false; + } + /** + * 只能以 “+” 或者 数字开头;后面的内容只能包含 “-” 和 数字。 + * */ + private final static String MOBILE_NUMBER_CHARS = "^[+0-9][-0-9]{1,}$"; + public static boolean isValidMobileNumber(String s) { + if(TextUtils.isEmpty(s)) return true; + Pattern p = Pattern.compile(MOBILE_NUMBER_CHARS); + Matcher m = p.matcher(s); + return m.matches(); + } + // 校验Tag Alias 只能是数字,英文字母和中文 + public static boolean isValidTagAndAlias(String s) { + Pattern p = Pattern.compile("^[\u4E00-\u9FA50-9a-zA-Z_!@#$&*+=.|]+$"); + Matcher m = p.matcher(s); + return m.matches(); + } + + // 取得AppKey + public static String getAppKey(Context context) { + Bundle metaData = null; + String appKey = null; + try { + ApplicationInfo ai = context.getPackageManager().getApplicationInfo( + context.getPackageName(), PackageManager.GET_META_DATA); + if (null != ai) + metaData = ai.metaData; + if (null != metaData) { + appKey = metaData.getString(KEY_APP_KEY); + if ((null == appKey) || appKey.length() != 24) { + appKey = null; + } + } + } catch (NameNotFoundException e) { + + } + return appKey; + } + + // 取得版本号 + public static String GetVersion(Context context) { + try { + PackageInfo manager = context.getPackageManager().getPackageInfo( + context.getPackageName(), 0); + return manager.versionName; + } catch (NameNotFoundException e) { + return "Unknown"; + } + } + + public static void showToast(final String toast, final Context context) + { + new Thread(new Runnable() { + + @Override + public void run() { + Looper.prepare(); + Toast.makeText(context, toast, Toast.LENGTH_SHORT).show(); + Looper.loop(); + } + }).start(); + } + + public static boolean isConnected(Context context) { + ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo info = conn.getActiveNetworkInfo(); + return (info != null && info.isConnected()); + } + + public static String getImei(Context context, String imei) { + String ret = null; + try { + TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + ret = telephonyManager.getDeviceId(); + } catch (Exception e) { + Logger.e(ExampleUtil.class.getSimpleName(), e.getMessage()); + } + if (isReadableASCII(ret)){ + return ret; + } else { + return imei; + } + } + + private static boolean isReadableASCII(CharSequence string){ + if (TextUtils.isEmpty(string)) return false; + try { + Pattern p = Pattern.compile("[\\x20-\\x7E]+"); + return p.matcher(string).matches(); + } catch (Throwable e){ + return true; + } + } + + public static String getDeviceId(Context context) { + return JPushInterface.getUdid(context); + } +} diff --git a/app/src/main/java/com/tt/sdk/jpush/jpushdemo/LocalBroadcastManager.java b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/LocalBroadcastManager.java new file mode 100644 index 0000000..c42beb3 --- /dev/null +++ b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/LocalBroadcastManager.java @@ -0,0 +1,263 @@ +package com.tt.sdk.jpush.jpushdemo; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.Uri; +import android.os.Handler; +import android.os.Message; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Set; + +/** + * Created by efan on 2017/4/14. + */ + +public final class LocalBroadcastManager { + private static final String TAG = "JIGUANG-Example"; + private static final boolean DEBUG = false; + private final Context mAppContext; + private final HashMap> mReceivers = new HashMap>(); + private final HashMap> mActions = new HashMap> (); + private final ArrayList mPendingBroadcasts = new ArrayList(); + static final int MSG_EXEC_PENDING_BROADCASTS = 1; + private final Handler mHandler; + private static final Object mLock = new Object(); + private static LocalBroadcastManager mInstance; + + public static LocalBroadcastManager getInstance(Context context) { + Object var1 = mLock; + synchronized (mLock) { + if (mInstance == null) { + mInstance = new LocalBroadcastManager(context.getApplicationContext()); + } + + return mInstance; + } + } + + private LocalBroadcastManager(Context context) { + this.mAppContext = context; + this.mHandler = new Handler(context.getMainLooper()) { + public void handleMessage(Message msg) { + switch (msg.what) { + case 1: + LocalBroadcastManager.this.executePendingBroadcasts(); + break; + default: + super.handleMessage(msg); + } + + } + }; + } + + public void registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { + HashMap var3 = this.mReceivers; + synchronized (this.mReceivers) { + ReceiverRecord entry = new ReceiverRecord(filter, receiver); + ArrayList filters = (ArrayList) this.mReceivers.get(receiver); + if (filters == null) { + filters = new ArrayList(1); + this.mReceivers.put(receiver, filters); + } + + filters.add(filter); + + for (int i = 0; i < filter.countActions(); ++i) { + String action = filter.getAction(i); + ArrayList entries = (ArrayList) this.mActions.get(action); + if (entries == null) { + entries = new ArrayList(1); + this.mActions.put(action, entries); + } + + entries.add(entry); + } + + } + } + + public void unregisterReceiver(BroadcastReceiver receiver) { + HashMap var2 = this.mReceivers; + synchronized (this.mReceivers) { + ArrayList filters = (ArrayList) this.mReceivers.remove(receiver); + if (filters != null) { + for (int i = 0; i < filters.size(); ++i) { + IntentFilter filter = (IntentFilter) filters.get(i); + + for (int j = 0; j < filter.countActions(); ++j) { + String action = filter.getAction(j); + ArrayList receivers = (ArrayList) this.mActions.get(action); + if (receivers != null) { + for (int k = 0; k < receivers.size(); ++k) { + if (((ReceiverRecord) receivers.get(k)).receiver == receiver) { + receivers.remove(k); + --k; + } + } + + if (receivers.size() <= 0) { + this.mActions.remove(action); + } + } + } + } + + } + } + } + + public boolean sendBroadcast(Intent intent) { + HashMap var2 = this.mReceivers; + synchronized (this.mReceivers) { + String action = intent.getAction(); + String type = intent.resolveTypeIfNeeded(this.mAppContext.getContentResolver()); + Uri data = intent.getData(); + String scheme = intent.getScheme(); + Set categories = intent.getCategories(); + boolean debug = (intent.getFlags() & 8) != 0; + if (debug) { + Logger.v("LocalBroadcastManager", "Resolving type " + type + " scheme " + scheme + " of intent " + intent); + } + + ArrayList entries = (ArrayList) this.mActions.get(intent.getAction()); + if (entries != null) { + if (debug) { + Logger.v("LocalBroadcastManager", "Action list: " + entries); + } + + ArrayList receivers = null; + + int i; + for (i = 0; i < entries.size(); ++i) { + ReceiverRecord receiver = (ReceiverRecord) entries.get(i); + if (debug) { + Logger.v("LocalBroadcastManager", "Matching against filter " + receiver.filter); + } + + if (receiver.broadcasting) { + if (debug) { + Logger.v("LocalBroadcastManager", " Filter\'s target already added"); + } + } else { + int match = receiver.filter.match(action, type, scheme, data, categories, "LocalBroadcastManager"); + if (match >= 0) { + if (debug) { + Logger.v("LocalBroadcastManager", " Filter matched! match=0x" + Integer.toHexString(match)); + } + + if (receivers == null) { + receivers = new ArrayList(); + } + + receivers.add(receiver); + receiver.broadcasting = true; + } else if (debug) { + String reason; + switch (match) { + case -4: + reason = "category"; + break; + case -3: + reason = "action"; + break; + case -2: + reason = "data"; + break; + case -1: + reason = "type"; + break; + default: + reason = "unknown reason"; + } + + Logger.v("LocalBroadcastManager", " Filter did not match: " + reason); + } + } + } + + if (receivers != null) { + for (i = 0; i < receivers.size(); ++i) { + ((ReceiverRecord) receivers.get(i)).broadcasting = false; + } + + this.mPendingBroadcasts.add(new BroadcastRecord(intent, receivers)); + if (!this.mHandler.hasMessages(1)) { + this.mHandler.sendEmptyMessage(1); + } + + return true; + } + } + + return false; + } + } + + public void sendBroadcastSync(Intent intent) { + if (this.sendBroadcast(intent)) { + this.executePendingBroadcasts(); + } + + } + + private void executePendingBroadcasts() { + while (true) { + BroadcastRecord[] brs = null; + HashMap i = this.mReceivers; + synchronized (this.mReceivers) { + int br = this.mPendingBroadcasts.size(); + if (br <= 0) { + return; + } + + brs = new BroadcastRecord[br]; + this.mPendingBroadcasts.toArray(brs); + this.mPendingBroadcasts.clear(); + } + + for (int var6 = 0; var6 < brs.length; ++var6) { + BroadcastRecord var7 = brs[var6]; + + for (int j = 0; j < var7.receivers.size(); ++j) { + ((ReceiverRecord) var7.receivers.get(j)).receiver.onReceive(this.mAppContext, var7.intent); + } + } + } + } + + private static class BroadcastRecord { + final Intent intent; + final ArrayList receivers; + + BroadcastRecord(Intent _intent, ArrayList _receivers) { + this.intent = _intent; + this.receivers = _receivers; + } + } + + private static class ReceiverRecord { + final IntentFilter filter; + final BroadcastReceiver receiver; + boolean broadcasting; + + ReceiverRecord(IntentFilter _filter, BroadcastReceiver _receiver) { + this.filter = _filter; + this.receiver = _receiver; + } + + public String toString() { + StringBuilder builder = new StringBuilder(128); + builder.append("Receiver{"); + builder.append(this.receiver); + builder.append(" filter="); + builder.append(this.filter); + builder.append("}"); + return builder.toString(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tt/sdk/jpush/jpushdemo/Logger.java b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/Logger.java new file mode 100644 index 0000000..d188b5a --- /dev/null +++ b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/Logger.java @@ -0,0 +1,42 @@ +package com.tt.sdk.jpush.jpushdemo; + +import android.util.Log; + +import com.tt.ttutils.BuildConfig; + +/** + * Created by efan on 2017/4/13. + */ + +public class Logger { + + //设为false关闭日志 + private static final boolean LOG_ENABLE = BuildConfig.DEBUG; + + public static void i(String tag, String msg){ + if (LOG_ENABLE){ + Log.i(tag, msg); + } + } + public static void v(String tag, String msg){ + if (LOG_ENABLE){ + Log.v(tag, msg); + } + } + public static void d(String tag, String msg){ + if (LOG_ENABLE){ + Log.d(tag, msg); + } + } + public static void w(String tag, String msg){ + if (LOG_ENABLE){ + Log.w(tag, msg); + } + } + public static void e(String tag, String msg){ + if (LOG_ENABLE){ + Log.e(tag, msg); + } + } + +} diff --git a/app/src/main/java/com/tt/sdk/jpush/jpushdemo/MyReceiver.java b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/MyReceiver.java new file mode 100644 index 0000000..3b86573 --- /dev/null +++ b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/MyReceiver.java @@ -0,0 +1,123 @@ +package com.tt.sdk.jpush.jpushdemo; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; + +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 = "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(); + } + + //send msg to MainActivity +// private void processCustomMessage(Context context, Bundle bundle) { +// if (MainActivity.isForeground) { +// String message = bundle.getString(JPushInterface.EXTRA_MESSAGE); +// String extras = bundle.getString(JPushInterface.EXTRA_EXTRA); +// Intent msgIntent = new Intent(MainActivity.MESSAGE_RECEIVED_ACTION); +// msgIntent.putExtra(MainActivity.KEY_MESSAGE, message); +// if (!ExampleUtil.isEmpty(extras)) { +// try { +// JSONObject extraJson = new JSONObject(extras); +// if (extraJson.length() > 0) { +// msgIntent.putExtra(MainActivity.KEY_EXTRAS, extras); +// } +// } catch (JSONException e) { +// +// } +// +// } +// LocalBroadcastManager.getInstance(context).sendBroadcast(msgIntent); +// } +// } +} diff --git a/app/src/main/java/com/tt/sdk/jpush/jpushdemo/PushMessageReceiver.java b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/PushMessageReceiver.java new file mode 100644 index 0000000..1faaefe --- /dev/null +++ b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/PushMessageReceiver.java @@ -0,0 +1,140 @@ +package com.tt.sdk.jpush.jpushdemo; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; + +import org.json.JSONException; +import org.json.JSONObject; + +import cn.jpush.android.api.CmdMessage; +import cn.jpush.android.api.CustomMessage; +import cn.jpush.android.api.JPushInterface; +import cn.jpush.android.api.JPushMessage; +import cn.jpush.android.api.NotificationMessage; +import cn.jpush.android.service.JPushMessageReceiver; + +public class PushMessageReceiver extends JPushMessageReceiver{ + private static final String TAG = "PushMessageReceiver"; + @Override + public void onMessage(Context context, CustomMessage customMessage) { + Log.e(TAG,"[onMessage] "+customMessage); +// processCustomMessage(context,customMessage); + } + + @Override + public void onNotifyMessageOpened(Context context, NotificationMessage message) { + Log.e(TAG,"[onNotifyMessageOpened] "+message); + try{ + //打开自定义的Activity + Intent i = new Intent(context, TestActivity.class); + Bundle bundle = new Bundle(); + bundle.putString(JPushInterface.EXTRA_NOTIFICATION_TITLE,message.notificationTitle); + bundle.putString(JPushInterface.EXTRA_ALERT,message.notificationContent); + 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); + }catch (Throwable throwable){ + + } + } + + @Override + public void onMultiActionClicked(Context context, Intent intent) { + Log.e(TAG, "[onMultiActionClicked] 用户点击了通知栏按钮"); + String nActionExtra = intent.getExtras().getString(JPushInterface.EXTRA_NOTIFICATION_ACTION_EXTRA); + + //开发者根据不同 Action 携带的 extra 字段来分配不同的动作。 + if(nActionExtra==null){ + Log.d(TAG,"ACTION_NOTIFICATION_CLICK_ACTION nActionExtra is null"); + return; + } + if (nActionExtra.equals("my_extra1")) { + Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮一"); + } else if (nActionExtra.equals("my_extra2")) { + Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮二"); + } else if (nActionExtra.equals("my_extra3")) { + Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮三"); + } else { + Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮未定义"); + } + } + + @Override + public void onNotifyMessageArrived(Context context, NotificationMessage message) { + Log.e(TAG,"[onNotifyMessageArrived] "+message); + } + + @Override + public void onNotifyMessageDismiss(Context context, NotificationMessage message) { + Log.e(TAG,"[onNotifyMessageDismiss] "+message); + } + + @Override + public void onRegister(Context context, String registrationId) { + Log.e(TAG,"[onRegister] "+registrationId); + } + + @Override + public void onConnected(Context context, boolean isConnected) { + Log.e(TAG,"[onConnected] "+isConnected); + } + + @Override + public void onCommandResult(Context context, CmdMessage cmdMessage) { + Log.e(TAG,"[onCommandResult] "+cmdMessage); + } + + @Override + public void onTagOperatorResult(Context context,JPushMessage jPushMessage) { + TagAliasOperatorHelper.getInstance().onTagOperatorResult(context,jPushMessage); + super.onTagOperatorResult(context, 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); + } + + @Override + public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) { + TagAliasOperatorHelper.getInstance().onMobileNumberOperatorResult(context,jPushMessage); + super.onMobileNumberOperatorResult(context, jPushMessage); + } + + //send msg to MainActivity +// private void processCustomMessage(Context context, CustomMessage customMessage) { +// if (MainActivity.isForeground) { +// String message = customMessage.message; +// String extras = customMessage.extra; +// Intent msgIntent = new Intent(MainActivity.MESSAGE_RECEIVED_ACTION); +// msgIntent.putExtra(MainActivity.KEY_MESSAGE, message); +// if (!ExampleUtil.isEmpty(extras)) { +// try { +// JSONObject extraJson = new JSONObject(extras); +// if (extraJson.length() > 0) { +// msgIntent.putExtra(MainActivity.KEY_EXTRAS, extras); +// } +// } catch (JSONException e) { +// +// } +// +// } +// LocalBroadcastManager.getInstance(context).sendBroadcast(msgIntent); +// } +// } + + @Override + public void onNotificationSettingsCheck(Context context, boolean isOn, int source) { + super.onNotificationSettingsCheck(context, isOn, source); + Log.e(TAG,"[onNotificationSettingsCheck] isOn:"+isOn+",source:"+source); + } + +} diff --git a/app/src/main/java/com/tt/sdk/jpush/jpushdemo/PushService.java b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/PushService.java new file mode 100644 index 0000000..f6116b2 --- /dev/null +++ b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/PushService.java @@ -0,0 +1,8 @@ +package com.tt.sdk.jpush.jpushdemo; + + +import cn.jpush.android.service.JCommonService; + +public class PushService extends JCommonService { + +} diff --git a/app/src/main/java/com/tt/sdk/jpush/jpushdemo/TagAliasOperatorHelper.java b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/TagAliasOperatorHelper.java new file mode 100644 index 0000000..8485a56 --- /dev/null +++ b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/TagAliasOperatorHelper.java @@ -0,0 +1,338 @@ +package com.tt.sdk.jpush.jpushdemo; + +import android.content.Context; +import android.os.Handler; +import android.os.Message; +import android.util.SparseArray; + +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); + 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); + 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{ + int action; + Set tags; + String alias; + boolean isAliasAction; + + @Override + public String toString() { + return "TagAliasBean{" + + "action=" + action + + ", tags=" + tags + + ", alias='" + alias + '\'' + + ", isAliasAction=" + isAliasAction + + '}'; + } + } + + +} diff --git a/app/src/main/java/com/tt/sdk/jpush/jpushdemo/TestActivity.java b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/TestActivity.java new file mode 100644 index 0000000..75d2590 --- /dev/null +++ b/app/src/main/java/com/tt/sdk/jpush/jpushdemo/TestActivity.java @@ -0,0 +1,32 @@ +package com.tt.sdk.jpush.jpushdemo; + +import android.app.Activity; +import android.content.Intent; +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 + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + TextView tv = new TextView(this); + tv.setText("用户自定义打开的Activity"); + Intent intent = getIntent(); + if (null != intent) { + Bundle bundle = getIntent().getExtras(); + String title = null; + String content = null; + if(bundle!=null){ + title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE); + content = bundle.getString(JPushInterface.EXTRA_ALERT); + } + tv.setText("Title : " + title + " " + "Content : " + content); + } + addContentView(tv, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); + } + +} diff --git a/app/src/main/java/com/tt/ttutils/java/DevicesUtils.java b/app/src/main/java/com/tt/ttutils/java/DevicesUtils.java new file mode 100644 index 0000000..fbf0120 --- /dev/null +++ b/app/src/main/java/com/tt/ttutils/java/DevicesUtils.java @@ -0,0 +1,45 @@ +package com.tt.ttutils.java; + +import android.annotation.SuppressLint; +import android.os.Build; +import android.util.Log; + +import java.lang.reflect.Method; + +public class DevicesUtils { + /** + * 获取设备序列号 + */ + public static String getSerial() { + String serial = "unknow"; + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {//9.0+ + serial = Build.getSerial(); + } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {//8.0+ + serial = Build.SERIAL; + } else {//8.0- + Class c = Class.forName("android.os.SystemProperties"); + Method get = c.getMethod("get", String.class); + serial = (String) get.invoke(c, "ro.serialno"); + } + } catch (Exception e) { + e.printStackTrace(); + Log.e("e", "读取设备序列号异常:" + e.toString()); + } + return serial; + } + + public static String getDeviceSN() { + String serial = null; + try { + Class c = Class.forName("android.os.SystemProperties"); + Method get = c.getMethod("get", String.class); + serial = (String) get.invoke(c, "persist.sys.hrSerial"); + } catch (Exception e) { + e.printStackTrace(); + } + return serial; + } + + +} diff --git a/app/src/main/java/com/tt/ttutils/java/ToastUtil.java b/app/src/main/java/com/tt/ttutils/java/ToastUtil.java index 77ad1be..4f90b61 100644 --- a/app/src/main/java/com/tt/ttutils/java/ToastUtil.java +++ b/app/src/main/java/com/tt/ttutils/java/ToastUtil.java @@ -25,7 +25,6 @@ public class ToastUtil { mContext = context; toast = Toast.makeText(mContext, "", Toast.LENGTH_SHORT); debugToast = Toast.makeText(mContext, "", Toast.LENGTH_SHORT); - } private static long time1 = 0L; diff --git a/app/src/main/java/com/tt/ttutils/kt/ToastUtil.kt b/app/src/main/java/com/tt/ttutils/kt/ToastUtil.kt new file mode 100644 index 0000000..b654ca0 --- /dev/null +++ b/app/src/main/java/com/tt/ttutils/kt/ToastUtil.kt @@ -0,0 +1,7 @@ +package com.tt.ttutils.kt + +import java.util.logging.Handler + +class ToastUtil { + +} \ No newline at end of file diff --git a/app/src/main/jni/getSn.cpp b/app/src/main/jni/getSn.cpp new file mode 100644 index 0000000..009de25 --- /dev/null +++ b/app/src/main/jni/getSn.cpp @@ -0,0 +1,18 @@ +// +// Created by Administrator on 2020/8/21. +// +#include + + + //读取序号 + __system_property_get("ro.serialno",m_szDevID); + LOGE("%s", m_szDevID); + + //读取机型 + __system_property_get("ro.product.model",m_szDevModel); + LOGE("%s", m_szDevName); + + //读取sdk版本 + __system_property_get("ro.build.version.sdk", m_szSdkVer); + LOGE("%s",m_szSdkVer); + diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 4500292..cef4901 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -4,9 +4,10 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="com.tt.activity.MainActivity"> + tools:context="com.tt.activity.JMainActivity"> + tools:context="com.tt.activity.JMainActivity"> 77iRoh@w5oEYT)M;z2I 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