MUI这套H5应用框架非常值得肯定, 但也许它的应用少有涉及工业,activity一旦发生usb外接输入设备(如扫描枪)的排插就会导致重启, 这对于用家来讲是个不好的体现, 这个问题我已经在dcloud上反映过, https://ask.dcloud.net.cn/question/81362, 后来在群里有个小哥可能认识mui公司的人才有人理会解决, 但回复说要等hbuildx版本升级才行.
为了不影响进度, 经过若干试验,发现原来的主Activity为PandoraEntryActivity, 那么我新建一个MyMainActivity extends它并在activity的configChanges里面加上 keyboard即可:
android:configChanges="orientation|keyboardHidden|keyboard|navigation"
新开一个MainActivity的好处还有, 可以在app启动的时候开自己的后台服务, app结束的时候打扫现场.
原app并不是一开始就以PandoraEntryActivity为启动activity,而是由一个临时的activity启动, 根据传入的参数is_stream_app加以判断,从而启动WebAppActivity或PandoraEntryActivity,为了完美接入, 也写了一个启动activity,在原本启动PandoraEntryActivity的地方换成MyMainActivity.
/*** com.freestyle.android.h5plugin Created by rocklee , 2019/3/8 ***/ public class MyStartActivity extends Activity { @Override protected void onCreate(Bundle var1) { super.onCreate(var1); Intent var2 = this.getIntent(); boolean var3 = false; try { var3 = var2.getBooleanExtra("is_stream_app", var3); } catch (Exception var5) { var5.printStackTrace(); this.finish(); return; } if (var3) { var2.setClass(this, WebAppActivity.class); var2.putExtra("is_stream_app", true); } else { var2.putExtra("short_cut_class_name", PandoraEntry.class.getName()); var2.setClass(this, MyMainActivity.class); } this.startActivity(var2); (new Handler()).postDelayed(new Runnable() { public void run() { MyStartActivity.this.finish(); } }, 20L); } }最后贴上MyMainActivity的代码
/*** com.freestyle.android.h5plugin Created by rocklee , 2019/11/1 ***/ public class MyMainActivity extends PandoraEntryActivity { //private Bridge mBridge; private Handler mUIHandler; @Override protected void onStart(){ super.onStart(); mUIHandler.postDelayed(()->{ WebView.setWebContentsDebuggingEnabled(true); },3000); } private void patchApplication(){ } @Override public void onDestroy(){ FRPlugins.quit(); super.onDestroy(); } @Override public void onCreate(Bundle var1) { super.onCreate(var1); patchApplication(); mUIHandler=new Handler(getMainLooper()); //mBridge=new Bridge(this); FRPlugins.init(this); Config.init(this); } }