Có những ứng dụng
ta chỉ hiển thị view nào đó ở màn hình home, khi có ứng dụng khác bật lên thì
nó sẽ ẩn đi. Để làm điều này ta cần biết màn hình hiện tại có phải là home hay
không.
Ta sẽ tạo một
service, trong đó đặt alarm để kiểm tra cứ 5 giây một lần, nếu ứng dụng trên
top là có đuôi tên là launcher, ta biết đó là màn hình home.
Khai báo lên trên
đầu service
int ra=0;
PendingIntent pi;
BroadcastReceiver br;
AlarmManager am;
Copy hàm sau vào
trên ngoặc đóng cuối cùng.
private void setup() {
br = new
BroadcastReceiver() {
@Override
public void
onReceive(Context c, Intent i) {
ActivityManager am = (ActivityManager)getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
String t = am.getRunningTasks(1).get(0).topActivity.getPackageName();
int d = t.length();
String duoi = t.substring(d-8, d);
if(duoi.equals("launcher")){
if(ra==1){
wm.addView(mView, myParams);
ra=0;
}
}
else{
if(ra==0){
((WindowManager)
getSystemService(WINDOW_SERVICE))
.removeView(mView);
ra=1;
}
}
}
}
};
registerReceiver(br, new IntentFilter("com.example.vidu"));
pi =
PendingIntent.getBroadcast(this, 0, new Intent("com.example.vide"),0);
am = (AlarmManager)
(this.getSystemService(Context.ALARM_SERVICE));
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(),
5000, pi);
}
Thêm các dòng sau
để hủy.
@Override
public void onDestroy() {
super.onDestroy();
am.cancel(pi);
unregisterReceiver(br);
}
Gọi hàm setup() ở trong onCreate();
Trong đó có View của ta cần ẩn hiện tên là mView.
Thêm permission vào file manifest.xml.
Thêm permission vào file manifest.xml.
<uses-permission android:name="android.permission.GET_TASKS"
/>
Cách này dùng được nhưng có vấn đề là alarm cứ 5 giây
lại check một lần nên rất tốn pin. Để tránh tốn pin mà vẫn ẩn được view ra sau
màn hình ứng dụng mới mở, ta có thể dùng handler để làm.
No comments:
Post a Comment