У меня есть приложение ionic 3, к которому нужно добавить Android SDK.для него нет плагина, поэтому я должен создать для него кордовый плагин.Я пытался в течение нескольких дней, и я могу получить плагин для установки и сборки, без ошибок, но вызов методов плагина, похоже, ничего не делает.Я могу получить js-файл плагина для вывода console.logs, но java-файл, похоже, не работает вообще.это моя ионная информация для моего проекта.У меня нулевой опыт разработки Java-кода или плагина Cordova, поэтому я столкнулся с серьезным препятствием, так как не могу понять, почему не вызывается Java-код.Кто-нибудь может увидеть, что я делаю не так?Ionic:
ionic (Ionic CLI): 4.4.0 (/ usr / local / lib / node_modules / ionic) Ionic Framework: ионно-угловой 3.9.2 @ ionic / app-scripts: 3.2.0
Cordova:
Cordova (CLI Cordova): 8.1.2 (cordova-lib@8.1.1) Платформы Cordova: Android 7.1.4, IOS 4.5.5 Плагины Cordova: Cordova-plugin-ionic-webview 1.2.1, (и 31 другой плагин)
Система:
ios-deploy: 1.9.4 NodeJS: v10.7.0 (/ usr / local / bin / node) npm:6.4.1 ОС: macOS High Sierra Xcode: Xcode 10.1 Версия сборки 10B61
Это мой Plugin.xml
<?xml version='1.0' encoding='utf-8'?>
<plugin id="cordova-plugin-chirp"
version="0.1.0"
xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android">
<name>chirp</name>
<js-module name="chirp" src="www/chirp.js">
<clobbers target="cordova.plugins.chirp" />
</js-module>
<platform name="ios">
<config-file parent="/*" target="config.xml">
<feature name="chirp">
<param name="ios-package" value="chirp" />
</feature>
</config-file>
<header-file src="src/ios/chirp.h" />
<source-file src="src/ios/chirp.m" />
</platform>
<platform name="android">
<source-file src="src/android/chirp.java" target-dir="src/org/apache/cordova/plugin/chirp" />
<source-file framework="true" src="src/android/libs/chirp-connect-release.aar" target-dir="libs"/>
<!-- <framework src="src/android/chirp.gradle" custom="true" type="gradleReference" /> -->
<config-file parent="/*" target="res/xml/config.xml">
<feature name="chirp">
<param name="android-package" value="org.apache.cordova.plugin.chirp" />
</feature>
</config-file>
<config-file parent="/*" target="AndroidManifest.xml">
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</config-file>
</platform>
</plugin>
Это мой js-файл.chirp.js:
var exec = require('cordova/exec');
var chirp ={
getPermissions:function(message){
console.log(message);
exec(null, null, 'Chirp', 'getPermissions', [message]);
},
start:function(message){
console.log(message);
exec(null, null, 'Chirp', 'start', [message]);
},
send:function(message){
console.log(message);
exec(null, null, 'Chirp', 'send', [message]);
}
};
module.exports = chirp
Это мой файл Gradle.chirp.gradle:
repositories {
jcenter()
flatDir {
dirs 'libs'
}
}
dependencies {
compile(name:'chirp-connect-release', ext:'aar')
}
android {
packagingOptions {
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
}
}
и это мой файл Java.chirp.java:
package com.chirp.cordova.plugin;
import android.content.Context;
import android.content.pm.PackageManager;
import android.Manifest;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.LOG;
import org.apache.cordova.CordovaArgs;
import org.apache.cordova.PluginResult;
import org.apache.cordova.PermissionHelper;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import io.chirp.connect.ChirpConnect;
import io.chirp.connect.interfaces.ConnectEventListener;
import io.chirp.connect.interfaces.ConnectSetConfigListener;
import io.chirp.connect.models.ChirpError;
import io.chirp.connect.models.ConnectState;
/**
* This class echoes a string called from JavaScript.
*/
public class chirp extends CordovaPlugin {
private ChirpConnect chirpConnect;
private Context context;
CallbackContext callbackC;
String TAG = "ChirpPlugin";
String [] permissions = {Manifest.permission.MODIFY_AUDIO_SETTINGS, Manifest.permission.RECORD_AUDIO, Manifest.permission.INTERNET, Manifest.permission.ACCESS_NETWORK_STATE};
public static final int SEARCH_REQ_CODE = 0;
public static final int SAVE_REQ_CODE = 1;
public static final int REMOVE_REQ_CODE = 2;
public static final int PICK_REQ_CODE = 3;
public String executeArgs = "";
String KEY = "myKey";
String SECRET = "mySecret";
String CONFIG = "myConfig";
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
callbackC = callbackContext;
LOG.d(TAG, "We are entering execute");
if (action.equals("start")){
if(hasPermission()){
String message = args.getString(0);
executeArgs = message;
// start(message);
callbackContext.success();
return true;
} else {
PermissionHelper.requestPermissions(this, 0, permissions);
}
} else if (action.equals("send")){
String message = args.getString(0);
this.send(message);
callbackContext.success();
return true;
}
return false;
};
public chirp(Context context) {
this.context = context;
};
@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
ChirpConnect chirpConnect = new ChirpConnect(context, KEY, SECRET);
chirpConnect.setConfigFromNetwork(new ConnectSetConfigListener(){
@Override
public void onSuccess(){
chirpConnect.setListener(connectEventListener);
LOG.i("setConfig", "Config successfully set");
}
@Override
public void onError(ChirpError setConfigError){
LOG.e("setConfigError", setConfigError.getMessage());
}
});
};
ConnectEventListener connectEventListener = new ConnectEventListener() {
@Override
public void onSending(byte[] payload, byte channel) {
LOG.v("chirpConnectDemoApp", "This is called when a payload is being sent " + payload + " on channel: " + channel);
}
@Override
public void onSent(byte[] payload, byte channel) {
LOG.v("chirpConnectDemoApp", "This is called when a payload has been sent " + payload + " on channel: " + channel);
}
@Override
public void onReceiving(byte channel) {
LOG.v("chirpConnectDemoApp", "This is called when the SDK is expecting a payload to be received on channel: " + channel);
}
@Override
public void onReceived(byte[] payload, byte channel) {
LOG.v("chirpConnectDemoApp", "This is called when a payload has been received " + payload + " on channel: " + channel);
}
@Override
public void onStateChanged(byte oldState, byte newState) {
LOG.v("chirpConnectDemoApp", "This is called when the SDK state has changed " + oldState + " -> " + newState);
}
@Override
public void onSystemVolumeChanged(int old, int current) {
LOG.d("chirpConnectDemoApp", "This is called when the Android system volume has changed " + old + " -> " + current);
}
};
private void start(String message) {
if (message != null && message.length() > 0) {
chirpConnect.start();
}
};
private void send(String message) {
if (message != null && message.length() > 0) {
long maxLength = chirpConnect.getMaxPayloadLength();
byte[] payload = chirpConnect.randomPayload(maxLength);
chirpConnect.send(payload);
}
};
public boolean hasPermission() {
for(String p : permissions)
{
if(!PermissionHelper.hasPermission(this, p))
{
return false;
}
}
return true;
}
public void requestPermissions(int requestCode)
{
PermissionHelper.requestPermissions(this, requestCode, permissions);
}
}