今天我正在开发一个可以拦截活动之间启动的应用程序,我的关键代码是:
ActivityManagerNative.getDefault().setActivityController(new InterceptActivityController(), false);
private class InterceptActivityController extends IWeChatActivityController.Stub {
void InterceptActivityController() {}
@Override
public boolean activityStarting(Intent intent, String pkg) {
showDialog();
return false;
}
}
private void showBottomDialog() {
Log.d(TAG, "showBottomDialog");
Dialog bottomDialog = new Dialog(mContext);
View contentView = LayoutInflater.from(this).inflate(android.R.layout.simple_list_item_2, null);
bottomDialog.setContentView(contentView);
ViewGroup.LayoutParams layoutParams = contentView.getLayoutParams();
layoutParams.width = getResources().getDisplayMetrics().widthPixels;
contentView.setLayoutParams(layoutParams);
bottomDialog.getWindow().setGravity(Gravity.BOTTOM);
bottomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
bottomDialog.show();
}
我定义了一个Button,并计划在点击后启动一个Activity。但是现在我拦截了这个动作,只是在activityStarting的函数中显示一个对话框,然后返回false,在关闭这个对话框后,我再次单击该按钮,但没有任何效果,对话框不再显示,谁知道原因?也许我认为这是一个谷歌来源错误,但我不确定。
答案 0 :(得分:0)
您知道需要及时显示对话框。我的意思是你需要显示多长时间的对话?当你开始显示一个对话框并将其解除时,它没有被摧毁,它只是被解雇了。
请查看下面的代码。我在自己的应用程序中编写了这个,它是安全的。试一试,看看你是否满意:
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bottomDialog.show();
new Thread(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i <= 1200; i++) {
Thread.sleep(100); //The time it takes to update i
if (i = 1200) {
bottomDialog.dismiss();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
&#13;
您也可以使用AsyncTask。此外,我将整个事情放在Click Listener中,以显示它是如何使用的。
这个想法是定义一个显示对话时间