From 5d101b6f6e48b9027642d3d95ec1a84967fe0111 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 3 Sep 2015 11:47:14 +1200 Subject: [PATCH] Hack to hide a notification --- app/src/main/AndroidManifest.xml | 2 + .../java/org/traccar/client/MainActivity.java | 2 - .../org/traccar/client/TrackingService.java | 72 +++++++++++-------- app/src/main/res/xml-v14/preferences.xml | 6 -- app/src/main/res/xml/preferences.xml | 6 -- 5 files changed, 44 insertions(+), 44 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6c54f07..5365632 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -30,6 +30,8 @@ + + diff --git a/app/src/main/java/org/traccar/client/MainActivity.java b/app/src/main/java/org/traccar/client/MainActivity.java index f247430..bbde886 100644 --- a/app/src/main/java/org/traccar/client/MainActivity.java +++ b/app/src/main/java/org/traccar/client/MainActivity.java @@ -50,7 +50,6 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen public static final String KEY_INTERVAL = "interval"; public static final String KEY_PROVIDER = "provider"; public static final String KEY_STATUS = "status"; - public static final String KEY_FOREGROUND = "foreground"; private static final int PERMISSIONS_REQUEST_DEVICE = 1; private static final int PERMISSIONS_REQUEST_LOCATION = 2; @@ -105,7 +104,6 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen preferenceScreen.findPreference(KEY_PORT).setEnabled(enabled); preferenceScreen.findPreference(KEY_INTERVAL).setEnabled(enabled); preferenceScreen.findPreference(KEY_PROVIDER).setEnabled(enabled); - preferenceScreen.findPreference(KEY_FOREGROUND).setEnabled(enabled); } @Override diff --git a/app/src/main/java/org/traccar/client/TrackingService.java b/app/src/main/java/org/traccar/client/TrackingService.java index f29c1b7..1a604fd 100644 --- a/app/src/main/java/org/traccar/client/TrackingService.java +++ b/app/src/main/java/org/traccar/client/TrackingService.java @@ -36,9 +36,45 @@ public class TrackingService extends Service { private TrackingController trackingController; - private boolean foreground; - @SuppressWarnings("deprecation") + private static Notification createNotification(Context context) { + Intent notificationIntent = new Intent(context, MainActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); + + Notification notification = new Notification(android.R.drawable.stat_notify_sync_noanim, null, 0); + try { + Method method = notification.getClass().getMethod("setLatestEventInfo", Context.class, CharSequence.class, CharSequence.class, PendingIntent.class); + try { + method.invoke(notification, context, context.getString(R.string.app_name), context.getString(R.string.settings_status_on_summary), pendingIntent); + } catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException e) { + Log.w(TAG, e); + } + } catch (SecurityException | NoSuchMethodException e) { + Log.w(TAG, e); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { + notification.priority = Notification.PRIORITY_MIN; + } + + return notification; + } + + public static class HideNotificationService extends Service { + @Override + public IBinder onBind(Intent intent) { + return null; + } + + + @TargetApi(Build.VERSION_CODES.ECLAIR) + @Override + public void onCreate() { + startForeground(NOTIFICATION_ID, createNotification(this)); + stopForeground(true); + } + } + @Override public void onCreate() { Log.i(TAG, "service create"); @@ -47,33 +83,9 @@ public class TrackingService extends Service { trackingController = new TrackingController(this); trackingController.start(); - foreground = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(MainActivity.KEY_FOREGROUND, false); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR && foreground) { - Intent notificationIntent = new Intent(this, MainActivity.class); - PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); - - Notification notification = new Notification(android.R.drawable.stat_notify_sync_noanim, null, 0); - try { - Method method = notification.getClass().getMethod("setLatestEventInfo", Context.class, CharSequence.class, CharSequence.class, PendingIntent.class); - try { - method.invoke(notification, this, getString(R.string.app_name), getString(R.string.settings_status_on_summary), pendingIntent); - } catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException e) { - Log.w(TAG, e); - } - } catch (SecurityException | NoSuchMethodException e) { - Log.w(TAG, e); - } - - int notificationId = NOTIFICATION_ID; - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - notification.priority = Notification.PRIORITY_MIN; - } else { - notificationId = 0; - } - - startForeground(notificationId, notification); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { + startForeground(NOTIFICATION_ID, createNotification(this)); + startService(new Intent(this, HideNotificationService.class)); } } @@ -102,7 +114,7 @@ public class TrackingService extends Service { Log.i(TAG, "service destroy"); StatusActivity.addMessage(getString(R.string.status_service_destroy)); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR && foreground) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { stopForeground(true); } diff --git a/app/src/main/res/xml-v14/preferences.xml b/app/src/main/res/xml-v14/preferences.xml index 2bcb452..29597a9 100644 --- a/app/src/main/res/xml-v14/preferences.xml +++ b/app/src/main/res/xml-v14/preferences.xml @@ -42,10 +42,4 @@ android:summary="@string/settings_provider_summary" android:title="@string/settings_provider_title" /> - - \ No newline at end of file diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 5618121..83168eb 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -40,10 +40,4 @@ android:summary="@string/settings_provider_summary" android:title="@string/settings_provider_title" /> - -