Android TV開發過程中通過接收開機廣播等實現各種提示彈窗的需求非常多,當然也可以是其他任何廣播,任何詭異的需求,你懂的...
以下內容僅是個人開發經驗,歡迎指正~*
- 方法一:
public class LoginBroadCastReceiver extends BroadcastReceiver{
@Override
public void onReceive(final Context context, Intent intent){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("下線通知");
builder.setMessage("你的賬號在其他地方登錄!");
builder.setCancelable(false);
builder.setPositiveButton("重新登錄", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which){
ActivityCollector.finishAll();
Intent intent = new Intent(context, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //在廣播接受者中啟動活動需要添加這個標志
context.startActivity(intent);
}
});
AlertDialog dialog = builder.create();
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); //需要設置AlertDialog的類型,保證在廣播接收者中可以正常彈出
dialog.show();
}
}
彈窗權限:
<uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW" />
-
方法二:
正常彈出AlertDialog的流程如下:
new AlertDialog.Builder(context).setTitle("在BroadcastReceiver里彈出AlertDialog").show();
但是其實AlertDialog似乎只能在activity中彈出為了解決在BroadcastReceiver里彈出AlertDialog這個問題,我們可以這樣做:
AlertDialog alertDialog=new AlertDialog.Builder(context).create();
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alertDialog.show();
需要注意的時候,最后還要在androidManifest.xml文件中加入以下兩句話:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/>
謹以作為開發記錄,如果有幫到您,記得點贊哦