Java Cordova插件停止/重新启动活动
我有一个Cordova插件,它使用了这个例子。我想在相机中禁用“后退”按钮 为了做到这一点,我相信片段不能接受后退按钮事件,所以我在插件中添加了一个活动。我可以成功运行插件,相机和活动,禁用后退按钮 但是,当我关闭插件时,会出现以下错误:Java Cordova插件停止/重新启动活动,java,android,cordova,cordova-plugins,Java,Android,Cordova,Cordova Plugins,我有一个Cordova插件,它使用了这个例子。我想在相机中禁用“后退”按钮 为了做到这一点,我相信片段不能接受后退按钮事件,所以我在插件中添加了一个活动。我可以成功运行插件,相机和活动,禁用后退按钮 但是,当我关闭插件时,会出现以下错误: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState java.lang.NullPointerException: Attempt to
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
java.lang.NullPointerException: Attempt to invoke interface method 'android.app.Activity org.apache.cordova.CordovaInterface.getActivity()' on a null object reference
为了解决这个问题,我使用了commitAllowingStateLoss
而不是commit
,但是当我第二次打开插件时,它会出现以下错误:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
java.lang.NullPointerException: Attempt to invoke interface method 'android.app.Activity org.apache.cordova.CordovaInterface.getActivity()' on a null object reference
我假定我没有正确地停止活动,并允许状态丢失,这会导致第二个错误。我该怎么做
我尝试过这种方法,但没有成功:
我已将代码放在此处的一个分支中:
添加更改的摘要:
plugin.xml
<config-file target="AndroidManifest.xml" parent="/manifest/application">
<activity android:name="com.example.android.camera2video.MediaCustomActivity" android:label="@string/activity_name" android:theme="@style/Theme.Transparent">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</config-file>
<source-file src="src/android/MediaCustom.java" target-dir="src/com/example/android/camera2video" />
<source-file src="src/android/MediaCustomActivity.java" target-dir="src/com/example/android/camera2video" />
<source-file src="src/android/Camera2VideoFragment.java" target-dir="src/com/example/android/camera2video" />
MediaCustomActivity.java
public static void start(Activity activity) {
Intent intent = new Intent(activity, MediaCustomActivity.class);
activity.startActivity(intent);
}
public static void stop(Activity activity) {
// what can we do here?
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.init();
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return false;
}
return super.onKeyDown(keyCode, event);
}