自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

WebView項目中PhoneGap插件使用細節(jié)

移動開發(fā)
WebView項目中PhoneGap插件使用細節(jié)是本文要介紹的內(nèi)容,主要是來了解PhoneGap插件的用法,具體內(nèi)容來看本文詳解。

WebView項目中PhoneGap插件使用細節(jié)是本文要介紹的內(nèi)容,主要是來了解PhoneGap插件的用法,作過android開發(fā)的對于startActivityForResult這個方法的調(diào)用,應(yīng)該不會陌生。

它就像是javascript中的模式對話模式,可以在彈出的新頁面中,讓用戶進行操作,并把結(jié)果回傳到所調(diào)用頁面。當然在android中的實現(xiàn),是有所差異。

在實現(xiàn)項目中,使用有PhoneGap插件,來作webview應(yīng)用的開發(fā)。

當直接使startActivityForResult(intent,requestcode)這個方法,會提示PhoneGap出錯,

  1. PhoneGapException:CallstartActivityForResult(Command,Intent)instead. 

看源碼,建設(shè)調(diào)用使用startActivityForResult(intent,-1).這樣寫的話,達不到“模式對話框”的目的。

源碼中還有另一個PhoneGap擴展的方法:

  1. publicvoidstartActivityForResult(Plugincommand,Intentintent,intrequestCode) 

,一開始也沒管那么多,直接就調(diào)這個,那個Plugincommand的參數(shù),因為我是主程序調(diào)用的,所以很自然的就直接置為null.

測試正常,調(diào)用、回調(diào)都正常。以后沒事了

項目運行一段時間后,發(fā)覺以前從插件發(fā)起的startActivityForResult都無法正?;卣{(diào)了。也就是插件里面定義的onActivityResult都沒有被調(diào)到,跟蹤發(fā)現(xiàn),所有的回調(diào)都被主程序的onActivity給攔截了。

分析以下代碼可以看出PhoneGap插件中,onActivityResult如何與對應(yīng)插件相綁定,以及產(chǎn)生上述問題的原因:

Java代碼

  1. publicvoidstartActivityForResult(Plugincommand,Intentintent,intrequestCode){  
  2.  
  3. this.activityResultCallback=command;  
  4.  
  5. thisthisthis.activityResultKeepRunning=this.keepRunning;  
  6.  
  7. //Ifmultitaskingturnedon,thendisableitforactivitiesthatreturnresults  
  8.  
  9. if(command!=null){  
  10.  
  11. this.keepRunning=false;  
  12.  
  13. }  
  14.  
  15. //Startactivity  
  16.  
  17. super.startActivityForResult(intent,requestCode);  
  18.  
  19. }  
  20.  
  21. protectedvoidonActivityResult(intrequestCode,intresultCode,Intentintent){  
  22.  
  23. super.onActivityResult(requestCode,resultCode,intent);  
  24.  
  25. Plugincallback=this.activityResultCallback;  
  26.  
  27. if(callback!=null){  
  28.  
  29. callback.onActivityResult(requestCode,resultCode,intent);  
  30.  
  31. }  
  32.  
  33. }  
  34.  
  35. publicvoidstartActivityForResult(Plugincommand,Intentintent,intrequestCode){  
  36.  
  37. this.activityResultCallback=command;  
  38.  
  39. thisthisthis.activityResultKeepRunning=this.keepRunning;  
  40.  
  41. //Ifmultitaskingturnedon,thendisableitforactivitiesthatreturnresults  
  42.  
  43. if(command!=null){  
  44.  
  45. this.keepRunning=false;  
  46.  
  47. }  
  48.  
  49. //Startactivity  
  50.  
  51. super.startActivityForResult(intent,requestCode);  
  52.  
  53. }  
  54.  
  55. protectedvoidonActivityResult(intrequestCode,intresultCode,Intentintent){  
  56.  
  57. super.onActivityResult(requestCode,resultCode,intent);  
  58.  
  59. Plugincallback=this.activityResultCallback;  
  60.  
  61. if(callback!=null){  
  62.  
  63. callback.onActivityResult(requestCode,resultCode,intent);  
  64.  
  65. }  
  66.  

看來想在主程序(繼承GapDroid)中使用startActivityForResult方法,只能采用綁定插件的辦法了。

分析過程是相當無聊。只列出來解決辦法,希望有更好處理的同仁,給予回復(fù):

在主程序中定義一個空的插件,所有需要用到startActivityForResult的場合,都使用這個空的插件來作為***參數(shù)。并在空插件中覆蓋onActivityResult方法(里面可以是直接訪問、調(diào)用主程序的代碼)。

Java代碼

  1. /**  
  2. *自定義一個空的插件,僅為完成原DroidGap中的事件處理邏輯  
  3. */  
  4. classEmptyPluginextendsPlugin{  
  5. @Override  
  6. publicPluginResultexecute(Stringaction,JSONArrayargs,  
  7. StringcallbackId){  
  8. //TODOAuto-generatedmethodstub  
  9. returnnull;  
  10. }  
  11. @Override  
  12. publicvoidonActivityResult(intrequestCode,intresultCode,  
  13. Intentintent){  
  14. //TODOAuto-generatedmethodstub  
  15. if(resultCode==RESULT_OK){  
  16. if(requestCode==SETTING_CODE){  
  17. ........................................自己的處理代碼............  
  18. }  
  19. }  
  20. }  
  21. }  
  22. /**  
  23. *自定義一個空的插件,僅為完成原DroidGap中的事件處理邏輯  
  24. */  
  25. classEmptyPluginextendsPlugin{  
  26. @Override  
  27. publicPluginResultexecute(Stringaction,JSONArrayargs,  
  28. StringcallbackId){  
  29. //TODOAuto-generatedmethodstub  
  30. returnnull;  
  31. }  
  32. @Override  
  33. publicvoidonActivityResult(intrequestCode,intresultCode,  
  34. Intentintent){  
  35. //TODOAuto-generatedmethodstub  
  36. if(resultCode==RESULT_OK){  
  37. if(requestCode==SETTING_CODE){  
  38. ........................................自己的處理代碼............  
  39. }  
  40. }  
  41. }  

Java代碼

  1. privatefinalEmptyPluginep=newEmptyPlugin();  
  2. privatefinalEmptyPluginep=newEmptyPlugin(); 

Java代碼

  1. startActivityForResult(ep,intent,111111); 

小結(jié):WebView項目中PhoneGap插件使用細節(jié)startActivityForResult的內(nèi)容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-09-13 09:49:59

PhoneGap插件

2011-10-11 10:06:12

PhoneGap插件

2011-12-19 08:57:46

PhoneGapNativeContr

2011-12-23 10:02:37

PhoneGapAndroid插件

2012-03-07 11:17:19

AndroidPhoneGap插件

2011-09-02 13:38:56

PhoneGap插件Android

2009-06-24 17:34:58

使用JSF的經(jīng)驗

2024-10-17 08:58:31

2020-10-27 14:15:42

SpringBoot

2014-07-04 09:43:22

2023-11-30 09:00:00

TypeScript開發(fā)

2012-03-07 11:23:09

PhoneGapAndroid代碼交互

2009-06-29 15:51:48

Spring容器

2019-03-25 10:30:19

開發(fā)技能代碼

2024-04-03 09:03:05

項目分支管理

2017-07-04 19:02:17

ReacRedux 項目

2024-05-24 10:01:12

2021-08-23 10:40:30

人工智能KubernetesAI

2015-11-05 11:47:37

圖片統(tǒng)計項目開發(fā)技術(shù)

2023-10-27 10:16:17

前端項目Rust
點贊
收藏

51CTO技術(shù)棧公眾號