質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.81%

cordovaについて

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 1,042

hide09090909

score 61

前提・実現したいこと

cordovaでプラグインを自作し、javascriptから呼び出したいです。
アプリの流れは、アイコンをタップするとロゴ画像が表示され、2秒立つとオリジナルのtoastを表示するプラグインが呼び出されるというものです。

発生している問題・エラーメッセージ

オリジナルのプラグインを作成したのですが、ロゴ画像が2秒以上表示されても、何も動きません。
config.xmlかplugin.xmlの設定にあまり自信がないので、ミスはその2つの可能性が高いと思っておりますが、自力では間違いがわかりません。
どなたか、わかる方はいらっしゃいますでしょうか?
もし、いらっしゃったら、教えてください。

↓プラグインの呼び出し

var app = {
  // コンストラクタ
  //initializeは初期化
  initialize: function() {
  //  alert("tesuto2");
    this.bindEvents();
    //alert("tesuto3");
  },


  bindEvents: function() {
    document.addEventListener('deviceready', this.onDeviceReady, false);
    //alert("tesuto4");
  },
  // deviceready Event Handler
  //

  onDeviceReady: function() {
  //  alert("tesuto5");
    //app.receivedEvent('deviceready');
    //  alert("tesuto6");

    //カメラへのオプション
    //  var options = {
    //  quality: 50,
    //destinationType: navigator.camera.DestinationType.FILE_URI
    //};
    //第一引数に成功時の処理、第二引数に失敗時の処理、第三引数にオプション
    //functionを使用する意味


   setTimeout(function() {
      cordova.exec(function() {
        //成功時に呼ばれる関数
        console.log('プラグイン呼び出しに成功しました');
      }, function() {
        //失敗時に呼ばれる関数
        console.log('プラグイン呼び出しに失敗しました');
        //プラグイン名、呼び出すプラグインのアクション名、ネイティブ側に渡す配列
      }, 'HelloWorld', 'showMessage', ['Hello my first Cordova plugin']);
    }, 2000);
    alert("tesuto6");
  },

  /*var options = {
    quality: 50,
    destinationType: navigator.camera.DestinationType.FILE_URI
  };

  //カメラを起動する。
  setTimeout(function (){navigator.camera.getPicture(function(imageData) {
    alert(imageData);
  }, function() {
    alert('fail');
  }, options);},2000);
},
*/

  //setTimeoutは第一引数に呼び出したい関数、第二引数に待機時間を設定する。2000=2秒

  // Update DOM on a Received Event
  receivedEvent: function(id) {
    //document.getElementById(id);は指定の引数を持つ要素を返す。
    var parentElement = document.getElementById(id);
    //セレクタにマッチする文章中の最初の要素を返す。
    //セレクタとはスタイルを適用する対象のこと、CSS
    var listeningElement = parentElement.querySelector('.listening');
    var receivedElement = parentElement.querySelector('.received');
    //指定の要素に新しい属性を追加もしくは指定の要素に存在する値を変更する。
    //第一引数に属性名、第二引数に変更したい値を入れる。
    listeningElement.setAttribute('style', 'display:none;');
    receivedElement.setAttribute('style', 'display:block;');      //console.logはコンソールにメッセージを出力させる関数。
    console.log('Received Event: ' + id);
  }
};

app.initialize();

↓プラグインの作成

// プラグインを格納している階層
package com.ionicframework.sample141782;
//plugin.helloworld;

import android.os.Bundle;
import org.apache.cordova.*;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
import android.app.AlertDialog;

public class HelloWorld extends CordovaPlugin {
//Toast.makeText(this, "Toast example", Toast.LENGTH_LONG).show();
  @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException
    {
        if (action.equals("showMessage")) {

            String param = args.getString(0);

            this.showMessage(param);

            callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, "success!"));
            //callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.Error, "error!"));

            return true;
        }
        return false;
    }

    private void showMessage(String str) {
        //android.widget.Toast.makeText(this.cordova.getActivity(), str, 2000).show();
        AlertDialog.Builder builder = new AlertDialog.Builder(this.cordova.getActivity());
        builder.setTitle("title");
        builder.setMessage(str);
          builder.setPositiveButton("OK", null);

        AlertDialog dialog = builder.create();
        dialog.show();
    }
  }

↓plugin.xml

<!--基本的なプラグインの情報-->
<?xml version="1.0" encoding="UTF-8"?>
<!-- id: プラグインの識別子、version: プラグインのバージョン -->
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
    xmlns:android="http://schemas.android.com/apk/res/android"
    id="cordova-plugin-helloworld"
    version="1.0.0">

    <!-- プラグイン名 -->
    <name>HelloWorld</name>
    <!-- プラグインの説明 -->
    <description>This is a HelloWorld</description>

    <!-- キーワード -->
    <keywords></keywords>
    <!-- ライセンス,要素のコンテンツにプラグインのライセンスが含まれる。 -->
    <license>Hello</license>


    <!-- Android用の設定 -->
    <platform name="android">
        <!-- Androidのconfig.xmlはここ→project/platform/android/res/xml/config.xmlにあるのでそこに反映するように -->
        <config-file target="res/xml/config.xml" parent="/*">
            <!-- Cordovaはfeatureタグをみて、どのプラグインが有効か見る。以下の情報が上記のファイルに追加される。 -->
            <feature name="HelloWorld">
                <param name="android-package" value="plugin.helloworld.HelloWorld"/>

            </feature>
        </config-file>
        <!-- Javaのソースファイル。 target-dir: ファイルがコンパイルされるべき場所 -->
        <!-- 以下だとproject/platform/android/src/plugin/helloworld/以下になる -->
        <source-file src="src/android/HelloWorld.java" target-dir="src/plugin/helloworld/"/>
    </platform>
</plugin>

↓config.xml

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.ionicframework.sample141782" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>sample</name>
    <description>
        An Ionic Framework and Cordova project.
    </description>
    <author email="you@example.com" href="http://example.com.com/">
      Your Name Here
    </author>
    <content src="index.html" />
    <access origin="*" />
    <preference name="webviewbounce" value="false" />
    <preference name="UIWebViewBounce" value="false" />
    <preference name="DisallowOverscroll" value="true" />
    <preference name="SplashScreenDelay" value="2000" />
    <preference name="FadeSplashScreenDuration" value="2000" />
    <preference name="android-minSdkVersion" value="16" />
    <preference name="BackupWebStorage" value="none" />
    <preference name="SplashScreen" value="screen" />
    <feature name="StatusBar">
        <param name="ios-package" onload="true" value="CDVStatusBar" />
    </feature>
    <platform name="ios">

    </platform>
    <platform name="android">
        <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
        <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
        <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
        <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
        <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
        <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
        <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
        <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
        <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
        <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
        <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
        <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />

    </platform>
    <plugin name="cordova-plugin-whitelist" spec="~1.3.0" />
    <plugin name="cordova-plugin-splashscreen" spec="~4.0.0" />
    <plugin name="cordova-plugin-statusbar" spec="~2.2.0" />

    <!--プラグイン名-->
    <feature name="HelloWorld">
      <!--paramは閉じなくて良い-->
        <param name="android-package" value="com.ionicframework.sample141782;" />
    </feature>
</widget>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る