Closed don closed 10 years ago
Yep, definitely sounds the same issue I was experiencing.
Although I am not sure whether to put onload=true in plugin.xml really is the right solution in general. If you want your app to be started on the first tap it is the only solution. If you open your app then you can call some method of phonegap-nfc and the plugin is initialized and you do not have this problem. A plugin that needs to react to intent filters on Android needs onload=true. A plugin that needs to react to e.g. a file being opened on IOS needs onload=true because the plugin needs to register itself for this event.
This not related to phonegap-nfc only. All plugins that need OS-Events currently need onload=true.
But what Cordova is missing is a way for a plugin to express this: I want to get OS-Events (like onNewIntent on Android) but I do not need to be loaded on startup.
Each line in PluginManager.java like this “if (entry.plugin != null) {” https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/PluginManager.java#L307 currently prevents an OS-Event to be propagated to a plugin. The only way to get the event is to set “onload=true” or use a plugin method (thus creating a plugin instance).
But if the plugin only needs to get events after the app is started (like e.g. reading an NFC tag through the app) then creating the plugin instance is wasting startup time and memory resources.
I suggest to have <feature…>
and change all the line in PluginManager from
“if (entry.plugin != null) {”
to
“if (entry.plugin != null || (entry.osevent==true && entry.createPlugin(this.app, this.ctx)!=null)) {”
Changing https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/PluginEntry.java and the parser in PluginManager is simple… https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/PluginManager.java#L147
Although this new osevent param would need support in all platforms and docs and tests. Not a half-hour project…
Have fun Axel
From: Don Coleman [mailto:notifications@github.com] Sent: Saturday, November 16, 2013 5:37 PM To: chariotsolutions/phonegap-nfc Cc: AxelNennker Subject: [phonegap-nfc] Add onload for android (#105)
See @AxelNennkerhttps://github.com/AxelNennker doc updates https://github.com/apache/cordova-docs/pull/154/files
Might fix #99https://github.com/chariotsolutions/phonegap-nfc/issues/99?
— Reply to this email directly or view it on GitHubhttps://github.com/chariotsolutions/phonegap-nfc/issues/105.
I don't see the difference between osevent and onload since the end result is that the plugin gets created on startup ?
On Sun, Nov 17, 2013 at 8:20 AM, Axel.Nennker@telekom.de wrote:
Yep, definitely sounds the same issue I was experiencing.
Although I am not sure whether to put onload=true in plugin.xml really is the right solution in general.
If you want your app to be started on the first tap it is the only solution.
If you open your app then you can call some method of phonegap-nfc and the plugin is initialized and you do not have this problem.
A plugin that needs to react to intent filters on Android needs onload=true.
A plugin that needs to react to e.g. a file being opened on IOS needs onload=true because the plugin needs to register itself for this event.
This not related to phonegap-nfc only. All plugins that need OS-Events currently need onload=true.
But what Cordova is missing is a way for a plugin to express this: I want to get OS-Events (like onNewIntent on Android) but I do not need to be loaded on startup.
Each line in PluginManager.java like this “if (entry.plugin != null) {”
currently prevents an OS-Event to be propagated to a plugin.
The only way to get the event is to set “onload=true” or use a plugin method (thus creating a plugin instance).
But if the plugin only needs to get events after the app is started (like e.g. reading an NFC tag through the app) then creating the plugin instance is wasting startup time and memory resources.
I suggest to have
<feature…>
and change all the line in PluginManager from
“if (entry.plugin != null) {”
to
“if (entry.plugin != null || (entry.osevent==true && entry.createPlugin(this.app, this.ctx)!=null)) {”
Changing
and the parser in PluginManager is simple…
Although this new osevent param would need support in all platforms and docs and tests. Not a half-hour project…
Have fun
Axel
From: Don Coleman [mailto:notifications@github.com] Sent: Saturday, November 16, 2013 5:37 PM To: chariotsolutions/phonegap-nfc Cc: AxelNennker Subject: [phonegap-nfc] Add onload for android (#105)
See @AxelNennker https://github.com/AxelNennker doc updates https://github.com/apache/cordova-docs/pull/154/files
Might fix #99 https://github.com/chariotsolutions/phonegap-nfc/issues/99 ?
— Reply to this email directly or view it on GitHubhttps://github.com/chariotsolutions/phonegap-nfc/issues/105 .[image: Description: Image removed by sender.]
See @AxelNennker doc updates https://github.com/apache/cordova-docs/pull/154/files
Might fix #99?