12

タイトルは自明ですが、理由がわかりません。

ソース: www/index.html:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="format-detection" content="telephone=no" />
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
        <link rel="stylesheet" type="text/css" href="css/index.css" />
        <title>Hello World</title>
    </head>
    <body>
        <div class="app">
            <h1>PhoneGap</h1>
            <div id="deviceready" class="blink">
                <p class="event listening">Connecting to Device</p>
                <p class="event received">Device is Ready</p>
            </div>
        </div>
        <script type="text/javascript" src="phonegap.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
        <script type="text/javascript">
            app.initialize();
        </script>
    </body>
</html>

index.js:

var app = {
    // Application Constructor
    initialize: function() {
        this.bindEvents();
    },
    // Bind Event Listeners
    //
    // Bind any events that are required on startup. Common events are:
    // 'load', 'deviceready', 'offline', and 'online'.
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    // deviceready Event Handler
    //
    // The scope of 'this' is the event. In order to call the 'receivedEvent'
    // function, we must explicity call 'app.receivedEvent(...);'
    onDeviceReady: function() {
        app.receivedEvent('deviceready');
    },
    // Update DOM on a Received Event
    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);

        navigator.notification.alert('PhoneGap Alert', null, 'Title', 'Button');
    }
};

android/res/xml の config.xml:

<?xml version='1.0' encoding='utf-8'?>
<widget id="io.cordova.helloCordova" version="2.0.0" xmlns="http://www.w3.org/ns/widgets">
    <name>Hello Cordova</name>
    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>
    <author email="dev@cordova.apache.org" href="http://cordova.io">
        Apache Cordova Team
    </author>
    <content src="index.html" />
    <feature name="App">
        <param name="android-package" value="org.apache.cordova.App" />
    </feature>
    <feature name="Notification">
        <param name="android-package" value="org.apache.cordova.Notification" />
    </feature>
    <access origin="http://127.0.0.1*" />
    <preference name="useBrowserHistory" value="true" />
    <preference name="exit-on-suspend" value="false" />
    <preference name="permissions" value="none" />
    <preference name="orientation" value="default" />
    <preference name="target-device" value="universal" />
    <preference name="fullscreen" value="true" />
    <preference name="webviewbounce" value="true" />
    <preference name="prerendered-icon" value="true" />
    <preference name="stay-in-webview" value="false" />
    <preference name="ios-statusbarstyle" value="black-opaque" />
    <preference name="detect-data-types" value="true" />
    <preference name="show-splash-screen-spinner" value="true" />
    <preference name="auto-hide-splash-screen" value="true" />
    <preference name="disable-cursor" value="false" />
    <preference name="android-minSdkVersion" value="8" />
    <preference name="android-installLocation" value="auto" />
</widget>

および androidmanifest.xml:

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="1.0.0" android:windowSoftInputMode="adjustPan" package="com.acs.acs_mobile" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <application android:debuggable="true" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:name="main" android:theme="@android:style/Theme.Black.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" />
</manifest>

過去数時間、運が悪くてうまくいかない理由を理解しようとしています。私は本当に phonegap に慣れていないので、何か不足している場合はお知らせください...

PS。Phonegap -version : 3.0.0-0.14.3 、 device sdk 8 、 AVD sdk 8 (どちらも同じ結果)

コードを try catch 内にラップした後に更新すると、次のエラー メッセージが表示されます。

result of expression 'navigator.notification' undefined is not an object

Android用のPhoneGapサンプルアプリケーションが機能せずnavigator.notification.*が失敗する「navigator.notification [未定義]はオブジェクトではありません」で述べたように

原因は:Likely the name of phonegap*js or cordova*js in your index.html does not match the file name in the assets/www directory.しかし、platforms/android/assets/www には phonegap.js と cordova.js しかなく、まったく同じ名前でインクルードしています... まだこれを理解できません...

アップデート

リモート ビルドを行うと、アプリはローカル ビルドで正常に動作しますが、バージョン 3 で説明したようにプラグインをインストールしました

4

6 に答える 6

7

コルドバ CLI 3.0.9 を使用して、コマンド ライン ツールを使用し、ここにリストされているドキュメント ( http://cordova.apache.org/docs/en/edge/cordova_notification_notification.md.html#Notification ) に従ってプロジェクトをビルドしました。HTML と JS コードを使用すると、ダイアログが問題なく表示されました。

他のファイルを見てみると、config.xml;の違いに気付きました。私config.xmlはこのように見えます:

<?xml version='1.0' encoding='utf-8'?>
<widget id="io.cordova.helloCordova" version="2.0.0" xmlns="http://www.w3.org/ns/widgets">
    <name>Hello Cordova</name>
    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>
    <author email="dev@cordova.apache.org" href="http://cordova.io">
        Apache Cordova Team
    </author>
    <content src="index.html" />
    <feature name="App">
        <param name="android-package" value="org.apache.cordova.App" />
    </feature>
    <feature name="Vibration">
        <param name="android-package" value="org.apache.cordova.vibration.Vibration" />
    </feature>
    <feature name="Notification">
        <param name="android-package" value="org.apache.cordova.dialogs.Notification" />
    </feature>
    <access origin="*" />
    <preference name="useBrowserHistory" value="true" />
    <preference name="exit-on-suspend" value="false" />
    <preference name="fullscreen" value="true" />
    <preference name="webviewbounce" value="true" />
</widget>

私のものにはorg.apache.cordova.dialogs.Notificationがあることに注意してください-あなたのものにはdialogs何らかの理由で名前空間がありません. これはわざとですか?「dialogs」名前空間を追加すると機能しますか? 最新の CLI バージョンを使用して再構築するとどうなりますか?

于 2013-09-16T14:30:48.137 に答える
2

Visual Studio 2015 を使用していますが、通知プラグインを追加することでこの問題を解決しました。

プロジェクト内の config.xml をダブルクリックし、通知プラグインを選択してインストールします。

ここに画像の説明を入力

于 2016-06-21T14:27:32.400 に答える
0

この機能を config.xml ファイルに追加してみてください

 <feature name="Notification">
  <param name="wp-package" value="Notification"/>
</feature>

...そして、config.xml ファイルを www ディレクトリにコピーすることをお勧めします。

于 2013-10-30T20:08:38.863 に答える
0

APK アプリをデバイスに再インストールします。システムがアクセス許可に同意するのは、システムがインストールされている場合のみです。リビルドだけではダメ。再インストール後、権限が画面に表示され、アクティブになります。

于 2017-07-12T13:50:04.680 に答える