我正在开发 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()));