我正在开发 Android的Cordova插件,我很难克服从活动中访问项目资源 – 插件应该是项目独立的,但访问资源(例如R.java)证明是棘手的. 我的插件目前由两个非常简单的类组成:RedLaser.java和
我的插件目前由两个非常简单的类组成:RedLaser.java和RedLaserScanner.java.
RedLaser.java
继承自CordovaPlugin,因此包含execute方法,类似于以下内容.
public class RedLaser extends CordovaPlugin {
private static final string SCAN_ACTION = "scan";
public boolean execute(String action, final JSONArray args, final CallbackContext callbackContext) throws JSONException {
if (action.equals(SCAN_ACTION)) {
this.cordova.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
scan(args, callbackContext);
}
});
return true;
}
return false;
}
private void scan(JSONArray args, CallbackContext callbackContext) {
Intent intent = new Intent(this.cordova.getActivity().getApplicationContext(), RedLaserScanner.class);
this.cordova.startActivityForResult((CordovaPlugin) this, intent, 1);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Do something with the result
}
}
RedLaserScanner.java
RedLaserScanner包含Android Activity逻辑,并继承自BarcodeScanActivity(这是一个RedLaser SDK类,可能本身继承自Activity);
一个非常简单的结构如下:
public class RedLaserScanner extends BarcodeScanActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.preview_overlay_new_portrait);
}
}
我有麻烦,因为我需要访问项目的资源访问R.layout.preview_overlay_new_portrait(这是在Eclipse项目零星) – 但我不能这样做,除非我进口com.myProject.myApp.R – 这让我的插件已经对项目本身的依赖.
我做了一些调查,发现cordova.getActivity().getResources()似乎很有用,但是我无法从RedLaserScanner中访问 – 因为它不会从CordovaPlugin继承.
有人可以帮我指点一下吗?
谢谢
我刚遇到同样的问题,结果很容易解决. RedLaserScanner扩展了一个活动,所以你可以像这样调用getResources():setContentView(getResources("preview_overlay_new_portrait", "layout", getPackageName()));
