Nếu ta có một ứng dụng cần hiển thị liên tục trên màn hình chính, ta cần kiểm tra để nếu vì lý do nào đó nó bị chuyển vào background, như người dùng ấn nút home chẳng hạn, thì ta lại đưa nó ra.
Tạo một service như sau.
public class newse extends Service {
private static final int INTERVAL = 3000; // poll every
3 secs
private static final String YOUR_APP_PACKAGE_NAME = "com.example.vidu";
private static boolean stopTask;
private
PowerManager.WakeLock mWakeLock;
@Override
public void onCreate() {
super.onCreate();
stopTask = false;
final ActivityManager
activityManager =
(ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
// Start your (polling) task
TimerTask task = new TimerTask() {
@Override
public void run() {
// If you wish to stop the
task/polling
if (stopTask){
this.cancel();
}
List<ActivityManager.RunningAppProcessInfo>
tasks = activityManager.getRunningAppProcesses();
String foregroundTaskPackageName = tasks.get(0).processName;
// Check foreground app: If it
is not in the foreground... bring it!
if (!foregroundTaskPackageName.equals(YOUR_APP_PACKAGE_NAME)) {
Intent LaunchIntent = getPackageManager()
.getLaunchIntentForPackage(YOUR_APP_PACKAGE_NAME);
startActivity(LaunchIntent);
}
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, 0, INTERVAL);
}
@Override
public void onDestroy(){
stopTask = true;
if (mWakeLock != null)
mWakeLock.release();
super.onDestroy();
}
@Override
public IBinder
onBind(Intent intent) {
// TODO
Auto-generated method stub
return null;
}
}
Chú ý String package phải đúng như gói ứng dụng của bạn.Khai báo service vào trong file AndroidManifest.xml, trên dòng </application> cuối cùng.
<service
android:name=".newse"
android:enabled="true"
android:exported="false"/>
Tại class cần duy
trì hiển thị, thêm các dòng sau lên trên ngoặc đóng dưới cùng.
@Override
public void
onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (!hasFocus) {
Intent intent = new Intent(this, newse.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startService(intent); }
}
}
Intent intent = new Intent(this, newse.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
stopService(intent);
Có thể chỉ cần thêm dòng stopService là được, có khi phải tạo hàm
để gọi.Tùy lúc dùng bạn thấy lúc nào cần gọi thì gọi, nói chung cần canh
3 nút back, home và menu là được. Cũng có thể chỉ dùng đoạn code trong lõi service.
final ActivityManager
activityManager=(ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo>
tasks = activityManager.getRunningAppProcesses();
String foregroundTaskPackageName = tasks.get(0).processName;
if(!foregroundTaskPackageName.equals(YOUR_APP_PACKAGE_NAME)) {
Intent LaunchIntent =
getPackageManager()
.getLaunchIntentForPackage(YOUR_APP_PACKAGE_NAME);
startActivity(LaunchIntent);
}
Tuy
nhiên khi dùng trực tiếp thế này nhiều khi nó không chạy!
No comments:
Post a Comment