Ionic build cannot find module error. How to import Android plugin?

Ionic build cannot find module error. How to import Android plugin?

I'm trying to develop an Android Plugin to use in an Ionic app.

I'm trying to develop an Android Plugin to use in an Ionic app.

I created the app with a starter project already provided by Ionic using ionic start myApp tabs.

I have also created, in a different folder, my plugin, that contains the following files.

plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
    id="location-plugin" version="0.0.1">
<name>GSLocationManager</name>
<description>Location Plugin</description>
<license>MIT</license>
<keywords>cordova,device,sensors,location</keywords>

<js-module name="LocationManager" src="www/LocationManager.js"> <clobbers target="LocationManager" /> </js-module>

<engines> <engine name="cordova" version=">=3.6.0"></engine> </engines>

<platform name="android"> <preference name="GOOGLE_PLAY_SERVICES_VERSION" default="11+"/> <preference name="ANDROID_SUPPORT_LIBRARY_VERSION" default="26+"/> <preference name="ICON" default="@mipmap/icon" /> <preference name="SMALL_ICON" default="@mipmap/icon" /> <preference name="ACCOUNT_NAME" default="@string/app_name" /> <preference name="ACCOUNT_LABEL" default="@string/app_name" /> <preference name="ACCOUNT_TYPE" default="$PACKAGE_NAME.account" /> <preference name="CONTENT_AUTHORITY" default="$PACKAGE_NAME" />

<framework src="com.google.android.gms:play-services-location:$GOOGLE_PLAY_SERVICES_VERSION" /> <framework src="com.android.support:support-v4:$ANDROID_SUPPORT_LIBRARY_VERSION" /> <framework src="com.android.support:appcompat-v7:$ANDROID_SUPPORT_LIBRARY_VERSION" /> <!-- <framework src="android/dependencies.gradle" custom="true" type="gradleReference"/> -->

<source-file src="path/to/locationmanager/GSLocationManager.java" target-dir="path/to/locationmanager"></source-file>

<config-file target="AndroidManifest.xml" parent="/manifest"> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.hardware.location" /> </config-file>

<config-file target="res/xml/config.xml" parent="/*"> <feature name="GSLocationManager"> <param name="android-package" value="android.package.locationmanager.GSLocationManager" /> </feature> </config-file> </platform>

locationManager.js
var GSLocationManager = {
  getCurrentLocation: function(success, failure) {
    exec(success, failure, 'GSLocationManager', 'getCurrentLocation', []);
  }
}

module.exports = GSLocationManager;

GSLocationManager.java
package android.package.locationmanager;

import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaInterface; import org.apache.cordova.CordovaWebView; import org.apache.cordova.CordovaPlugin;

import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONException;

import android.annotation.SuppressLint; import android.content.Context; import android.location.Location; import android.location.LocationManager;

public class GSLocationManager extends CordovaPlugin {

private JSONObject data = new JSONObject();

// at the initialize function, we can configure the tools we want to use later, like the sensors
@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    super.initialize(cordova, webView);

}

// safety unregistering from the events if the application stops somehow
@Override
public void onDestroy() {

}

// this is the main part of the plugin, we have to handle all of the actions sent from the js
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
    if ("getCurrentLocation".equals(action)) {
        Location location = getCurrentLocation();
        JSONObject json = new JSONObject();
        json.put("latitude", location.getLatitude());
        json.put("longitude", location.getLongitude());
        callbackContext.success(json);
        return true;
    }
    return false;  // Returning false results in a "MethodNotFound" error.
}

@SuppressLint("MissingPermission")
private Location getCurrentLocation() {
    LocationManager locationManager = (LocationManager) cordova.getActivity().getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

    Location lastKnownGPSLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    return lastKnownGPSLocation;
}

}

Then I created a package.json for my plugin usign plugman And after that, added my android plugin to my Ionic project by doing ionic cordova plugin add path/to/my/plugin

But I cannot seem to be able to import my plugin to app.module.ts using import { GSLocationManager } from 'globespinning-location-plugin' I try to build but CLI says ERROR in src/app/app.module.ts(12,31): error TS2307: Cannot find module 'globespinning-location-plugin'.

Any idea where the error is? How should I import a plugin created by me, and referenced from a local folder? I want to be able to call GSLocationManager.getCurrentLocation() inside my ionic app.

android angular ionic cordova

Bootstrap 5 Complete Course with Examples

Bootstrap 5 Tutorial - Bootstrap 5 Crash Course for Beginners

Nest.JS Tutorial for Beginners

Hello Vue 3: A First Look at Vue 3 and the Composition API

Building a simple Applications with Vue 3

Deno Crash Course: Explore Deno and Create a full REST API with Deno

How to Build a Real-time Chat App with Deno and WebSockets

Convert HTML to Markdown Online

HTML entity encoder decoder Online

Top Android Projects with Source Code

Android projects with source code - Work on real-time android projects. We’ll start project ideas from beginners level and later move to advance projects.

Install Angular - Angular Environment Setup Process

Install Angular in easy step by step process. Firstly Install Node.js & npm, then Install Angular CLI, Create workspace and Deploy your App.

Ionic 4, Angular 7 and Cordova Crop and Upload Image

The comprehensive step by step tutorial on crop, and upload Image using Ionic 4, Angular 7 and Cordova

How to Create Mobile Apps using Ionic 4, Angular 8 and Cordova?

In this Ionic 4 tutorial, we will show you how to create mobile apps quickly using Ionic 4, Angular 8, and Cordova

Building Dark Mode Theme in Android

Hello World, today we are going to see how we can implement a dark theme or night mode in our android application. This tutorial is going to be very simple and easy to understand. The dark theme is attractive to users and it is comfortable for low light conditions.