我們都知道service是沒有界面的,默默的在後臺執行邏輯代碼,有時候需要和前臺有所交互,如:toast或彈出提示框等等
在service中彈出toast很簡單,只要使用handler就可搞定,代碼如下
1 2 3 4 5 6 |
hanlder.post(new Runnable() {
@Override
public void run() {
Toast.makeText(DialogService.this, "啓動服務", 1).show();
}
});
|
而在service中彈出dialog時,如果寫和activity同樣的代碼時會報錯
因爲這個dialog的顯示是需要依附於一個activity,如果需要在servcie中顯示需要把dialog設置成一個系統的dialog,即全局性質的提示框,所以只要手機處於開機狀態,無論它現在處於何種界面之下,只要調用alter.show(),就會彈出提示框來。需要在show() 調用之前添加以下代碼:
1 |
dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));
|
注意:使用系統的Dialog需要在清單文件中添加權限,否則不會顯示出來
android.permission.SYSTEM_ALERT_WINDOW
全部代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setMessage("該下車了");
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setPositiveButton("確定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
final AlertDialog dialog = builder.create();
**//在dialog show方法之前添加如下代碼,表示該dialog是一個系統的dialog**
dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));
new Thread(){
public void run() {
SystemClock.sleep(4000);
hanlder.post(new Runnable() {
@Override
public void run() {
dialog.show();
}
});
};
}.start();
}
|
聲明:eoe文章著作權屬於作者,受法律保護,轉載時請務必以超鏈接形式附帶如下信息
原文作者: 皇馬船長