从Cordova插件启动android活动 [英] Start android activity from cordova plugin

查看:64
本文介绍了从Cordova插件启动android活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I know this may is a duplicate question, i have tried all answers from stack, but non has a complete answer.

大多数答案仅给出了如何启动活动,而没有提示如何在Android Manifest文件中配置活动以及在何处保存活动布局和清单文件.

Most answers just give how to start an activity but no hints how to configure activity in Android Manifest file and where to save activity layout and manifest file.

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

推荐答案

这是从cordova插件开始活动的完整步骤

Here is the complete steps to start an activity from a cordova plugin

1.安装Plugman创建插件

npm install -g plugman

2.使用Plugman创建Cordova插件

plugman create --name PluginName --plugin_id com.example.sample.plugin --plugin_version 0.0.1

N.B:插件ID绝不以大写字母开头

N.B : plugin id never start with Uppercase

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

Now PluginName directory will be created. Plugin structure will be

PluginName/

PluginName/

|-plugin.xml

|- plugin.xml

|-src/

|-www/PluginName.js

|- www/PluginName.js

3.将Android平台添加到插件

plugman platform add --platform_name android

现在插件结构将

PluginName/

PluginName/

|-plugin.xml

|- plugin.xml

|-src/android/PluginName.java

|- src/android/PluginName.java

|-www/PluginName.js

|- www/PluginName.js

4.现在,在 src/android 目录

4. Now create a java file named NewActivity.java in src/android directory

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

This activity will be shown using our plugin.

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));
    }
}

5.现在在 src/android 目录

5. Now create layout file activity_new.xml in src/android directory

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

This is the layout file for our new activity

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>

6.现在,在 src/android

6. Now edit PluginName.java in src/android

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

Now we need to handle the request and start our new activity.

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);
    }
}

7.现在,在 www 目录

7. Now edit PluginName.js in www directory

现在创建一个新方法来调用以开始我们的新活动.

Now create new method to call to start our new activity.

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

function plugin() {

}

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

module.exports = new plugin();

8.现在编辑plugin.xml

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

Now we need to specify our files to plugin and make necessary changes in cordova AndroidManifest.xml file

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>

9.现在创建一个cordova项目

cordova create CordovaProject com.example.sample.cordovaproject "Cordova App"

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

cordova platform add android

11.现在添加您的插件

cordova plugin add your-plugin-local-path
eg: cordova plugin add "C:\PluginName"

12.在 www 目录

12. Add a button to index.html in www directory

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>

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

13. Add click handler for new button in index.js in www/js directory

点击按钮后,我们将调用插件方法以开始新的活动

When our button is clicked, we will call our plugin method to start our new activity

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();
}

14.现在在Android手机中运行此应用

cordova run android

如果所有这些步骤均成功,并且当我们单击新活动按钮时,我们的新活动就会显示.

If all these steps are success and when we click New Activity button, our new activity will show up.

这篇关于从Cordova插件启动android活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆