Cordova Android 插件 - 从 Cordova 插件打开一个 android 原生活动

Posted

技术标签:

【中文标题】Cordova Android 插件 - 从 Cordova 插件打开一个 android 原生活动【英文标题】:Cordova Android Plugin - open an android native activity from Cordova Plugin 【发布时间】:2015-03-13 04:55:08 【问题描述】:

我的要求是从 Cordova 插件打开一个 android 原生的简单活动。

我尝试了this thread 中提到的解决方案。但我收到错误(示例应用程序,不幸停止)

这几天我快疯了。

这是我的代码 (Hello.java)。

package com.example.sample;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaWebView;
import org.json.JSONArray;
import org.json.JSONException;
import com.example.sample.MainActivity;

public class Hello extends CordovaPlugin

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext)
    
       if (action.equals("greet")) 
        
            Context context=this.cordova.getActivity().getApplicationContext();
            Intent intent=new Intent(context,MainActivity.class);
            context.startActivity(intent);
            return true;
        
        else
        
            return false;
        
    

MainActivity.java

package com.example.sample;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    

插件.xml

<?xml version="1.0" encoding="utf-8"?>
<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
        id="com.example.sample"
        version="0.7.0">

  <name>Hello</name>

  <engines>
    <engine name="cordova" version=">=3.4.0"/>
  </engines>

  <asset src="www/hello.js" target="js/hello.js"/>

  <js-module src="www/hello.js" name="hello">
    <clobbers target="hello" />
  </js-module>

  <platform name="android">

    <config-file target="res/xml/config.xml" parent="/*">
      <feature name="Hello">
        <param name="android-package" value="com.example.sample.Hello"/>
      </feature>
    </config-file>
    <source-file src="src/android/src/com/example/sample/Hello.java" target-dir="src/com/example/sample/"/>
    <source-file src="src/android/src/com/example/sample/MainActivity.java" target-dir="src/com/example/sample/"/>
    <source-file src="src/android/src/com/example/sample/R.java" target-dir="src/com/example/sample/"/>
  </platform>

</plugin>

注意: 当我在调试模式下查看设备中的日志时,似乎没有找到 MainActivity.java 任何人都可以帮我解决这个问题,任何用于打开原生 android 活动的示例 Cordova 插件都会对我有所帮助。

【问题讨论】:

AndroidManfist 文件在哪里? 您正在启动Next_Activity 但未添加到Plugin.xml 中?使用MainActivity 而不是Next_Activity 对不起,我看不到你的 AndroidManifest.xml 这是我的AndroidManifest.xml 【参考方案1】:

opennative.js

cordova.define("com.example.opennative.OpenNative", function(require, exports, module)  

function OpenNative() 
;

OpenNative.prototype.open = function(callbackContext) 
    callbackContext = callbackContext || ;
    cordova.exec(callbackContext.success || null, callbackContext.error || null, "OpenNative", "open", []);

;

/**
 * Load Plugin
 */

if(!window.plugins) 
    window.plugins = ;

if (!window.plugins.openNative) 
    window.plugins.openNative = new OpenNative();


);

OpenNative.java

public class OpenNative extends CordovaPlugin 

    /**
     * Executes the request and returns a boolean.
     * 
     * @param action
     *            The action to execute.
     * @param args
     *            JSONArry of arguments for the plugin.
     * @param callbackContext
     *            The callback context used when calling back into javascript.
     * @return boolean.
     */
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException 
                if (action.equals("open")) 
                        try 
                            openN();
                         catch (IOException e) 
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        
                    
                    else 
                    
                    return true;
            
            private void openN() throws IOException 

                intent = new Intent(this.cordova.getActivity().getApplicationContext(), Second.class);

                this.cordova.getActivity().startActivityForResult(intent,0);
                this.cordova.getActivity().startActivity(intent);
                this.cordova.getActivity().overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
            

        

cordova_plugin.js

   
        "file": "plugins/com.example.opennative/www/fileOpener.js",
        "id": "com.example.opennative.OpenNative",
        "clobbers": [
            "openNative.open"
        ]
    

config.xml:

 <feature name="OpenNative">
        <param name="android-package" value="com.example.opennative.OpenNative" />
    </feature>

这里 com.example.opennative 是包名,OpenNative 是文件名

在你的 js 中调用使用 window.plugins.openNative.open。无需导入js文件。 cordova_plugin.js/config.xml 会自动处理映射。

【讨论】:

你能指导我如何使用cordova_plugin.js以及如何调用插件吗? 我越来越找不到符号“MainActivity.java” 你使用MainActivity.java,你有在manifest中声明吗? 是的。我宣布了。 Here is my code base【参考方案2】:

最后,我在this plugin 的帮助下完成了它

它使用 FakeR.java 类来设置布局和所有内容。

【讨论】:

【参考方案3】:
    public static int getId(Context context, String group, String key) 
        return context.getResources().getIdentifier(key, group, context.getPackageName());
    

【讨论】:

以上是关于Cordova Android 插件 - 从 Cordova 插件打开一个 android 原生活动的主要内容,如果未能解决你的问题,请参考以下文章

需要从cordova插件-android调用js函数

Cordova 地理定位插件无法从 Android 的 GPS 获取位置

cordova ios升级插件

无法从cordova CLI 将android 平台添加到cordova 项目

Cordova - 如何从 android 代码更改页面?

适用于 android 的 Cordova '本机文件选择器'插件不起作用