19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.app; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 194b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport com.android.internal.app.IUsageStats; 204b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport com.android.internal.os.PkgUsageStats; 21b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackbornimport com.android.internal.util.MemInfoReader; 224b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentName; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 26f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapuimport android.content.pm.ApplicationInfo; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ConfigurationInfo; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.IPackageDataObserver; 295320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackbornimport android.content.pm.PackageManager; 304120375d46091df8527bb701882e056fbb0e6b06Dianne Hackbornimport android.content.pm.UserInfo; 315ef44b7566566db08b62245cbb9002b548071603Kenny Rootimport android.content.res.Resources; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap; 33b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackbornimport android.graphics.Point; 3498365d7663cbd82979a5700faf0050220b01084dJeff Brownimport android.hardware.display.DisplayManager; 35bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brownimport android.hardware.display.DisplayManagerGlobal; 36742a67127366c376fdf188ff99ba30b27d3bf90cAmith Yamasaniimport android.os.Binder; 378078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackbornimport android.os.Bundle; 384f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackbornimport android.os.Debug; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 425320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackbornimport android.os.Process; 434b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport android.os.RemoteException; 448d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport android.os.ServiceManager; 452c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackbornimport android.os.SystemProperties; 46f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackbornimport android.os.UserHandle; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 485ef44b7566566db08b62245cbb9002b548071603Kenny Rootimport android.util.DisplayMetrics; 498d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport android.util.Log; 50b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackbornimport android.util.Slog; 51b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackbornimport android.view.Display; 525ef44b7566566db08b62245cbb9002b548071603Kenny Root 538d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport java.util.HashMap; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 558d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport java.util.Map; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interact with the overall activities running in the system. 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ActivityManager { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static String TAG = "ActivityManager"; 6243a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato private static boolean localLOGV = false; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Context mContext; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Handler mHandler; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 67a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 68a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManager.startActivity: an error where the 69a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * start had to be canceled. 70a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 71a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 72a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_CANCELED = -6; 73a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 74a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 75a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManager.startActivity: an error where the 76a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * thing being started is not an activity. 77a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 78a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 79a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_NOT_ACTIVITY = -5; 80a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 81a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 82a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManager.startActivity: an error where the 83a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * caller does not have permission to start the activity. 84a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 85a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 86a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_PERMISSION_DENIED = -4; 87a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 88a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 89a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManager.startActivity: an error where the 90a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * caller has requested both to forward a result and to receive 91a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * a result. 92a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 93a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 94a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_FORWARD_AND_REQUEST_CONFLICT = -3; 95a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 96a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 97a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManager.startActivity: an error where the 98a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * requested class is not found. 99a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 100a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 101a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_CLASS_NOT_FOUND = -2; 102a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 103a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 104a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManager.startActivity: an error where the 105a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * given Intent could not be resolved to an activity. 106a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 107a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 108a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_INTENT_NOT_RESOLVED = -1; 109a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 110a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 111a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.startActivity: the activity was started 112a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * successfully as normal. 113a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 114a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 115a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_SUCCESS = 0; 116a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 117a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 118a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.startActivity: the caller asked that the Intent not 119a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * be executed if it is the recipient, and that is indeed the case. 120a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 121a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 122a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_RETURN_INTENT_TO_CALLER = 1; 123a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 124a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 125a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.startActivity: activity wasn't really started, but 126a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * a task was simply brought to the foreground. 127a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 128a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 129a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_TASK_TO_FRONT = 2; 130a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 131a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 132a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.startActivity: activity wasn't really started, but 133a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * the given Intent was given to the existing top activity. 134a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 135a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 136a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_DELIVERED_TO_TOP = 3; 137a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 138a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 139a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.startActivity: request was canceled because 140a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * app switches are temporarily canceled to ensure the user's last request 141a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * (such as pressing home) is performed. 142a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 143a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 144a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_SWITCHES_CANCELED = 4; 145a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 146a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 147a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Flag for IActivityManaqer.startActivity: do special start mode where 148a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * a new activity is launched only if it is needed. 149a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 150a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 151a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_FLAG_ONLY_IF_NEEDED = 1<<0; 152a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 153a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 154a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Flag for IActivityManaqer.startActivity: launch the app for 155a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * debugging. 156a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 157a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 158a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_FLAG_DEBUG = 1<<1; 159a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 160a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 161a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Flag for IActivityManaqer.startActivity: launch the app for 162a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * OpenGL tracing. 163a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 164a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 165a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_FLAG_OPENGL_TRACES = 1<<2; 166a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 167a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 168a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Flag for IActivityManaqer.startActivity: if the app is being 169a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * launched for profiling, automatically stop the profiler once done. 170a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 171a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 172a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_FLAG_AUTO_STOP_PROFILER = 1<<3; 173a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 174a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 175a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.broadcastIntent: success! 176a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 177a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 178a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int BROADCAST_SUCCESS = 0; 179a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 180a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 181a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.broadcastIntent: attempt to broadcast 182a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * a sticky intent without appropriate permission. 183a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 184a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 185a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int BROADCAST_STICKY_CANT_HAVE_PERMISSION = -1; 186a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 187a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 188a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Type for IActivityManaqer.getIntentSender: this PendingIntent is 189a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * for a sendBroadcast operation. 190a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 191a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 192a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int INTENT_SENDER_BROADCAST = 1; 193a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 194a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 195a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Type for IActivityManaqer.getIntentSender: this PendingIntent is 196a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * for a startActivity operation. 197a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 198a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 199a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int INTENT_SENDER_ACTIVITY = 2; 200a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 201a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 202a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Type for IActivityManaqer.getIntentSender: this PendingIntent is 203a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * for an activity result operation. 204a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 205a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 206a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int INTENT_SENDER_ACTIVITY_RESULT = 3; 207a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 208a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 209a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Type for IActivityManaqer.getIntentSender: this PendingIntent is 210a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * for a startService operation. 211a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 212a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 213a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int INTENT_SENDER_SERVICE = 4; 214a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 21580a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn /** @hide User operation call: success! */ 21680a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn public static final int USER_OP_SUCCESS = 0; 21780a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn 21880a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn /** @hide User operation call: given user id is not known. */ 21980a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn public static final int USER_OP_UNKNOWN_USER = -1; 22080a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn 22180a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn /** @hide User operation call: given user id is the current user, can't be stopped. */ 22280a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn public static final int USER_OP_IS_CURRENT = -2; 22380a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ ActivityManager(Context context, Handler handler) { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext = context; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler = handler; 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2300f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * Screen compatibility mode: the application most always run in 2310f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * compatibility mode. 2320f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * @hide 2330f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn */ 2340f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public static final int COMPAT_MODE_ALWAYS = -1; 2350f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 2360f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** 2370f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * Screen compatibility mode: the application can never run in 2380f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * compatibility mode. 2390f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * @hide 2400f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn */ 2410f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public static final int COMPAT_MODE_NEVER = -2; 2420f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 2430f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** 2440f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * Screen compatibility mode: unknown. 2450f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * @hide 2460f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn */ 2470f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public static final int COMPAT_MODE_UNKNOWN = -3; 2480f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 2490f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** 2500f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * Screen compatibility mode: the application currently has compatibility 2510f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * mode disabled. 2520f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * @hide 2530f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn */ 2540f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public static final int COMPAT_MODE_DISABLED = 0; 2550f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 2560f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** 2570f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * Screen compatibility mode: the application currently has compatibility 2580f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * mode enabled. 2590f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * @hide 2600f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn */ 2610f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public static final int COMPAT_MODE_ENABLED = 1; 2620f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 2630f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** 2640f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * Screen compatibility mode: request to toggle the application's 2650f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * compatibility mode. 2660f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * @hide 2670f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn */ 2680f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public static final int COMPAT_MODE_TOGGLE = 2; 2690f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 2700f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** @hide */ 2710f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public int getFrontActivityScreenCompatMode() { 2720f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn try { 2730f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn return ActivityManagerNative.getDefault().getFrontActivityScreenCompatMode(); 2740f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } catch (RemoteException e) { 2750f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn // System dead, we will be dead too soon! 2760f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn return 0; 2770f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 2780f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 2790f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 280df9799f0fc3ef04d9b004ebbda44883f85321b24Dianne Hackborn /** @hide */ 2810f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public void setFrontActivityScreenCompatMode(int mode) { 2820f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn try { 2830f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn ActivityManagerNative.getDefault().setFrontActivityScreenCompatMode(mode); 2840f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } catch (RemoteException e) { 2850f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn // System dead, we will be dead too soon! 2860f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 2870f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 2880f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 289df9799f0fc3ef04d9b004ebbda44883f85321b24Dianne Hackborn /** @hide */ 2900f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public int getPackageScreenCompatMode(String packageName) { 2910f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn try { 2920f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn return ActivityManagerNative.getDefault().getPackageScreenCompatMode(packageName); 2930f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } catch (RemoteException e) { 2940f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn // System dead, we will be dead too soon! 2950f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn return 0; 2960f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 2970f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 2980f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 299df9799f0fc3ef04d9b004ebbda44883f85321b24Dianne Hackborn /** @hide */ 3000f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public void setPackageScreenCompatMode(String packageName, int mode) { 3010f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn try { 3020f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn ActivityManagerNative.getDefault().setPackageScreenCompatMode(packageName, mode); 3030f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } catch (RemoteException e) { 3040f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn // System dead, we will be dead too soon! 3050f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3060f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3070f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 30836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn /** @hide */ 30936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn public boolean getPackageAskScreenCompat(String packageName) { 31036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn try { 31136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn return ActivityManagerNative.getDefault().getPackageAskScreenCompat(packageName); 31236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn } catch (RemoteException e) { 31336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn // System dead, we will be dead too soon! 31436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn return false; 31536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn } 31636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn } 31736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn 31836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn /** @hide */ 31936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn public void setPackageAskScreenCompat(String packageName, boolean ask) { 32036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn try { 32136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn ActivityManagerNative.getDefault().setPackageAskScreenCompat(packageName, ask); 32236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn } catch (RemoteException e) { 3230f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn // System dead, we will be dead too soon! 3240f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3250f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3260f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 3270f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** 3282c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn * Return the approximate per-application memory class of the current 3292c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn * device. This gives you an idea of how hard a memory limit you should 3302c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn * impose on your application to let the overall system work best. The 3312c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn * returned value is in megabytes; the baseline Android memory class is 3322c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn * 16 (which happens to be the Java heap limit of those devices); some 3332c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn * device with more memory may return 24 or even higher numbers. 3342c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn */ 3352c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn public int getMemoryClass() { 3362c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn return staticGetMemoryClass(); 3372c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn } 3382c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn 3392c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn /** @hide */ 3402c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn static public int staticGetMemoryClass() { 3412c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn // Really brain dead right now -- just take this from the configured 3422c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn // vm heap size, and assume it is in megabytes and thus ends with "m". 3437ad33c8f9e7ecd356979dbad23c6c171b4f3339dDianne Hackborn String vmHeapSize = SystemProperties.get("dalvik.vm.heapgrowthlimit", ""); 344de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn if (vmHeapSize != null && !"".equals(vmHeapSize)) { 345de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length()-1)); 346de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn } 347de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn return staticGetLargeMemoryClass(); 3484e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn } 3494e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn 3504e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn /** 3514e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * Return the approximate per-application memory class of the current 3524e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * device when an application is running with a large heap. This is the 3534e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * space available for memory-intensive applications; most applications 3544e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * should not need this amount of memory, and should instead stay with the 3554e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * {@link #getMemoryClass()} limit. The returned value is in megabytes. 3564e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * This may be the same size as {@link #getMemoryClass()} on memory 3574e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * constrained devices, or it may be significantly larger on devices with 3584e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * a large amount of available RAM. 3593b81bc18bb661c02ad8074c39dab16644c1e65d0Dianne Hackborn * 3603b81bc18bb661c02ad8074c39dab16644c1e65d0Dianne Hackborn * <p>The is the size of the application's Dalvik heap if it has 3613b81bc18bb661c02ad8074c39dab16644c1e65d0Dianne Hackborn * specified <code>android:largeHeap="true"</code> in its manifest. 3624e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn */ 3634e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn public int getLargeMemoryClass() { 3644e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn return staticGetLargeMemoryClass(); 3654e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn } 3664e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn 3674e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn /** @hide */ 3684e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn static public int staticGetLargeMemoryClass() { 3694e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn // Really brain dead right now -- just take this from the configured 3704e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn // vm heap size, and assume it is in megabytes and thus ends with "m". 3712c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn String vmHeapSize = SystemProperties.get("dalvik.vm.heapsize", "16m"); 3722c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length()-1)); 3732c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn } 3742c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn 3752c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn /** 376b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn * Used by persistent processes to determine if they are running on a 377b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn * higher-end device so should be okay using hardware drawing acceleration 378b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn * (which tends to consume a lot more RAM). 379b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn * @hide 380b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn */ 38198365d7663cbd82979a5700faf0050220b01084dJeff Brown static public boolean isHighEndGfx() { 382b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn MemInfoReader reader = new MemInfoReader(); 383b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn reader.readMemInfo(); 384b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn if (reader.getTotalSize() >= (512*1024*1024)) { 385b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn // If the device has at least 512MB RAM available to the kernel, 386b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn // we can afford the overhead of graphics acceleration. 387b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn return true; 388b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn } 38998365d7663cbd82979a5700faf0050220b01084dJeff Brown 390bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown Display display = DisplayManagerGlobal.getInstance().getRealDisplay( 391bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown Display.DEFAULT_DISPLAY); 392b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn Point p = new Point(); 393b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn display.getRealSize(p); 394b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn int pixels = p.x * p.y; 395b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn if (pixels >= (1024*600)) { 396b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn // If this is a sufficiently large screen, then there are enough 397b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn // pixels on it that we'd really like to use hw drawing. 398b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn return true; 399b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn } 400b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn return false; 401b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn } 402b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn 403b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn /** 40449d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn * Use to decide whether the running device can be considered a "large 40549d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn * RAM" device. Exactly what memory limit large RAM is will vary, but 40649d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn * it essentially means there is plenty of RAM to have lots of background 40749d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn * processes running under decent loads. 40849d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn * @hide 40949d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn */ 41049d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn static public boolean isLargeRAM() { 41149d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn MemInfoReader reader = new MemInfoReader(); 41249d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn reader.readMemInfo(); 41349d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn if (reader.getTotalSize() >= (640*1024*1024)) { 41449d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn // Currently 640MB RAM available to the kernel is the point at 41549d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn // which we have plenty of RAM to spare. 41649d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn return true; 41749d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn } 41849d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn return false; 41949d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn } 42049d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn 42149d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn /** 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about tasks that the user has most recently 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * started or visited. 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class RecentTaskInfo implements Parcelable { 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If this task is currently running, this is the identifier for it. 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If it is not running, this will be -1. 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int id; 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 433d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn * The true identifier of this task, valid even if it is not running. 434d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn */ 435d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn public int persistentId; 436d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn 437d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn /** 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The original Intent used to launch the task. You can use this 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Intent to re-launch the task (if it is no longer running) or bring 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the current task to the front. 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Intent baseIntent; 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If this task was started from an alias, this is the actual 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity component that was initially started; the component of 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the baseIntent in this case is the name of the actual activity 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation that the alias referred to. Otherwise, this is null. 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName origActivity; 451d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn 452d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn /** 453d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * Description of the task's last state. 454d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn */ 455d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn public CharSequence description; 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RecentTaskInfo() { 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(id); 466d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn dest.writeInt(persistentId); 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (baseIntent != null) { 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(1); 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project baseIntent.writeToParcel(dest, 0); 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(0); 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentName.writeToParcel(origActivity, dest); 474d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn TextUtils.writeToParcel(description, dest, 475d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel source) { 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project id = source.readInt(); 480d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn persistentId = source.readInt(); 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (source.readInt() != 0) { 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project baseIntent = Intent.CREATOR.createFromParcel(source); 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project baseIntent = null; 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project origActivity = ComponentName.readFromParcel(source); 487d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<RecentTaskInfo> CREATOR 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Creator<RecentTaskInfo>() { 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RecentTaskInfo createFromParcel(Parcel source) { 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RecentTaskInfo(source); 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RecentTaskInfo[] newArray(int size) { 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RecentTaskInfo[size]; 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RecentTaskInfo(Parcel source) { 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readFromParcel(source); 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag for use with {@link #getRecentTasks}: return all tasks, even those 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that have set their 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.Intent#FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS} flag. 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RECENT_WITH_EXCLUDED = 0x0001; 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 513d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * Provides a list that does not contain any 51453d9264de4f99a069dd7306f881d28ddd5956b35Dianne Hackborn * recent tasks that currently are not available to the user. 51553d9264de4f99a069dd7306f881d28ddd5956b35Dianne Hackborn */ 51653d9264de4f99a069dd7306f881d28ddd5956b35Dianne Hackborn public static final int RECENT_IGNORE_UNAVAILABLE = 0x0002; 517d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn 518d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn /** 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a list of the tasks that the user has recently launched, with 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the most recent being first and older ones after in order. 521c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 522c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <p><b>Note: this method is only intended for debugging and presenting 523c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * task management user interfaces</b>. This should never be used for 524c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * core logic in an application, such as deciding between different 525c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * behaviors based on the information found here. Such uses are 526c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <em>not</em> supported, and will likely break in the future. For 527c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * example, if multiple applications can be actively running at the 528c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * same time, assumptions made about the meaning of the data here for 529c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * purposes of control flow will be incorrect.</p> 530c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param maxNum The maximum number of entries to return in the list. The 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * actual number returned may be smaller, depending on how many tasks the 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user has started and the maximum number the system can remember. 534d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * @param flags Information about what to return. May be any combination 535805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn * of {@link #RECENT_WITH_EXCLUDED} and {@link #RECENT_IGNORE_UNAVAILABLE}. 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a list of RecentTaskInfo records describing each of 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the recent tasks. 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws SecurityException Throws SecurityException if the caller does 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not hold the {@link android.Manifest.permission#GET_TASKS} permission. 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<RecentTaskInfo> getRecentTasks(int maxNum, int flags) 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws SecurityException { 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getRecentTasks(maxNum, 547f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn flags, UserHandle.myUserId()); 5488264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani } catch (RemoteException e) { 5498264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani // System dead, we will be dead too soon! 5508264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani return null; 5518264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani } 5528264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani } 5538264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani 5548264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani /** 5558264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * Same as {@link #getRecentTasks(int, int)} but returns the recent tasks for a 5568264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * specific user. It requires holding 5578264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission. 5588264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * @param maxNum The maximum number of entries to return in the list. The 5598264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * actual number returned may be smaller, depending on how many tasks the 5608264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * user has started and the maximum number the system can remember. 5618264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * @param flags Information about what to return. May be any combination 5628264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * of {@link #RECENT_WITH_EXCLUDED} and {@link #RECENT_IGNORE_UNAVAILABLE}. 5638264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * 5648264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * @return Returns a list of RecentTaskInfo records describing each of 5658264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * the recent tasks. 5668264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * 5678264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * @throws SecurityException Throws SecurityException if the caller does 5688264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * not hold the {@link android.Manifest.permission#GET_TASKS} or the 5698264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permissions. 5708264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * @hide 5718264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani */ 5728264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani public List<RecentTaskInfo> getRecentTasksForUser(int maxNum, int flags, int userId) 5738264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani throws SecurityException { 5748264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani try { 5758264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani return ActivityManagerNative.getDefault().getRecentTasks(maxNum, 5768264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani flags, userId); 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // System dead, we will be dead too soon! 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about a particular task that is currently 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "running" in the system. Note that a running task does not mean the 5860c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * given task actually has a process it is actively running in; it simply 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * means that the user has gone to it and never closed it, but currently 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the system may have killed its process and is only holding on to its 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * last state in order to restart it when the user returns. 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class RunningTaskInfo implements Parcelable { 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A unique identifier for this task. 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int id; 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The component launched as the first activity in the task. This can 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be considered the "application" of this task. 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName baseActivity; 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The activity component at the top of the history stack of the task. 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is what the user is currently doing. 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName topActivity; 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 610805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn * Thumbnail representation of the task's current state. Currently 611805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn * always null. 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Bitmap thumbnail; 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Description of the task's current state. 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence description; 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Number of activities in this task. 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int numActivities; 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Number of activities that are currently running (not stopped 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and persisted) in this task. 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int numRunning; 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningTaskInfo() { 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(id); 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentName.writeToParcel(baseActivity, dest); 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentName.writeToParcel(topActivity, dest); 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (thumbnail != null) { 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(1); 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thumbnail.writeToParcel(dest, 0); 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(0); 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.writeToParcel(description, dest, 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(numActivities); 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(numRunning); 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel source) { 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project id = source.readInt(); 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project baseActivity = ComponentName.readFromParcel(source); 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project topActivity = ComponentName.readFromParcel(source); 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (source.readInt() != 0) { 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thumbnail = Bitmap.CREATOR.createFromParcel(source); 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thumbnail = null; 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project numActivities = source.readInt(); 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project numRunning = source.readInt(); 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<RunningTaskInfo> CREATOR = new Creator<RunningTaskInfo>() { 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningTaskInfo createFromParcel(Parcel source) { 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RunningTaskInfo(source); 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningTaskInfo[] newArray(int size) { 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RunningTaskInfo[size]; 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RunningTaskInfo(Parcel source) { 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readFromParcel(source); 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 681d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a list of the tasks that are currently running, with 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the most recent being first and older ones after in order. Note that 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "running" does not mean any of the task's code is currently loaded or 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity -- the task may have been frozen by the system, so that it 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can be restarted in its previous state when next brought to the 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * foreground. 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param maxNum The maximum number of entries to return in the list. The 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * actual number returned may be smaller, depending on how many tasks the 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user has started. 6930b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 6940b2a6d0773211449fbde9d2706388714beeffebbJim Miller * @param flags Optional flags 6950b2a6d0773211449fbde9d2706388714beeffebbJim Miller * @param receiver Optional receiver for delayed thumbnails 6960b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a list of RunningTaskInfo records describing each of 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the running tasks. 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7000b2a6d0773211449fbde9d2706388714beeffebbJim Miller * Some thumbnails may not be available at the time of this call. The optional 7010b2a6d0773211449fbde9d2706388714beeffebbJim Miller * receiver may be used to receive those thumbnails. 7020b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws SecurityException Throws SecurityException if the caller does 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not hold the {@link android.Manifest.permission#GET_TASKS} permission. 7050b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 7060b2a6d0773211449fbde9d2706388714beeffebbJim Miller * @hide 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7080b2a6d0773211449fbde9d2706388714beeffebbJim Miller public List<RunningTaskInfo> getRunningTasks(int maxNum, int flags, IThumbnailReceiver receiver) 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws SecurityException { 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 7110b2a6d0773211449fbde9d2706388714beeffebbJim Miller return ActivityManagerNative.getDefault().getTasks(maxNum, flags, receiver); 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // System dead, we will be dead too soon! 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7170b2a6d0773211449fbde9d2706388714beeffebbJim Miller 7180b2a6d0773211449fbde9d2706388714beeffebbJim Miller /** 7190b2a6d0773211449fbde9d2706388714beeffebbJim Miller * Return a list of the tasks that are currently running, with 7200b2a6d0773211449fbde9d2706388714beeffebbJim Miller * the most recent being first and older ones after in order. Note that 7210b2a6d0773211449fbde9d2706388714beeffebbJim Miller * "running" does not mean any of the task's code is currently loaded or 7220b2a6d0773211449fbde9d2706388714beeffebbJim Miller * activity -- the task may have been frozen by the system, so that it 7230b2a6d0773211449fbde9d2706388714beeffebbJim Miller * can be restarted in its previous state when next brought to the 7240b2a6d0773211449fbde9d2706388714beeffebbJim Miller * foreground. 7250b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 726c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <p><b>Note: this method is only intended for debugging and presenting 727c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * task management user interfaces</b>. This should never be used for 728c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * core logic in an application, such as deciding between different 729c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * behaviors based on the information found here. Such uses are 730c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <em>not</em> supported, and will likely break in the future. For 731c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * example, if multiple applications can be actively running at the 732c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * same time, assumptions made about the meaning of the data here for 733c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * purposes of control flow will be incorrect.</p> 734c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 7350b2a6d0773211449fbde9d2706388714beeffebbJim Miller * @param maxNum The maximum number of entries to return in the list. The 7360b2a6d0773211449fbde9d2706388714beeffebbJim Miller * actual number returned may be smaller, depending on how many tasks the 7370b2a6d0773211449fbde9d2706388714beeffebbJim Miller * user has started. 7380b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 7390b2a6d0773211449fbde9d2706388714beeffebbJim Miller * @return Returns a list of RunningTaskInfo records describing each of 7400b2a6d0773211449fbde9d2706388714beeffebbJim Miller * the running tasks. 7410b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 7420b2a6d0773211449fbde9d2706388714beeffebbJim Miller * @throws SecurityException Throws SecurityException if the caller does 7430b2a6d0773211449fbde9d2706388714beeffebbJim Miller * not hold the {@link android.Manifest.permission#GET_TASKS} permission. 7440b2a6d0773211449fbde9d2706388714beeffebbJim Miller */ 7450b2a6d0773211449fbde9d2706388714beeffebbJim Miller public List<RunningTaskInfo> getRunningTasks(int maxNum) 7460b2a6d0773211449fbde9d2706388714beeffebbJim Miller throws SecurityException { 7470b2a6d0773211449fbde9d2706388714beeffebbJim Miller return getRunningTasks(maxNum, 0, null); 7480b2a6d0773211449fbde9d2706388714beeffebbJim Miller } 7490b2a6d0773211449fbde9d2706388714beeffebbJim Miller 7500c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn /** 7510c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * Remove some end of a task's activity stack that is not part of 7520c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * the main application. The selected activities will be finished, so 7530c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * they are no longer part of the main task. 7540c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * 7550c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @param taskId The identifier of the task. 7560c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @param subTaskIndex The number of the sub-task; this corresponds 7570c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * to the index of the thumbnail returned by {@link #getTaskThumbnails(int)}. 7580c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @return Returns true if the sub-task was found and was removed. 7590c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * 7600c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @hide 7610c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn */ 7620c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn public boolean removeSubTask(int taskId, int subTaskIndex) 7630c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn throws SecurityException { 7640c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn try { 7650c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return ActivityManagerNative.getDefault().removeSubTask(taskId, subTaskIndex); 7660c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } catch (RemoteException e) { 7670c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn // System dead, we will be dead too soon! 7680c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return false; 7690c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 7700c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 7710c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 7720c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn /** 7730c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * If set, the process of the root activity of the task will be killed 7740c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * as part of removing the task. 7750c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @hide 7760c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn */ 7770c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn public static final int REMOVE_TASK_KILL_PROCESS = 0x0001; 7780c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 7790c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn /** 7800c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * Completely remove the given task. 7810c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * 7820c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @param taskId Identifier of the task to be removed. 7830c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @param flags Additional operational flags. May be 0 or 7840c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * {@link #REMOVE_TASK_KILL_PROCESS}. 7850c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @return Returns true if the given task was found and removed. 7860c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * 7870c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @hide 7880c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn */ 7890c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn public boolean removeTask(int taskId, int flags) 7900c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn throws SecurityException { 7910c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn try { 7920c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return ActivityManagerNative.getDefault().removeTask(taskId, flags); 7930c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } catch (RemoteException e) { 7940c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn // System dead, we will be dead too soon! 7950c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return false; 7960c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 7970c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 7980c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 799d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn /** @hide */ 800f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public static class TaskThumbnails implements Parcelable { 801f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public Bitmap mainThumbnail; 802f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 803f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public int numSubThumbbails; 804f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 805f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn /** @hide */ 806f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public IThumbnailRetriever retriever; 807f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 808f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public TaskThumbnails() { 809f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 810f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 811f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public Bitmap getSubThumbnail(int index) { 812f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn try { 813f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn return retriever.getThumbnail(index); 814f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } catch (RemoteException e) { 815f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn return null; 816f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 817f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 818f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 819f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public int describeContents() { 820f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn return 0; 821f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 822f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 823f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public void writeToParcel(Parcel dest, int flags) { 824f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn if (mainThumbnail != null) { 825f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn dest.writeInt(1); 826f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn mainThumbnail.writeToParcel(dest, 0); 827f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } else { 828f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn dest.writeInt(0); 829f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 830f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn dest.writeInt(numSubThumbbails); 831f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn dest.writeStrongInterface(retriever); 832f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 833f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 834f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public void readFromParcel(Parcel source) { 835f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn if (source.readInt() != 0) { 836f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn mainThumbnail = Bitmap.CREATOR.createFromParcel(source); 837f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } else { 838f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn mainThumbnail = null; 839f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 840f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn numSubThumbbails = source.readInt(); 841f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn retriever = IThumbnailRetriever.Stub.asInterface(source.readStrongBinder()); 842f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 843f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 844f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public static final Creator<TaskThumbnails> CREATOR = new Creator<TaskThumbnails>() { 845f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public TaskThumbnails createFromParcel(Parcel source) { 846f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn return new TaskThumbnails(source); 847f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 848f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public TaskThumbnails[] newArray(int size) { 849f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn return new TaskThumbnails[size]; 850f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 851f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn }; 852f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 853f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn private TaskThumbnails(Parcel source) { 854f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn readFromParcel(source); 855f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 856f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 857f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 858f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn /** @hide */ 859f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public TaskThumbnails getTaskThumbnails(int id) throws SecurityException { 860d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn try { 861f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn return ActivityManagerNative.getDefault().getTaskThumbnails(id); 862d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn } catch (RemoteException e) { 863d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn // System dead, we will be dead too soon! 864d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn return null; 865d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn } 866d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn } 86715491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn 86815491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn /** @hide */ 86915491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn public Bitmap getTaskTopThumbnail(int id) throws SecurityException { 87015491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn try { 87115491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn return ActivityManagerNative.getDefault().getTaskTopThumbnail(id); 87215491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn } catch (RemoteException e) { 87315491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn // System dead, we will be dead too soon! 87415491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn return null; 87515491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn } 87615491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn } 87715491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 879621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * Flag for {@link #moveTaskToFront(int, int)}: also move the "home" 880621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * activity along with the task, so it is positioned immediately behind 881621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * the task. 882621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn */ 883621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn public static final int MOVE_TASK_WITH_HOME = 0x00000001; 884621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn 885621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn /** 886d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn * Flag for {@link #moveTaskToFront(int, int)}: don't count this as a 887d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn * user-instigated action, so the current activity will not receive a 888d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn * hint that the user is leaving. 889d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn */ 890d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn public static final int MOVE_TASK_NO_USER_ACTION = 0x00000002; 891d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn 892d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn /** 8938078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * Equivalent to calling {@link #moveTaskToFront(int, int, Bundle)} 8948078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * with a null options argument. 8958078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * 8968078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * @param taskId The identifier of the task to be moved, as found in 8978078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * {@link RunningTaskInfo} or {@link RecentTaskInfo}. 8988078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * @param flags Additional operational flags, 0 or more of 8998078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * {@link #MOVE_TASK_WITH_HOME}. 9008078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn */ 9018078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public void moveTaskToFront(int taskId, int flags) { 9028078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn moveTaskToFront(taskId, flags, null); 9038078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 9048078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn 9058078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** 906621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * Ask that the task associated with a given task ID be moved to the 907621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * front of the stack, so it is now visible to the user. Requires that 908621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * the caller hold permission {@link android.Manifest.permission#REORDER_TASKS} 909621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * or a SecurityException will be thrown. 910621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * 911621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * @param taskId The identifier of the task to be moved, as found in 912621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * {@link RunningTaskInfo} or {@link RecentTaskInfo}. 913621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * @param flags Additional operational flags, 0 or more of 914621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * {@link #MOVE_TASK_WITH_HOME}. 9158078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * @param options Additional options for the operation, either null or 9168078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * as per {@link Context#startActivity(Intent, android.os.Bundle) 9178078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * Context.startActivity(Intent, Bundle)}. 918621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn */ 9198078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public void moveTaskToFront(int taskId, int flags, Bundle options) { 920621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn try { 9218078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn ActivityManagerNative.getDefault().moveTaskToFront(taskId, flags, options); 922621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn } catch (RemoteException e) { 923621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn // System dead, we will be dead too soon! 924621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn } 925621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn } 926621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn 927621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn /** 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about a particular Service that is 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * currently running in the system. 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class RunningServiceInfo implements Parcelable { 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The service component. 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName service; 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If non-zero, this is the process the service is running in. 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int pid; 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9433025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * The UID that owns this service. 9443025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn */ 9453025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn public int uid; 9463025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn 9473025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn /** 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the process this service runs in. 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String process; 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set to true if the service has asked to run as a foreground process. 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean foreground; 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9583025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * The time when the service was first made active, either by someone 9599adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn * starting or binding to it. This 9609adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn * is in units of {@link android.os.SystemClock#elapsedRealtime()}. 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long activeSince; 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set to true if this service has been explicitly started. 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean started; 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Number of clients connected to the service. 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int clientCount; 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Number of times the service's process has crashed while the service 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is running. 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int crashCount; 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The time when there was last activity in the service (either 9829adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn * explicit requests to start it or clients binding to it). This 9839adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn * is in units of {@link android.os.SystemClock#uptimeMillis()}. 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long lastActivityTime; 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If non-zero, this service is not currently running, but scheduled to 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * restart at the given time. 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long restarting; 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9933025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn /** 9943025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * Bit for {@link #flags}: set if this service has been 9953025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * explicitly started. 9963025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn */ 9973025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn public static final int FLAG_STARTED = 1<<0; 9983025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn 9993025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn /** 10003025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * Bit for {@link #flags}: set if the service has asked to 10013025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * run as a foreground process. 10023025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn */ 10033025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn public static final int FLAG_FOREGROUND = 1<<1; 10043025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn 10053025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn /** 10063025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * Bit for {@link #flags): set if the service is running in a 10073025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * core system process. 10083025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn */ 10093025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn public static final int FLAG_SYSTEM_PROCESS = 1<<2; 10103025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn 10113025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn /** 10123025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * Bit for {@link #flags): set if the service is running in a 10133025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * persistent process. 10143025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn */ 10153025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn public static final int FLAG_PERSISTENT_PROCESS = 1<<3; 10163025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn 10173025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn /** 10183025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * Running flags. 10193025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn */ 10203025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn public int flags; 10213025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn 1022dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1023dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * For special services that are bound to by system code, this is 1024dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * the package that holds the binding. 1025dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1026dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public String clientPackage; 1027dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1028dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1029dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * For special services that are bound to by system code, this is 1030dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * a string resource providing a user-visible label for who the 1031dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * client is. 1032dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1033dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public int clientLabel; 1034dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningServiceInfo() { 10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentName.writeToParcel(service, dest); 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(pid); 10453025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn dest.writeInt(uid); 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(process); 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(foreground ? 1 : 0); 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(activeSince); 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(started ? 1 : 0); 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(clientCount); 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(crashCount); 10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(lastActivityTime); 10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(restarting); 10543025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn dest.writeInt(this.flags); 1055dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn dest.writeString(clientPackage); 1056dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn dest.writeInt(clientLabel); 10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel source) { 10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project service = ComponentName.readFromParcel(source); 10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid = source.readInt(); 10623025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn uid = source.readInt(); 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project process = source.readString(); 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project foreground = source.readInt() != 0; 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activeSince = source.readLong(); 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project started = source.readInt() != 0; 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clientCount = source.readInt(); 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project crashCount = source.readInt(); 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lastActivityTime = source.readLong(); 10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project restarting = source.readLong(); 10713025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn flags = source.readInt(); 1072dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn clientPackage = source.readString(); 1073dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn clientLabel = source.readInt(); 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<RunningServiceInfo> CREATOR = new Creator<RunningServiceInfo>() { 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningServiceInfo createFromParcel(Parcel source) { 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RunningServiceInfo(source); 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningServiceInfo[] newArray(int size) { 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RunningServiceInfo[size]; 10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RunningServiceInfo(Parcel source) { 10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readFromParcel(source); 10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a list of the services that are currently running. 1092c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 1093c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <p><b>Note: this method is only intended for debugging or implementing 1094c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * service management type user interfaces.</b></p> 1095c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param maxNum The maximum number of entries to return in the list. The 10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * actual number returned may be smaller, depending on how many services 10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are running. 10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a list of RunningServiceInfo records describing each of 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the running tasks. 11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<RunningServiceInfo> getRunningServices(int maxNum) 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws SecurityException { 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 11064b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return ActivityManagerNative.getDefault() 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getServices(maxNum, 0); 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // System dead, we will be dead too soon! 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1115dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * Returns a PendingIntent you can start to show a control panel for the 1116dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * given running service. If the service does not have a control panel, 1117dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * null is returned. 1118dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1119dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public PendingIntent getRunningServiceControlPanel(ComponentName service) 1120dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn throws SecurityException { 1121dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn try { 1122dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn return ActivityManagerNative.getDefault() 1123dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn .getRunningServiceControlPanel(service); 1124dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn } catch (RemoteException e) { 1125dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn // System dead, we will be dead too soon! 1126dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn return null; 1127dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn } 1128dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn } 1129dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1130dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about the available memory through 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ActivityManager#getMemoryInfo}. 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class MemoryInfo implements Parcelable { 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 113659325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn * The available memory on the system. This number should not 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be considered absolute: due to the nature of the kernel, a significant 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * portion of this memory is actually in use and needed for the overall 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system to run well. 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long availMem; 114259325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn 114359325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn /** 114459325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn * The total memory accessible by the kernel. This is basically the 114559325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn * RAM size of the device, not including below-kernel fixed allocations 114659325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn * like DMA buffers, RAM for the baseband CPU, etc. 114759325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn */ 114859325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn public long totalMem; 114959325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The threshold of {@link #availMem} at which we consider memory to be 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * low and start killing background services and other non-extraneous 11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processes. 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long threshold; 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set to true if the system considers itself to currently be in a low 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * memory situation. 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean lowMemory; 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11637d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn /** @hide */ 11647d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn public long hiddenAppThreshold; 11657d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn /** @hide */ 11667d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn public long secondaryServerThreshold; 11677d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn /** @hide */ 11687d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn public long visibleAppThreshold; 11697d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn /** @hide */ 11707d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn public long foregroundAppThreshold; 11717d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MemoryInfo() { 11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(availMem); 118159325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn dest.writeLong(totalMem); 11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(threshold); 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(lowMemory ? 1 : 0); 11847d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn dest.writeLong(hiddenAppThreshold); 11857d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn dest.writeLong(secondaryServerThreshold); 11867d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn dest.writeLong(visibleAppThreshold); 11877d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn dest.writeLong(foregroundAppThreshold); 11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel source) { 11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project availMem = source.readLong(); 119259325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn totalMem = source.readLong(); 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project threshold = source.readLong(); 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lowMemory = source.readInt() != 0; 11957d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn hiddenAppThreshold = source.readLong(); 11967d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn secondaryServerThreshold = source.readLong(); 11977d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn visibleAppThreshold = source.readLong(); 11987d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn foregroundAppThreshold = source.readLong(); 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<MemoryInfo> CREATOR 12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Creator<MemoryInfo>() { 12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MemoryInfo createFromParcel(Parcel source) { 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new MemoryInfo(source); 12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MemoryInfo[] newArray(int size) { 12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new MemoryInfo[size]; 12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MemoryInfo(Parcel source) { 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readFromParcel(source); 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1216c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn /** 1217c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * Return general information about the memory state of the system. This 1218c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * can be used to help decide how to manage your own memory, though note 1219c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * that polling is not recommended and 1220c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * {@link android.content.ComponentCallbacks2#onTrimMemory(int) 1221c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * ComponentCallbacks2.onTrimMemory(int)} is the preferred way to do this. 1222c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * Also see {@link #getMyMemoryState} for how to retrieve the current trim 1223c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * level of your process as needed, which gives a better hint for how to 1224c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * manage its memory. 1225c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn */ 12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getMemoryInfo(MemoryInfo outInfo) { 12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault().getMemoryInfo(outInfo); 12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean clearApplicationUserData(String packageName, IPackageDataObserver observer) { 12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().clearApplicationUserData(packageName, 12394120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn observer, UserHandle.myUserId()); 12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about any processes that are in an error condition. 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class ProcessErrorStateInfo implements Parcelable { 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Condition codes 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NO_ERROR = 0; 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CRASHED = 1; 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NOT_RESPONDING = 2; 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The condition that the process is in. 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int condition; 12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The process name in which the crash or error occurred. 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String processName; 12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The pid of this process; 0 if none 12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int pid; 12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The kernel user-ID that has been assigned to this process; 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * currently this is not a unique ID (multiple applications can have 12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the same uid). 12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int uid; 12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 127960d8762413e8daba5f73559786312a9ec5e3b827Dan Egnor * The activity name associated with the error, if known. May be null. 12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String tag; 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A short message describing the error condition. 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String shortMsg; 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A long message describing the error condition. 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String longMsg; 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1294b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor * The stack trace where the error originated. May be null. 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1296b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor public String stackTrace; 1297b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor 1298b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor /** 1299b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor * to be deprecated: This value will always be null. 1300b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor */ 1301b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor public byte[] crashData = null; 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ProcessErrorStateInfo() { 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(condition); 13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(processName); 13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(pid); 13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(uid); 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(tag); 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(shortMsg); 13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(longMsg); 1318b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor dest.writeString(stackTrace); 13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel source) { 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project condition = source.readInt(); 13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project processName = source.readString(); 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid = source.readInt(); 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uid = source.readInt(); 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tag = source.readString(); 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project shortMsg = source.readString(); 13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project longMsg = source.readString(); 1329b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor stackTrace = source.readString(); 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<ProcessErrorStateInfo> CREATOR = 13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<ProcessErrorStateInfo>() { 13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ProcessErrorStateInfo createFromParcel(Parcel source) { 13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ProcessErrorStateInfo(source); 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ProcessErrorStateInfo[] newArray(int size) { 13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ProcessErrorStateInfo[size]; 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ProcessErrorStateInfo(Parcel source) { 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readFromParcel(source); 13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a list of any processes that are currently in an error condition. The result 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be null if all processes are running properly at this time. 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a list of ProcessErrorStateInfo records, or null if there are no 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current error conditions (it will not return an empty list). This list ordering is not 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified. 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<ProcessErrorStateInfo> getProcessesInErrorState() { 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getProcessesInErrorState(); 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about a running process. 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class RunningAppProcessInfo implements Parcelable { 13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the process that this object is associated with 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String processName; 13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The pid of this process; 0 if none 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int pid; 13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1377eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 1378eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * The user id of this process. 1379eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 1380eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public int uid; 1381eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 1382baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn /** 1383baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn * All packages that have been loaded into the process. 1384baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn */ 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String pkgList[]; 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1388482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn * Constant for {@link #flags}: this is an app that is unable to 1389482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn * correctly save its state when going to the background, 1390482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn * so it can not be killed while in the background. 1391482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn * @hide 1392baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn */ 1393482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn public static final int FLAG_CANT_SAVE_STATE = 1<<0; 1394baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn 1395baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn /** 1396424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn * Constant for {@link #flags}: this process is associated with a 1397424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn * persistent system app. 1398424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn * @hide 1399424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn */ 1400424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn public static final int FLAG_PERSISTENT = 1<<1; 1401424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn 1402424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn /** 14030c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn * Constant for {@link #flags}: this process is associated with a 14040c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn * persistent system app. 14050c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn * @hide 14060c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn */ 14070c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn public static final int FLAG_HAS_ACTIVITIES = 1<<2; 14080c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn 14090c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn /** 1410baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn * Flags of information. May be any of 1411482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn * {@link #FLAG_CANT_SAVE_STATE}. 1412482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn * @hide 1413baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn */ 1414baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn public int flags; 141527ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn 141627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn /** 141727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * Last memory trim level reported to the process: corresponds to 141827ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * the values supplied to {@link android.content.ComponentCallbacks2#onTrimMemory(int) 141927ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * ComponentCallbacks2.onTrimMemory(int)}. 142027ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn */ 142127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn public int lastTrimLevel; 142227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn 1423baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn /** 1424a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn * Constant for {@link #importance}: this is a persistent process. 1425a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn * Only used when reporting to process observers. 1426a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn * @hide 1427a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn */ 1428a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn public static final int IMPORTANCE_PERSISTENT = 50; 1429a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn 1430a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn /** 14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #importance}: this process is running the 14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * foreground UI. 14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IMPORTANCE_FOREGROUND = 100; 14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 143732907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn * Constant for {@link #importance}: this process is running something 143832907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn * that is actively visible to the user, though not in the immediate 143932907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn * foreground. 1440860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn */ 144132907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int IMPORTANCE_VISIBLE = 200; 1442860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn 1443860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn /** 14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #importance}: this process is running something 144532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn * that is considered to be actively perceptible to the user. An 144632907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn * example would be an application performing background music playback. 14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 144832907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int IMPORTANCE_PERCEPTIBLE = 130; 144932907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 145032907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn /** 14515383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn * Constant for {@link #importance}: this process is running an 14525383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn * application that can not save its state, and thus can't be killed 14535383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn * while in the background. 14545383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn * @hide 145532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn */ 14565383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn public static final int IMPORTANCE_CANT_SAVE_STATE = 170; 14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #importance}: this process is contains services 14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that should remain running. 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IMPORTANCE_SERVICE = 300; 14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #importance}: this process process contains 14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * background code that is expendable. 14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IMPORTANCE_BACKGROUND = 400; 14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #importance}: this process is empty of any 14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * actively running code. 14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IMPORTANCE_EMPTY = 500; 14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The relative importance level that the system places on this 14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process. May be one of {@link #IMPORTANCE_FOREGROUND}, 14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #IMPORTANCE_VISIBLE}, {@link #IMPORTANCE_SERVICE}, 14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #IMPORTANCE_BACKGROUND}, or {@link #IMPORTANCE_EMPTY}. These 14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constants are numbered so that "more important" values are always 14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * smaller than "less important" values. 14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int importance; 14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An additional ordering within a particular {@link #importance} 14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * category, providing finer-grained information about the relative 14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * utility of processes within a category. This number means nothing 14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * except that a smaller values are more recently used (and thus 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more important). Currently an LRU value is only maintained for 14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the {@link #IMPORTANCE_BACKGROUND} category, though others may 14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be maintained in the future. 14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int lru; 149627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn 1497dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1498dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * Constant for {@link #importanceReasonCode}: nothing special has 1499dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * been specified for the reason for this level. 1500dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1501dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public static final int REASON_UNKNOWN = 0; 1502dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1503dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1504dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * Constant for {@link #importanceReasonCode}: one of the application's 1505dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * content providers is being used by another process. The pid of 1506dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * the client process is in {@link #importanceReasonPid} and the 1507dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * target provider in this process is in 1508dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * {@link #importanceReasonComponent}. 1509dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1510dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public static final int REASON_PROVIDER_IN_USE = 1; 1511dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1512dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1513dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * Constant for {@link #importanceReasonCode}: one of the application's 1514dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * content providers is being used by another process. The pid of 1515dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * the client process is in {@link #importanceReasonPid} and the 1516dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * target provider in this process is in 1517dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * {@link #importanceReasonComponent}. 1518dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1519dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public static final int REASON_SERVICE_IN_USE = 2; 1520dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1521dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1522dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * The reason for {@link #importance}, if any. 1523dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1524dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public int importanceReasonCode; 1525dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1526dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1527dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * For the specified values of {@link #importanceReasonCode}, this 1528dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * is the process ID of the other process that is a client of this 1529dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * process. This will be 0 if no other process is using this one. 1530dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1531dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public int importanceReasonPid; 1532dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1533dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1534dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * For the specified values of {@link #importanceReasonCode}, this 1535dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * is the name of the component that is being used in this process. 1536dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1537dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public ComponentName importanceReasonComponent; 1538dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1539905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn /** 1540905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn * When {@link importanceReasonPid} is non-0, this is the importance 1541905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn * of the other pid. @hide 1542905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn */ 1543905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn public int importanceReasonImportance; 1544905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn 15459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningAppProcessInfo() { 15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project importance = IMPORTANCE_FOREGROUND; 1547dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn importanceReasonCode = REASON_UNKNOWN; 15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningAppProcessInfo(String pProcessName, int pPid, String pArr[]) { 15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project processName = pProcessName; 15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid = pPid; 15539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pkgList = pArr; 15549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(processName); 15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(pid); 1563eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn dest.writeInt(uid); 15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeStringArray(pkgList); 1565baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn dest.writeInt(this.flags); 156627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn dest.writeInt(lastTrimLevel); 15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(importance); 15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(lru); 1569dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn dest.writeInt(importanceReasonCode); 1570dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn dest.writeInt(importanceReasonPid); 1571dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn ComponentName.writeToParcel(importanceReasonComponent, dest); 1572905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn dest.writeInt(importanceReasonImportance); 15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel source) { 15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project processName = source.readString(); 15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid = source.readInt(); 1578eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn uid = source.readInt(); 15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pkgList = source.readStringArray(); 1580baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn flags = source.readInt(); 158127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn lastTrimLevel = source.readInt(); 15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project importance = source.readInt(); 15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lru = source.readInt(); 1584dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn importanceReasonCode = source.readInt(); 1585dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn importanceReasonPid = source.readInt(); 1586dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn importanceReasonComponent = ComponentName.readFromParcel(source); 1587905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn importanceReasonImportance = source.readInt(); 15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<RunningAppProcessInfo> CREATOR = 15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<RunningAppProcessInfo>() { 15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningAppProcessInfo createFromParcel(Parcel source) { 15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RunningAppProcessInfo(source); 15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningAppProcessInfo[] newArray(int size) { 15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RunningAppProcessInfo[size]; 15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RunningAppProcessInfo(Parcel source) { 16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readFromParcel(source); 16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1606f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu * Returns a list of application processes installed on external media 1607f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu * that are running on the device. 1608f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu * 1609c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <p><b>Note: this method is only intended for debugging or building 1610c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * a user-facing process management UI.</b></p> 1611c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 1612f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu * @return Returns a list of ApplicationInfo records, or null if none 1613f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu * This list ordering is not specified. 1614f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu * @hide 1615f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu */ 1616f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu public List<ApplicationInfo> getRunningExternalApplications() { 1617f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu try { 1618f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu return ActivityManagerNative.getDefault().getRunningExternalApplications(); 1619f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu } catch (RemoteException e) { 1620f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu return null; 1621f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu } 1622f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu } 1623f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu 1624f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu /** 16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a list of application processes that are running on the device. 1626c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 1627c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <p><b>Note: this method is only intended for debugging or building 1628c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * a user-facing process management UI.</b></p> 1629c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a list of RunningAppProcessInfo records, or null if there are no 16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running processes (it will not return an empty list). This list ordering is not 16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified. 16339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<RunningAppProcessInfo> getRunningAppProcesses() { 16359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 16369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getRunningAppProcesses(); 16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 16389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 164127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn 164227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn /** 164327ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * Return global memory state information for the calling process. This 164427ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * does not fill in all fields of the {@link RunningAppProcessInfo}. The 164527ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * only fields that will be filled in are 164627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * {@link RunningAppProcessInfo#pid}, 164727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * {@link RunningAppProcessInfo#uid}, 164827ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * {@link RunningAppProcessInfo#lastTrimLevel}, 164927ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * {@link RunningAppProcessInfo#importance}, 165027ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * {@link RunningAppProcessInfo#lru}, and 165127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * {@link RunningAppProcessInfo#importanceReasonCode}. 165227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn */ 165327ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn static public void getMyMemoryState(RunningAppProcessInfo outState) { 165427ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn try { 165527ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn ActivityManagerNative.getDefault().getMyMemoryState(outState); 165627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn } catch (RemoteException e) { 165727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn } 165827ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn } 165927ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn 16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16614f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn * Return information about the memory usage of one or more processes. 1662c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 1663c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <p><b>Note: this method is only intended for debugging or building 1664c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * a user-facing process management UI.</b></p> 1665c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 16664f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn * @param pids The pids of the processes whose memory usage is to be 16674f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn * retrieved. 16684f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn * @return Returns an array of memory information, one for each 16694f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn * requested pid. 16704f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn */ 16714f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids) { 16724f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn try { 16734f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn return ActivityManagerNative.getDefault().getProcessMemoryInfo(pids); 16744f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn } catch (RemoteException e) { 16754f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn return null; 16764f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn } 16774f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn } 16784f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn 16794f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn /** 168003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * @deprecated This is now just a wrapper for 168103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * {@link #killBackgroundProcesses(String)}; the previous behavior here 168203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * is no longer available to applications because it allows them to 168303abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * break other applications by removing their alarms, stopping their 168403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * services, etc. 168503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn */ 168603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn @Deprecated 168703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn public void restartPackage(String packageName) { 168803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn killBackgroundProcesses(packageName); 168903abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn } 169003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn 169103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn /** 169203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * Have the system immediately kill all background processes associated 169303abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * with the given package. This is the same as the kernel killing those 169403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * processes to reclaim memory; the system will take care of restarting 169503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * these processes in the future as needed. 169603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * 169703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * <p>You must hold the permission 169803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * {@link android.Manifest.permission#KILL_BACKGROUND_PROCESSES} to be able to 169903abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * call this method. 170003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * 170103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * @param packageName The name of the package whose processes are to 170203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * be killed. 170303abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn */ 170403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn public void killBackgroundProcesses(String packageName) { 170503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn try { 17061676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn ActivityManagerNative.getDefault().killBackgroundProcesses(packageName, 17071676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn UserHandle.myUserId()); 170803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn } catch (RemoteException e) { 170903abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn } 171003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn } 171103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn 171203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn /** 17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Have the system perform a force stop of everything associated with 17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the given application package. All processes that share its uid 17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be killed, all services it has running stopped, all activities 17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * removed, etc. In addition, a {@link Intent#ACTION_PACKAGE_RESTARTED} 17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * broadcast will be sent, so that any of its registered alarms can 17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be stopped, notifications removed, etc. 17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You must hold the permission 172103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * {@link android.Manifest.permission#FORCE_STOP_PACKAGES} to be able to 17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * call this method. 17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param packageName The name of the package to be stopped. 172503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * 172603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * @hide This is not available to third party applications due to 172703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * it allowing them to break other applications by stopping their 172803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * services, removing their alarms, etc. 17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 173003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn public void forceStopPackage(String packageName) { 17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 17321676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn ActivityManagerNative.getDefault().forceStopPackage(packageName, 17331676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn UserHandle.myUserId()); 17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the device configuration attributes. 17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ConfigurationInfo getDeviceConfigurationInfo() { 17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getDeviceConfigurationInfo(); 17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17485ef44b7566566db08b62245cbb9002b548071603Kenny Root 17495ef44b7566566db08b62245cbb9002b548071603Kenny Root /** 17505ef44b7566566db08b62245cbb9002b548071603Kenny Root * Get the preferred density of icons for the launcher. This is used when 17515ef44b7566566db08b62245cbb9002b548071603Kenny Root * custom drawables are created (e.g., for shortcuts). 17525ef44b7566566db08b62245cbb9002b548071603Kenny Root * 17535ef44b7566566db08b62245cbb9002b548071603Kenny Root * @return density in terms of DPI 17545ef44b7566566db08b62245cbb9002b548071603Kenny Root */ 17555ef44b7566566db08b62245cbb9002b548071603Kenny Root public int getLauncherLargeIconDensity() { 17565ef44b7566566db08b62245cbb9002b548071603Kenny Root final Resources res = mContext.getResources(); 17575ef44b7566566db08b62245cbb9002b548071603Kenny Root final int density = res.getDisplayMetrics().densityDpi; 1758d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn final int sw = res.getConfiguration().smallestScreenWidthDp; 17595ef44b7566566db08b62245cbb9002b548071603Kenny Root 1760d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn if (sw < 600) { 1761d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn // Smaller than approx 7" tablets, use the regular icon size. 17625ef44b7566566db08b62245cbb9002b548071603Kenny Root return density; 17635ef44b7566566db08b62245cbb9002b548071603Kenny Root } 17645ef44b7566566db08b62245cbb9002b548071603Kenny Root 17655ef44b7566566db08b62245cbb9002b548071603Kenny Root switch (density) { 17665ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_LOW: 17675ef44b7566566db08b62245cbb9002b548071603Kenny Root return DisplayMetrics.DENSITY_MEDIUM; 17685ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_MEDIUM: 17695ef44b7566566db08b62245cbb9002b548071603Kenny Root return DisplayMetrics.DENSITY_HIGH; 1770d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn case DisplayMetrics.DENSITY_TV: 1771d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn return DisplayMetrics.DENSITY_XHIGH; 17725ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_HIGH: 17735ef44b7566566db08b62245cbb9002b548071603Kenny Root return DisplayMetrics.DENSITY_XHIGH; 17745ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_XHIGH: 1775d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn return DisplayMetrics.DENSITY_XXHIGH; 1776d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn case DisplayMetrics.DENSITY_XXHIGH: 1777d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn return DisplayMetrics.DENSITY_XHIGH * 2; 17785ef44b7566566db08b62245cbb9002b548071603Kenny Root default: 1779d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn // The density is some abnormal value. Return some other 1780d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn // abnormal value that is a reasonable scaling of it. 1781d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn return (int)((density*1.5f)+.5f); 17825ef44b7566566db08b62245cbb9002b548071603Kenny Root } 17835ef44b7566566db08b62245cbb9002b548071603Kenny Root } 17845ef44b7566566db08b62245cbb9002b548071603Kenny Root 17855ef44b7566566db08b62245cbb9002b548071603Kenny Root /** 17865ef44b7566566db08b62245cbb9002b548071603Kenny Root * Get the preferred launcher icon size. This is used when custom drawables 17875ef44b7566566db08b62245cbb9002b548071603Kenny Root * are created (e.g., for shortcuts). 17885ef44b7566566db08b62245cbb9002b548071603Kenny Root * 17895ef44b7566566db08b62245cbb9002b548071603Kenny Root * @return dimensions of square icons in terms of pixels 17905ef44b7566566db08b62245cbb9002b548071603Kenny Root */ 17915ef44b7566566db08b62245cbb9002b548071603Kenny Root public int getLauncherLargeIconSize() { 17925ef44b7566566db08b62245cbb9002b548071603Kenny Root final Resources res = mContext.getResources(); 17935ef44b7566566db08b62245cbb9002b548071603Kenny Root final int size = res.getDimensionPixelSize(android.R.dimen.app_icon_size); 1794d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn final int sw = res.getConfiguration().smallestScreenWidthDp; 17955ef44b7566566db08b62245cbb9002b548071603Kenny Root 1796d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn if (sw < 600) { 1797d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn // Smaller than approx 7" tablets, use the regular icon size. 17985ef44b7566566db08b62245cbb9002b548071603Kenny Root return size; 17995ef44b7566566db08b62245cbb9002b548071603Kenny Root } 18005ef44b7566566db08b62245cbb9002b548071603Kenny Root 18015ef44b7566566db08b62245cbb9002b548071603Kenny Root final int density = res.getDisplayMetrics().densityDpi; 18025ef44b7566566db08b62245cbb9002b548071603Kenny Root 18035ef44b7566566db08b62245cbb9002b548071603Kenny Root switch (density) { 18045ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_LOW: 18055ef44b7566566db08b62245cbb9002b548071603Kenny Root return (size * DisplayMetrics.DENSITY_MEDIUM) / DisplayMetrics.DENSITY_LOW; 18065ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_MEDIUM: 18075ef44b7566566db08b62245cbb9002b548071603Kenny Root return (size * DisplayMetrics.DENSITY_HIGH) / DisplayMetrics.DENSITY_MEDIUM; 1808d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn case DisplayMetrics.DENSITY_TV: 1809d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH; 18105ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_HIGH: 18115ef44b7566566db08b62245cbb9002b548071603Kenny Root return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH; 18125ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_XHIGH: 1813d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn return (size * DisplayMetrics.DENSITY_XXHIGH) / DisplayMetrics.DENSITY_XHIGH; 1814d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn case DisplayMetrics.DENSITY_XXHIGH: 1815d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn return (size * DisplayMetrics.DENSITY_XHIGH*2) / DisplayMetrics.DENSITY_XXHIGH; 18165ef44b7566566db08b62245cbb9002b548071603Kenny Root default: 1817d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn // The density is some abnormal value. Return some other 1818d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn // abnormal value that is a reasonable scaling of it. 1819d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn return (int)((size*1.5f) + .5f); 18205ef44b7566566db08b62245cbb9002b548071603Kenny Root } 18215ef44b7566566db08b62245cbb9002b548071603Kenny Root } 18225ef44b7566566db08b62245cbb9002b548071603Kenny Root 18239327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn /** 18249327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn * Returns "true" if the user interface is currently being messed with 18259327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn * by a monkey. 18269327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn */ 18279327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn public static boolean isUserAMonkey() { 18289327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn try { 18299327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn return ActivityManagerNative.getDefault().isUserAMonkey(); 18309327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn } catch (RemoteException e) { 18319327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn } 18329327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn return false; 18339327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn } 18343b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot 18353b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot /** 18363b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot * Returns "true" if device is running in a test harness. 18373b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot */ 18383b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot public static boolean isRunningInTestHarness() { 18393b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot return SystemProperties.getBoolean("ro.test_harness", false); 18403b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot } 18418d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay 18428d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay /** 18438d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay * Returns the launch count of each installed package. 18448d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay * 18458d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay * @hide 18468d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay */ 18478d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay public Map<String, Integer> getAllPackageLaunchCounts() { 18488d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay try { 18498d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay IUsageStats usageStatsService = IUsageStats.Stub.asInterface( 18508d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay ServiceManager.getService("usagestats")); 18518d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay if (usageStatsService == null) { 18528d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay return new HashMap<String, Integer>(); 18538d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay } 18548d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay 1855bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay PkgUsageStats[] allPkgUsageStats = usageStatsService.getAllPkgUsageStats(); 1856bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay if (allPkgUsageStats == null) { 1857bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay return new HashMap<String, Integer>(); 1858bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay } 1859bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay 18608d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay Map<String, Integer> launchCounts = new HashMap<String, Integer>(); 1861bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay for (PkgUsageStats pkgUsageStats : allPkgUsageStats) { 18628d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay launchCounts.put(pkgUsageStats.packageName, pkgUsageStats.launchCount); 18638d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay } 18648d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay 18658d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay return launchCounts; 18668d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay } catch (RemoteException e) { 18678d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay Log.w(TAG, "Could not query launch counts", e); 18688d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay return new HashMap<String, Integer>(); 18698d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay } 18708d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay } 18714b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 18725320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn /** @hide */ 18735320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn public static int checkComponentPermission(String permission, int uid, 18745320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn int owningUid, boolean exported) { 18755320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn // Root, system server get to do everything. 18765320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn if (uid == 0 || uid == Process.SYSTEM_UID) { 18775320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return PackageManager.PERMISSION_GRANTED; 18785320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 18795320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn // Isolated processes don't get any permissions. 1880f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn if (UserHandle.isIsolated(uid)) { 18815320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return PackageManager.PERMISSION_DENIED; 18825320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 18835320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn // If there is a uid that owns whatever is being accessed, it has 18845320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn // blanket access to it regardless of the permissions it requires. 1885f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn if (owningUid >= 0 && UserHandle.isSameApp(uid, owningUid)) { 18865320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return PackageManager.PERMISSION_GRANTED; 18875320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 18885320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn // If the target is not exported, then nobody else can get to it. 18895320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn if (!exported) { 18905320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn Slog.w(TAG, "Permission denied: checkComponentPermission() owningUid=" + owningUid); 18915320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return PackageManager.PERMISSION_DENIED; 18925320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 18935320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn if (permission == null) { 18945320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return PackageManager.PERMISSION_GRANTED; 18955320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 18965320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn try { 18975320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return AppGlobals.getPackageManager() 18985320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn .checkUidPermission(permission, uid); 18995320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } catch (RemoteException e) { 19005320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn // Should never happen, but if it does... deny! 19017d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Slog.e(TAG, "PackageManager is dead?!?", e); 19027d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 19037d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn return PackageManager.PERMISSION_DENIED; 19047d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 19057d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn 19067d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn /** @hide */ 19077d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn public static int checkUidPermission(String permission, int uid) { 19087d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn try { 19097d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn return AppGlobals.getPackageManager() 19107d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn .checkUidPermission(permission, uid); 19117d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } catch (RemoteException e) { 19127d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn // Should never happen, but if it does... deny! 19135320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn Slog.e(TAG, "PackageManager is dead?!?", e); 19145320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 19155320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return PackageManager.PERMISSION_DENIED; 19165320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 19175320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn 19184120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn /** @hide */ 19194120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn public static int handleIncomingUser(int callingPid, int callingUid, int userId, 19204120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn boolean allowAll, boolean requireFull, String name, String callerPackage) { 19214120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn if (UserHandle.getUserId(callingUid) == userId) { 19224120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn return userId; 19234120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } 19244120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn try { 19254120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn return ActivityManagerNative.getDefault().handleIncomingUser(callingPid, 19264120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn callingUid, userId, allowAll, requireFull, name, callerPackage); 19274120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } catch (RemoteException e) { 19284120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn throw new SecurityException("Failed calling activity manager", e); 19294120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } 19304120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } 19314120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn 19324120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn /** @hide */ 19334120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn public static int getCurrentUser() { 19344120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn UserInfo ui; 19354120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn try { 19364120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn ui = ActivityManagerNative.getDefault().getCurrentUser(); 19374120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn return ui != null ? ui.id : 0; 19384120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } catch (RemoteException e) { 19394120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn return 0; 19404120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } 19414120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } 19424120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn 19434b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani /** 19449fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy * Returns the usage statistics of each installed package. 19459fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy * 19469fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy * @hide 19479fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy */ 19489fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy public PkgUsageStats[] getAllPackageUsageStats() { 19499fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy try { 19509fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy IUsageStats usageStatsService = IUsageStats.Stub.asInterface( 19519fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy ServiceManager.getService("usagestats")); 19529fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy if (usageStatsService != null) { 19539fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy return usageStatsService.getAllPkgUsageStats(); 19549fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy } 19559fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy } catch (RemoteException e) { 19569fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy Log.w(TAG, "Could not query usage stats", e); 19579fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy } 19589fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy return new PkgUsageStats[0]; 19599fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy } 19609fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy 19619fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy /** 19624b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * @param userid the user's id. Zero indicates the default user 19634b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * @hide 19644b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani */ 19654b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public boolean switchUser(int userid) { 19664b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani try { 19674b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return ActivityManagerNative.getDefault().switchUser(userid); 19684b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } catch (RemoteException e) { 19694b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return false; 19704b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 19714b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 19725e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn 19735e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn /** 19745e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * Return whether the given user is actively running. This means that 19755e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * the user is in the "started" state, not "stopped" -- it is currently 19765e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * allowed to run code through scheduled alarms, receiving broadcasts, 19775e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * etc. A started user may be either the current foreground user or a 19785e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * background user; the result here does not distinguish between the two. 19795e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * @param userid the user's id. Zero indicates the default user. 19805e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * @hide 19815e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn */ 19825e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn public boolean isUserRunning(int userid) { 19835e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn try { 1984a8a9bd65bf5865d83ef44f54552ca39522bfbcf0Dianne Hackborn return ActivityManagerNative.getDefault().isUserRunning(userid, false); 19855e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn } catch (RemoteException e) { 19865e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn return false; 19875e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn } 19885e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn } 19899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1990