Phonegap android - событие deviceready не запускается
Я искал в Интернете решения для своей проблемы и нашел много связанных тем, к сожалению, ни одно из предлагаемых решений не работает для моего дела. Я новичок в разработке Android и следил за документацией, найденной в Apache Cordova! для конфигурации.
Проблема: событие deviceready не запускается, ниже мои коды и конфигурация вместе с журналом ошибок. Пожалуйста, сообщите мне, что я сделал неправильно, спасибо!!!
Эмулятор
AVD Device: nexus 7
Target: Android 4.2
Memory RAM: 512
MainActivity.java
package com.example.pollo;
import android.os.Bundle;
import org.apache.cordova.*;
import android.app.Activity;
public class MainActivity extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html");
}
}
index.html
<html>
<head>
<title></title>
<script src="cordova-2.2.0.js"></script>
<script>
function onLoad(){
console.log("Now Loading");
document.addEventListener("deviceready", myDeviceReadyListener, false);
}
function myDeviceReadyListener(){
console.log("Device ready");
navigator.notification.alert("Phone is ready!");
var myDiv = document.getElementById('props');
myDiv.innerHTML = 'Device Name: ' + device.name;
}
</script>
</head>
<body onload="onLoad()">
<h1>X App V.11</h1>
<p id="props">Loading device properties...</p>
</body>
</html>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.pollo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="17" />
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true"
android:resizeable="true"
android:anyDensity="true"
/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<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.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
android:name="com.example.pollo.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Config
assets>www>cordova-2.2.0.js
assets>www>index.html
res>xml>config.xml
AndroidManifest.xml
libs>cordova-2.2.0.jar
libs>android-support-v13.jar
Logcat - Журнал ошибок
12-31 01:50:58.323: E/Trace(659): error opening trace file: No such file or directory (2)
12-31 01:51:45.653: E/StrictMode(552): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServicePr[email protected] that was originally bound here
Вызывается onLoad(), но myDeviceReadyListener() не называется ~ Имеет ли он какое-либо отношение к эмулятору, который я выбрал?
Ответы
Ответ 1
Забавный, вчера столкнулся с той же проблемой. Я потратил несколько часов на отладку, и все, что я мог найти, это то, что на линии 6016 в кордове-2.2.0.js приложение, похоже, молча прекращает выполнение. Зачем? Не знаю... ошибок в журналах нет. Возможно, некоторые новые разрешения или что-то в этом роде.
В любом случае, потратив много времени на отладку, я начал с нуля с помощью учебника PhoneGap. Я заметил, что в то время, когда был выпущен PhoneGap 2.2.0, они использовали API-уровень 16, а не 17 (это то, что я использовал и что вы используете). Как только я установил цель приложения на уровень API 16, все снова заработало.
Takeaway: установите уровень API вашего приложения на уровень до 16 (Android 4.1.2), и ваше приложение получит событие deviceready.
Ответ 2
Убедитесь, что у вас установлена правильная версия node. Phonegap проверяет версию node во время установки, но если позже вы переключитесь на другую (более старую) версию, она просто не работает во время компиляции, которая каким-то образом приводит к тому, что событие deviceready не запускается.