从cordova插件启动android活动

Ija*_*d N 7 android android-activity cordova cordova-plugins

我知道这可能是一个重复的问题,我已经尝试了堆栈的所有答案,但没有一个完整的答案.

大多数答案只是给出了如何启动一个活动,但没有提示如何配置Android Manifest文件中的活动以及保存活动布局和清单文件的位置.

任何人都可以提供完整的代码结构来启动cordova插件的活动.

Ija*_*d N 41

以下是从cordova插件启动活动的完整步骤

1.安装Plugman以创建插件

npm install -g plugman
Run Code Online (Sandbox Code Playgroud)

2.使用plugman创建cordova插件

plugman create --name PluginName --plugin_id com.example.sample.plugin --plugin_version 0.0.1
Run Code Online (Sandbox Code Playgroud)

注意:插件ID永远不会以大写字母开头

现在将创建PluginName目录.插件结构将是

PluginName /

| - plugin.xml

| - src /

| - www/PluginName.js

3.将android平台添加到插件中

plugman platform add --platform_name android
Run Code Online (Sandbox Code Playgroud)

现在插件结构将是

PluginName /

| - plugin.xml

| - src/android/PluginName.java

| - www/PluginName.js

4.现在在src/android diretory中创建一个名为NewActivity.java的java文件

此活动将使用我们的插件显示.

NewActivity.java

package com.example.sample.plugin;

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

public class NewActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String package_name = getApplication().getPackageName();
        setContentView(getApplication().getResources().getIdentifier("activity_new", "layout", package_name));
    }
}
Run Code Online (Sandbox Code Playgroud)

5.现在在src/android diretory中创建布局文件activity_new.xml

这是我们新活动的布局文件

activity_new.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="16dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    tools:context="com.example.sample.plugin.NewActivity">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="New Activity"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="77dp" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

6.现在在src/android中编辑PluginName.java

现在我们需要处理请求并开始我们的新活动.

PluginName.java

package com.example.sample.plugin;

import android.content.Context;
import android.content.Intent;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.CordovaInterface;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class PluginName extends CordovaPlugin {

    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
        super.initialize(cordova, webView);
    }

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        Context context = cordova.getActivity().getApplicationContext();
        if(action.equals("new_activity")) {
            this.openNewActivity(context);
            return true;
        }
        return false;
    }

    private void openNewActivity(Context context) {
        Intent intent = new Intent(context, NewActivity.class);
        this.cordova.getActivity().startActivity(intent);
    }
}
Run Code Online (Sandbox Code Playgroud)

7.现在编辑PluginName.jsWWW目录

现在创建新方法来调用以启动我们的新活动.

var exec = require('cordova/exec');

function plugin() {

}

plugin.prototype.new_activity = function() {
    exec(function(res){}, function(err){}, "PluginName", "new_activity", []);
}

module.exports = new plugin();
Run Code Online (Sandbox Code Playgroud)

8.现在编辑plugin.xml

现在我们需要指定我们的文件插件并在cordova AndroidManifest.xml文件中进行必要的更改

plugin.xml中

<?xml version='1.0' encoding='utf-8'?>
<plugin id="com.example.sample.plugin" version="0.0.1" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
    <name>PluginName</name>
    <js-module name="PluginName" src="www/PluginName.js">
        <clobbers target="PluginName" />
    </js-module>
    <platform name="android">
        <config-file parent="/*" target="res/xml/config.xml">
            <feature name="PluginName">
                <param name="android-package" value="com.example.sample.plugin.PluginName" />
            </feature>
        </config-file>
        <config-file target="AndroidManifest.xml" parent="/manifest/application">
            <activity android:label="New Activity" android:name="com.example.sample.plugin.NewActivity"></activity>
        </config-file>
        <config-file parent="/*" target="AndroidManifest.xml"></config-file>
        <source-file src="src/android/PluginName.java" target-dir="src/com/example/sample/plugin" />
        <source-file src="src/android/NewActivity.java" target-dir="src/com/example/sample/plugin" />
        <source-file src="src/android/activity_new.xml" target-dir="res/layout"/>
    </platform>
</plugin>
Run Code Online (Sandbox Code Playgroud)

9.现在创建一个cordova项目

cordova create CordovaProject com.example.sample.cordovaproject "Cordova App"
Run Code Online (Sandbox Code Playgroud)

10.将android平台添加到您的cordova项目中

cordova platform add android
Run Code Online (Sandbox Code Playgroud)

11.现在添加你的插件

cordova plugin add your-plugin-local-path
eg: cordova plugin add "C:\PluginName"
Run Code Online (Sandbox Code Playgroud)

12. 在www目录中为index.html添加一个按钮

的index.html

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
        <meta name="format-detection" content="telephone=no">
        <meta name="msapplication-tap-highlight" content="no">
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
        <link rel="stylesheet" type="text/css" href="css/index.css">
        <title>Hello World</title>
    </head>
    <body>
        <div class="app">
            <h1>Apache Cordova</h1>
            <div id="deviceready" class="blink">
                <p class="event listening">Connecting to Device</p>
                <p class="event received">Device is Ready</p>
            </div>
            <button id = "new_activity">New Activity</button>
        </div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

13. 在www/js目录的index.js中为新按钮添加单击处理程序

单击我们的按钮后,我们将调用我们的插件方法来启动新活动

index.js

var app = {
    initialize: function() {
        this.bindEvents();
    },
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function() {
        app.receivedEvent('deviceready');
    },
    receivedEvent: function(id) {
        var parentElement = document.getElementById(id);
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');

        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');

        console.log('Received Event: ' + id);
        document.getElementById("new_activity").addEventListener("click", new_activity);
    }
};

app.initialize();

function new_activity() {
    PluginName.new_activity();
}
Run Code Online (Sandbox Code Playgroud)

14.现在在Android手机中运行这个应用程序

cordova run android
Run Code Online (Sandbox Code Playgroud)

如果所有这些步骤都成功,当我们点击" 新建活动"按钮时,我们的新活动就会显示出来.