-
Notifications
You must be signed in to change notification settings - Fork 559
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Android WebViews documentation update #904
base: master
Are you sure you want to change the base?
Changes from 2 commits
6dc8836
a22eff8
7110826
177b713
3445588
2a3aeba
f390b41
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -38,97 +38,57 @@ legacy `CordovaActivity` component that pre-dates the 1.9 release. | |
[cordova.apache.org](http://cordova.apache.org) and unzip its | ||
Android package. | ||
|
||
1. Navigate to the Android package's `/framework` directory and run | ||
`ant jar`. It creates the Cordova `.jar` file, formed as | ||
`/framework/cordova-x.x.x.jar`. | ||
|
||
1. Copy the `.jar` file into the Android project's `/libs` directory. | ||
|
||
1. Add the following to the application's `/res/xml/main.xml` file, | ||
with the `layout_height`, `layout_width` and `id` modified to suit | ||
the application: | ||
|
||
<org.apache.cordova.CordovaWebView | ||
android:id="@+id/tutorialView" | ||
android:layout_width="match_parent" | ||
android:layout_height="match_parent" /> | ||
|
||
1. Modify the activity so that it implements the `CordovaInterface`. | ||
It should implement the included methods. You may wish to copy | ||
them from `/framework/src/org/apache/cordova/CordovaActivity.java`, | ||
or else implement them on your own. The following code fragment | ||
shows a basic application that relies on the interface. Note how | ||
the referenced view id matches the `id` attribute specified in the | ||
XML fragment shown above: | ||
|
||
public class CordovaViewTestActivity extends Activity implements CordovaInterface { | ||
CordovaWebView cwv; | ||
/* Called when the activity is first created. */ | ||
@Override | ||
public void onCreate(Bundle savedInstanceState) { | ||
super.onCreate(savedInstanceState); | ||
setContentView(R.layout.main); | ||
cwv = (CordovaWebView) findViewById(R.id.tutorialView); | ||
Config.init(this); | ||
cwv.loadUrl(Config.getStartUrl()); | ||
} | ||
|
||
1. If the application needs to use the camera, implement the | ||
following: | ||
|
||
@Override | ||
public void setActivityResultCallback(CordovaPlugin plugin) { | ||
this.activityResultCallback = plugin; | ||
} | ||
/** | ||
* Launch an activity for which you would like a result when it finished. When this activity exits, | ||
* your onActivityResult() method is called. | ||
* | ||
* @param command The command object | ||
* @param intent The intent to start | ||
* @param requestCode The request code that is passed to callback to identify the activity | ||
*/ | ||
public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) { | ||
this.activityResultCallback = command; | ||
this.activityResultKeepRunning = this.keepRunning; | ||
|
||
// If multitasking turned on, then disable it for activities that return results | ||
if (command != null) { | ||
this.keepRunning = false; | ||
} | ||
|
||
// Start activity | ||
super.startActivityForResult(intent, requestCode); | ||
} | ||
|
||
@Override | ||
/** | ||
* Called when an activity you launched exits, giving you the requestCode you started it with, | ||
* the resultCode it returned, and any additional data from it. | ||
* | ||
* @param requestCode The request code originally supplied to startActivityForResult(), | ||
* allowing you to identify who this result came from. | ||
* @param resultCode The integer result code returned by the child activity through its setResult(). | ||
* @param data An Intent, which can return result data to the caller (various data can be attached to Intent "extras"). | ||
*/ | ||
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { | ||
super.onActivityResult(requestCode, resultCode, intent); | ||
CordovaPlugin callback = this.activityResultCallback; | ||
if (callback != null) { | ||
callback.onActivityResult(requestCode, resultCode, intent); | ||
} | ||
} | ||
|
||
1. Finally, remember to add the thread pool, otherwise plugins | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What about this? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Again, not sure if this still applicable. I can look into this when I work on the plugin for the native-to-cordova-bridge |
||
have no threads on which to run: | ||
|
||
@Override | ||
public ExecutorService getThreadPool() { | ||
return threadPool; | ||
} | ||
1. Follow the instructions here to build your first cordova app [CreateYourFirstApp](https://cordova.apache.org/docs/en/8.x/guide/cli/index.html) | ||
martinhorvath marked this conversation as resolved.
Show resolved
Hide resolved
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why does one do that? Just to get the files to your harddisk from where you can copy them? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. My interpretation (and use case) was to embed a cordova app into another Android app that was developed with native code. As this is a getting started documentation, I assumed it's a good starting point to build a first app. Everyone having a working cordova app by hand will obviously skip the step. Does this make sense? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Almost. What do you need the Cordova app for when actually embedding the Cordova Android webview in the native app? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. One of my customers has the requirement to develop two native apps within a larger project. He also needs to have geospatial capabilities (like Google maps) but without the restrictions of the popular SDK's provided by Mapbox, Google,... The organization that will be offering the apps has licenses for the "Hexagon Mapworks SDK". But this is more a ready-to-use app than a SDK so I needed to run it within the native target app. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ok, I get that. You have a native app and want a Cordova webview inside that can run a web app. My question is more about this process you describe here: Why do you need an actual Cordova app created with There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What I've seen and learned is that the cordova build applies some magic to the html sources when copying them into the platform(s). I didn't look into this further but without a build for android, no assets/www sources are available. So the scenario(s) are two different ones:
With two different starting points, it's quite difficult to described it in general :-) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yep - I have never build an app that uses Cordova in that way at all, that's why I am asking such dumb questions. |
||
|
||
1. Copy Cordova framework files | ||
``` | ||
martinhorvath marked this conversation as resolved.
Show resolved
Hide resolved
martinhorvath marked this conversation as resolved.
Show resolved
Hide resolved
|
||
platforms/android/CordovaLib/src/.* to <AndroidAppRoot>/app/main/java | ||
martinhorvath marked this conversation as resolved.
Show resolved
Hide resolved
|
||
platforms/android/src/** to <AndroidAppRoot>/app/main/java | ||
martinhorvath marked this conversation as resolved.
Show resolved
Hide resolved
|
||
``` | ||
martinhorvath marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
1. Modify the layout file of the activity that shall host the Cordova view e.g. | ||
``` | ||
<LinearLayout android:layout_width="fill_parent" | ||
android:layout_height="fill_parent" | ||
android:orientation="vertical" | ||
xmlns:android="http://schemas.android.com/apk/res/android"> | ||
<org.apache.cordova.engine.SystemWebView | ||
android:id="@+id/cordovaWebView" | ||
android:layout_width="match_parent" | ||
android:layout_height="match_parent" /> | ||
</LinearLayout | ||
``` | ||
1. Modify your activity so that the class extends CordovaActivity (found at app/main/java/org/apache/....CordovaActivity.java) | ||
martinhorvath marked this conversation as resolved.
Show resolved
Hide resolved
|
||
``` | ||
public class TestActivity extends CordovaActivity { | ||
|
||
} | ||
``` | ||
|
||
1. Override onCreate, makeWebView and createViews to use your defined layout | ||
martinhorvath marked this conversation as resolved.
Show resolved
Hide resolved
|
||
``` | ||
@Override | ||
public void onCreate(Bundle savedInstanceState) { | ||
super.onCreate(savedInstanceState); | ||
setContentView(R.layout.activity_test); //this is the layout file for your activity | ||
martinhorvath marked this conversation as resolved.
Show resolved
Hide resolved
|
||
super.init(); | ||
loadUrl(launchUrl); | ||
} | ||
|
||
@Override | ||
protected CordovaWebView makeWebView() { | ||
SystemWebView appView = (SystemWebView) findViewById(R.id.cordovaWebView); //this is the id for the SystemWebView in step 4 | ||
martinhorvath marked this conversation as resolved.
Show resolved
Hide resolved
|
||
return new CordovaWebViewImpl(new SystemWebViewEngine(appView)); | ||
} | ||
|
||
@Override | ||
protected void createViews() { | ||
// leave empty so the layout is used | ||
} | ||
``` | ||
|
||
1. Copy the application's HTML and JavaScript files to the Android | ||
project's `/assets/www` directory. | ||
|
||
1. Copy the `config.xml` file from `/framework/res/xml` to the | ||
1. Copy the `config.xml` file from `/res/xml` to the | ||
project's `/res/xml` directory. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this still apply?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Config.getStartUrl() is marked as deprecated and has changed. I didn't touch the camera but assume it has changed as well.