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 的 GPS 获取位置