2016-11-02 85 views
1

我知道這可能是一個重複的問題,我嘗試了所有來自堆棧的答案,但沒有完整的答案。從cordova插件啓動android活動

大多數的答案只是給出如何啓動一個活動,但沒有提示如何配置Android Manifest文件中的活動以及保存活動佈局和清單文件的位置。

任何人都可以給一個完整的代碼結構來從cordova插件開始一個活動。

回答

15

下面是完整的步驟從科爾多瓦插件

1.啓動活動安裝Plugman創建插件

npm install -g plugman 

2.創建科爾多瓦使用plugman

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

注:插件ID從不啓動與大寫

現在將創建PluginName目錄。插件結構將

PluginName/

| - plugin.xml的

| - SRC/

| - WWW/PluginName.js

3.添加android平臺插件

plugman platform add --platform_name android 

現在插件結構將

PluginName/

| - plugin.xml的

| - SRC /安卓/ PluginName.java

| - WWW/PluginName.js

4.現在創建一個java文件名爲NewActivity.java的src /安卓 diretory

該活動將利用我們的插件來顯示。

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。XML的src /安卓 diretory

這是我們新的活動

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佈局文件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.現在WWW目錄編輯PluginName.js

現在,創造新的方法來調用,開始我們新的活動。

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

現在,我們需要指定我們的文件,插件,並在科爾多瓦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 platform add android 

11.現在添加插件

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

12.添加一個按鈕來指數.html in WWW目錄

的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.添加單擊處理新按鈕指數。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手機上運行這個應用程序

cordova run android 

如果所有這些步驟都成功,當我們點擊新建活動按鈕,我們的新活動將顯示出來。

+0

你在哪裏得到 「SmartHomePlugin」 – HKumar

+0

@HKumar對不起,這是一個錯字錯誤。它應該是PluginName。謝謝。 –

+0

您能指導我如何將成功和回調方法添加到此活動中 – HKumar

0

嗨,你可以使用這個插件

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