我製作了一個帶有按鈕(用於掃描)和webview組件的android應用程序。 如果button_scan被按下,它將執行startActivityForResult來調用活動zxing來掃描條形碼和QR碼。 zxing完成後,我編寫onActivityResult來處理數據。不同的版本,當onActivityResult調用時無法恢復活動
此應用在Android V2.2.2上運行良好,直到現在,並沒有發生異常。
但是,如果此應用運行在Android V2.3或V4.0.4上,它將會拋出一個異常(java.lang.RuntimeException:無法恢復活動)。 當調用onActivityResult時會發生此異常。
我打印了全局變量(CURRENTWEBPAGE)進行測試,發現在調用startActivityForResult之前,CURRENTWEBPAGE有值,但在調用onActivityResult之後CURRENTWEBPAGE爲空。
我很好奇在這種情況下android的版本是否重要。 是否所有的全球成員都被清除?
任何碰過這種情況的人都可以給我一個解決方案來解決這個問題嗎?
如果您需要更多信息,請隨時告訴我。
您的回覆將不勝感激。
以下是我的應用程序代碼。
public class MyApp extends Activity
{
private String CURRENTWEBPAGE;//which will be set value whenvever webview changed.
private WebView webView_main;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
initActivity_web();
...
...
}
public void initActivity_web()
{
// add Listener to button_SCAN
((Button) findViewById(R.id.button_SCAN)).setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0)
{
try
{
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
Log.d(this.getClass().getName(),CURRENTWEBPAGE);
// CURRENTWEBPAGE has value here.
startActivityForResult(intent, 0);
}
catch (android.content.ActivityNotFoundException ex)
{
Toast popup = Toast.makeText(NEOMove.this, "Please install Zxing Barcode Scanner", Toast.LENGTH_SHORT);
popup.show();
}
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent)
{
super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == 0)
{
if (resultCode == RESULT_OK)
{
String QRCodeContent = intent.getStringExtra("SCAN_RESULT");
String newURL = convertToLCMOBILESUPPORTActionUrl(CURRENTWEBPAGE);//exception occur
//because CURRENTWEBPAGE = null;
//java.lang.RuntimeException: Unable to resume activity
webView_main.loadUrl(newURL + QRCodeContent);
}
else if (resultCode == RESULT_CANCELED)
{
// TODO Handle cancel
}
}
}
}
添加 - 2012年9月20日
嗨,我 發現,父應用程序(我的應用程序)的OnCreate將onActivityResult之前被調用。 儘管將這些變量保留在SharedPreferences中,MyApp的webview將使用新的會話ID重新創建。 這對我來說不起作用,因爲在掃描條形碼之後,我需要發送一個具有登錄到被銷燬的webview緩存中的權限的請求。 有沒有辦法讓父應用程序不被銷燬?
以下是我的AndroidManifest.xml。
<activity
android:name=".MyApp"
android:configChanges="orientation|keyboard"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>