web-dev-qa-db-ja.com

Start Android Cordovaプラグインからのアクティビティ

これは重複した質問である可能性があることを知っています。スタックからすべての回答を試しましたが、完全ではありません。

ほとんどの回答は、アクティビティを開始する方法を示していますが、Androidマニフェストファイルでアクティビティを構成する方法、およびアクティビティレイアウトとマニフェストファイルを保存する場所についてのヒントはありません。

cordovaプラグインからアクティビティを開始するには、誰でも完全なコード構造を指定してください。

8
Ijas Ahamed N

Cordovaプラグインからアクティビティを開始するための完全な手順は次のとおりです

1。Plugmanをインストールしてプラグインを作成

npm install -g plugman

2。plugmanを使用してCordovaプラグインを作成

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

NB:プラグインIDが大文字で始まることはありません

PluginNameディレクトリが作成されます。プラグイン構造は

PluginName /

|-plugin.xml

|-src /

|-www/PluginName.js

。追加Androidプラットフォームからプラグインへ

plugman platform add --platform_name Android

プラグインの構造は

PluginName /

|-plugin.xml

|-src/Android/PluginName.Java

|-www/PluginName.js

4。Java NewActivity.Javaという名前のファイルをsrc/Androidディレクトリに作成

このアクティビティは、プラグインを使用して表示されます。

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。レイアウトファイルを作成しますactivity_new.xmlsrc/Androidディレクトリに

これが新しいアクティビティのレイアウトファイルです

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。次に編集PluginName.Java in src/Android

次に、リクエストを処理して新しいアクティビティを開始する必要があります。

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。編集します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();

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>

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ディレクトリの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。index.jswww/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。Android phoneでこのアプリを実行します

cordova run Android

これらすべての手順が成功した場合、New Activityボタンをクリックすると、新しいアクティビティが表示されます。

41
Ijas Ahamed N

こんにちは、このプラグインを使用できます

cordova plugin add sevensky-cordova-plugin-intent

使用法 :

    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));
    }
1
Ahmad Aghazadeh