Saturday, December 29, 2018

Kiểm tra xem màn hình điện thoại có phải là home không



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.

<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