From 233baef5b2774d329a064a83922135a775a002c4 Mon Sep 17 00:00:00 2001 From: hirotaka motegi Date: Fri, 12 Jan 2018 19:09:34 +0900 Subject: [PATCH] Support Background Service Limitations. In order to receive SMS-Push, Target SDK will use "Context.startForegroundService ()" API for more than 26 service applications. Test: manual Bug: 63048126 Change-Id: I701eab6002d01cfc6e559db7aad5455781dc162c Signed-off-by: hirotaka motegi --- .../com/android/smspush/WapPushManager.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) mode change 100644 => 100755 packages/WAPPushManager/src/com/android/smspush/WapPushManager.java diff --git a/packages/WAPPushManager/src/com/android/smspush/WapPushManager.java b/packages/WAPPushManager/src/com/android/smspush/WapPushManager.java old mode 100644 new mode 100755 index e9703670008d8..dc2707b6ff8b9 --- a/packages/WAPPushManager/src/com/android/smspush/WapPushManager.java +++ b/packages/WAPPushManager/src/com/android/smspush/WapPushManager.java @@ -22,11 +22,15 @@ import android.content.ComponentName; import android.content.ContentValues; import android.content.Context; import android.content.Intent; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; import android.database.Cursor; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase; +import android.os.Build; import android.os.IBinder; +import android.os.PowerManager; import android.os.RemoteException; import android.util.Log; @@ -216,7 +220,27 @@ public class WapPushManager extends Service { intent.setClassName(mContext, lastapp.className); intent.setComponent(new ComponentName(lastapp.packageName, lastapp.className)); - if (mContext.startService(intent) == null) { + PackageManager pm = mContext.getPackageManager(); + PowerManager powerManager = + (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); + try { + ApplicationInfo appInfo = pm.getApplicationInfo(lastapp.packageName, 0); + if (appInfo.targetSdkVersion < Build.VERSION_CODES.O || + powerManager.isIgnoringBatteryOptimizations(lastapp.packageName)) { + if (mContext.startService(intent) == null) { + Log.w(LOG_TAG, "invalid name " + + lastapp.packageName + "/" + lastapp.className); + return WapPushManagerParams.INVALID_RECEIVER_NAME; + } + } else { + if (mContext.startForegroundService(intent) == null) { + Log.w(LOG_TAG, "invalid name " + + lastapp.packageName + "/" + lastapp.className); + return WapPushManagerParams.INVALID_RECEIVER_NAME; + } + } + + } catch (NameNotFoundException e) { Log.w(LOG_TAG, "invalid name " + lastapp.packageName + "/" + lastapp.className); return WapPushManagerParams.INVALID_RECEIVER_NAME;