简体   繁体   English

从Cordova插件启动android活动

[英]Start android activity from cordova plugin

I know this may is a duplicate question, i have tried all answers from stack, but non has a complete answer. 我知道这可能是一个重复的问题,我已经尝试了所有来自堆栈的答案,但是没有一个完整的答案。

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

Can anyone please give a complete code structure to start an activity from cordova plugin. 任何人都可以提供完整的代码结构以从cordova插件开始活动。

Here is the complete steps to start an activity from a cordova plugin 这是从cordova插件开始活动的完整步骤

1. Install Plugman to create plugin 1.安装Plugman创建插件

npm install -g plugman

2. Create cordova plugin using plugman 2.使用Plugman创建Cordova插件

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

NB : plugin id never start with Uppercase NB:插件ID永远不要以大写字母开头

Now PluginName directory will be created. 现在将创建PluginName目录。 Plugin structure will be 插件结构将

PluginName/ 插件名称/

|- plugin.xml |-plugin.xml

|- src/ |-src /

|- www/PluginName.js |-www / PluginName.js

3. Add android platform to plugin 3.将Android平台添加到插件

plugman platform add --platform_name android

Now plugin structure will be 现在插件结构将是

PluginName/ 插件名称/

|- plugin.xml |-plugin.xml

|- src/android/PluginName.java |-src / android / PluginName.java

|- www/PluginName.js |-www / PluginName.js

4. Now create a java file named NewActivity.java in src/android directory 4.现在在src / android目录中创建一个名为NewActivity.java的Java文件。

This activity will be shown using our plugin. 此活动将使用我们的插件显示。

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

5. Now create layout file activity_new.xml in src/android directory 5.现在在src / android目录中创建布局文件activity_new.xml

This is the layout file for our new activity 这是我们新活动的布局文件

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>

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

Now we need to handle the request and start our new activity. 现在,我们需要处理请求并开始我们的新活动。

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

7. Now edit PluginName.js in www directory 7.现在在www目录中编辑PluginName.js

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. Now edit plugin.xml 8.现在编辑plugin.xml

Now we need to specify our files to plugin and make necessary changes in cordova AndroidManifest.xml file 现在我们需要指定要插入的文件,并在cordova AndroidManifest.xml文件中进行必要的更改

plugin.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>

9. Now create a cordova project 9.现在创建一个cordova项目

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

10. Add android platform to your cordova project 10.将android平台添加到您的cordova项目中

cordova platform add android

11. Now add your plugin 11.现在添加您的插件

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

12. Add a button to index.html in www directory 12.在www目录中的index.html中添加一个按钮

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>

13. Add click handler for new button in index.js in www/js directory 13.在www / js目录的index.js中为新按钮添加单击处理程序

When our button is clicked, we will call our plugin method to start our new activity 单击我们的按钮后,我们将调用我们的插件方法以开始我们的新活动

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

14. Now run this app in android phone 14.现在在安卓手机上运行这个程序

cordova run android

If all these steps are success and when we click New Activity button, our new activity will show up. 如果所有这些步骤都成功,并且当我们单击“ 新建活动”按钮时,将显示我们的新活动。

Hi you can use this plugin 嗨,您可以使用此插件

cordova plugin add sevensky-cordova-plugin-intent

Usage : 用法:

    document.getElementById("btn_device_name").addEventListener("click", test);

    function test() {
        var obj = new Object();
        obj.name = "Ahmad"; //bundle string extra 1 string
        obj.family = "Aghazadeh"; //bundle string extra 2
        intentPlugin.startActivity("com.sevensky.test", "TestActivity", JSON.stringify(obj));
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM