我正在開發一個適用於Android的Cordova插件,我很難克服從活動內部訪問項目資源 - 插件應該獨立於項目,但訪問資源(例如R.java)是證明棘手。Cordova plugin Android活動 - 訪問資源
我的插件目前由兩個非常簡單的類組成:RedLaser.java
和RedLaserScanner.java
。從CordovaPlugin
RedLaser.java
繼承等含有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活動邏輯和從BarcodeScanActivity(這是一個SDK的RedLaser類,大概是本身自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繼承。
有人可以幫我指點一下嗎?
感謝
你有沒有解決過這個問題? – mix3d 2015-05-27 20:21:21
我還沒有 - 但我幾個月沒看過這個問題。我將在接下來的幾周內調查它,所以我會告訴你! – keldar 2015-05-28 07:53:54
我剛剛使用了硬編碼應用程序的package.R導入的想法,因爲我現在有一個受控項目,但真正的解決方案會很好:D – mix3d 2015-05-28 14:39:48