Ta muốn ứng dụng
của mình hiện một view, chữ hoặc ảnh lên trên màn hình khóa, và làm sao để sau
khi mở khóa nó mất đi. Nếu người dùng không để chế độ khóa thì view đó sẽ không
hiển thị. Ta dùng Broadcast để lắng nghe các action của người dùng.
Hãy tạo một
service bất kỳ, khai báo vào file Manifest.
<service
android:name=".myservice"
android:enabled="true"
android:exported="false"
/>
Khai báo trên đầu
service.
private WindowManager wm;
WindowManager.LayoutParams myParams;
TextView mView;
int dem=0;
static IntentFilter s_intentFilter = new IntentFilter();
static {
s_intentFilter.addAction(Intent.ACTION_SCREEN_ON);
s_intentFilter.addAction(Intent.ACTION_USER_PRESENT);
}
Copy vào trong
onCreate()
registerReceiver(ti, s_intentFilter);
mView = new TextView(this);
mView.setText(" Đây là
chữ ví dụ ");
mView.setTextColor(Color.parseColor("#ffffff"));
mView.setGravity(Gravity.CENTER);
mView.setTextSize((float) 13.7);
mView.setTypeface(null, Typeface.BOLD);
wm = (WindowManager) getSystemService(WINDOW_SERVICE);
myParams = new
WindowManager.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
|
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
/* |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */,
PixelFormat.RGBA_8888);
myParams.gravity = Gravity.TOP | Gravity.CENTER_VERTICAL;
myParams.x = 0;
myParams.y = 50;
myParams.setTitle("Load
Average");
Copy hàm ti ra
ngoài onCreate()
private final
BroadcastReceiver ti = new BroadcastReceiver() {
@Override
public void
onReceive(Context context, Intent intent) {
final String action = intent.getAction();
KeyguardManager myKM =
(KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
if(action.equals(Intent.ACTION_USER_PRESENT) ){
if (dem==1){
wm.removeView(mView);
dem=0;
}
}
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
if( myKM.inKeyguardRestrictedInputMode())
{
if ( dem==0){
wm.addView(mView, myParams);
dem=1;
}
}
}
}
};
Thêm quyền vào
file Manifest.
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"
/>
Thêm đoạn sau để
hủy.
@Override
protected void onDestroy() {
unregisterReceiver(ti);
super.onDestroy();
}
Tại class Main để
bật service ta dùng đoạn này.
Intent intent = new Intent(this, myservice.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startService(intent);
No comments:
Post a Comment