当前位置 : 主页 > 手机开发 > cordova >

Cordova插件Android Activity – 访问资源

来源:互联网 收集:自由互联 发布时间:2021-06-10
我正在开发 Android的Cordova插件,我很难克服从活动中访问项目资源 – 插件应该是项目独立的,但访问资源(例如R.java)证明是棘手的. 我的插件目前由两个非常简单的类组成:RedLaser.java和
我正在开发 Android的Cordova插件,我很难克服从活动中访问项目资源 – 插件应该是项目独立的,但访问资源(例如R.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()));
网友评论