Take as example the usage of a native third party library that allow you to customize a label. With Java, the method to customize the label doesn't expect a string as value, instead it expects a number (
1. Create your resources file
In this example, we are going to create a new xml file in the Android folder of your plugin (
yourplugin/src/android) with the name
"StringsFoo.xml", this will have a string resource identified with the name
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="welcome_message">Hello, welcome</string> </resources>
2. Register your resources file
Now, modify the
plugin.xml file in your plugin and add a new resource file with the
<resource-file> tag (note that the path to the file can vary according to your needs):
Do not give as name of the file
strings.xml as this file already exists in any project and if it's overwritten, the cordova project won't work as it contains some important values as the app name.
<?xml version="1.0" encoding="utf-8"?> <plugin xmlns="http://www.phonegap.com/ns/plugins/1.0" id="com.blablabla.bla" version="1.0.0"> <name>Your Plugin Name</name> <!-- Add a new resource file from the plugin to the project In your plugin development, its located in /yourplugin/src/android/StringsFoo.xml and it will be added to the res/values folder of your Android Application --> <platform name="android"> <resource-file src="src/android/StringsFoo.xml" target="res/values/StringsFoo.xml" /> </platform> </plugin>
Theoretically, once you install the plugin in a Cordova project, it will succesfully add the new resource to the project.
3. Retrieve resource value in Java
As you may know (maybe not) at build time, the aapt tool collects all of the resources you have defined (though separate files or explicit definitions in files) and assigns resource IDs to them (if you use third party libraries, they allow you to customize some values like labels but they expect the ID as argument, not the string itself). A resource ID is a 32 bit number of the form: PPTTNNNN. PP is the package the resource is for; TT is the type of the resource; NNNN is the name of the resource in that type. For applications resources, PP is always 0x7f.
The algorithm to retrieve the ID of a resource is to use the activity, from the activity retrieve the resources and then use the getIdentifier method that expects as first argument the name of the resource, as second the type (in this case string) and as third argument the package name of the application. That would be in your main class of the plugin that extends CordovaPlugin like:
// The name of the string resource String name = "welcome_message"; // Retrieve the identifier (in this case the number is 2131165238 that obviously changes in your project) int identifier = cordova.getActivity().getResources().getIdentifier(name, "string", cordova.getActivity().getPackageName());
However, if you're not working with a third party library that requires the ID of your resource, probably this number is not useful for you, but the string. To retrieve the string resource with name
"welcome_message" convert the identifier to string using the following code:
String name = "welcome_message"; // Hello, welcome String resource_text = cordova.getActivity().getString(cordova.getActivity().getResources().getIdentifier( name, "string", cordova.getActivity().getPackageName()));
From the activity use the
getString method that expects as first argument the identifier of the resource. By changing the type (second parameter of the
getIdentifier method) you can retrieve another type of resources like
layout etc but don't forget neither to change the getter method to the correct type (if you get a boolean, use
getBoolean instead of
If you are working with cordova, but you're working in another activity (some activity that doesn't extend cordova) then you can use the same code but replace the
cordova.getActivity with the
activity that you're working with.
Happy coding !