/ / Instalacja wtyczki w aplikacji phonegap - Android, Cordova

Instalacja wtyczki w aplikacji phonegap - Android, Cordova

Chcę utworzyć aplikację phonegap za pomocą ta wtyczka. Zrobiłem następujące kroki, aby utworzyć i dodać wtyczkę:

1: Tworzę tę aplikację za pomocą phonegap cli: -

phonegap create GetPhone --id "com.phone" --name "GetPhoneApp"

2: Wchodzenie do projektu i buid

cd GetPhone
phonegap local build android

3: Instalowanie wtyczki

phonegap local plugin add https://github.com/macdonst/TelephoneNumberPlugin

4: przeniesienie telephonenumber.js do folderu www

5: dodawanie

<script type="text/javascript" charset="utf-8" src="telephonenumber.js"></script>

do index.html, a następnie dodany poniżej na urządzeniu już:

var telephoneNumber = cordova.require("cordova/plugin/telephonenumber");
telephoneNumber.get(function(result) {
alert("result = " + result);
}, function(error) {
alert("error = " + error.code);
});

6: Dodano

<plugin name="TelephoneNumber" value="com.simonmacdonald.cordova.plugins.TelephoneNumber"/>

do config.xml w katalogu www.

7: Kompilacja

phonegap local build android

8: Przesłano do build.phonegap.com i utworzono plik .apk.

Następnie, gdy uruchamiam tę aplikację na urządzeniu z Androidemnic nie alarmuje. Czy podjąłem niewłaściwy krok? Nie wiem dużo więcej o luce telefonicznej. Po google utworzyłem to. widziałem w tym samouczku również, aby dodać tę wtyczkę. Kiedy buduję go lokalnie, nie pokazuje żadnego błędu. Ale to też nie działa.

Pomóż mi znaleźć błąd.

Odpowiedzi:

5 dla odpowiedzi № 1

Przede wszystkim proponuję zapoznanie się ze standardowymi narzędziami, szczególnie adb. Pozwoli ci to dostarczyć więcej informacji, dowiedzieć się, co naprawdę się dzieje.

Przejrzeć przewodnik jest również pomocny, więc możesz mieć pewność, że wiesz, co robisz i dlaczego to robisz. Zobacz także debugowanie krok po kroku kodu Androida.

Zachęcam również do zbudowania Cordovaaplikacji ze źródeł bez użycia fantazyjnych narzędzi, aby sprawdzić, co idzie gdzie i jak wszystkie komponenty się łączą. Twoje drzewo źródłowe jest mylące i wydaje się, że użyłeś mieszaniny Cordova 3.1 i Cordova 2.9, a nawet Phonegap? Musisz tylko dołączyć cordova.js i twój skrypt (js/script.js w tym przypadku), nic więcej w tej chwili.

Powiedziawszy to, przejdźmy do głównej kwestii.

Twój telefon do get zwraca błąd. Dlaczego? Rzuć okiem na kod źródłowy wtyczki:

https://github.com/macdonst/TelephoneNumberPlugin/blob/master/src/com/simonmacdonald/cordova/plugins/TelephoneNumber.java

Wtyczka pobiera plik TelephonyManager i próbuje zadzwonić do getLine1Number. I jak widać result != null jest fałszem, który przechodzi do zwrotu a PluginResult.Status.ERROR, dlatego pojawia się okno z ostrzeżeniem o błędzie.

To jest podstawowa kwestia. TelephonyManager zwracanie null na Twoje życzenie. Dlaczego? Po przeszukaniu możesz natknąć się na:

Przejdź więc do Ustawienia> Informacje o telefonie>Stan urządzenia i spójrz na pole „Mój numer telefonu”. Czy to „Nieznany”? Zatem pech. Moja karta SIM nie przechowuje numeru, więc mam takie same wyniki jak ty.

Inną rzeczą wartą uwagi jest to, że przynajmniej w Androidzie 4.4 metoda zwraca pusty ciąg znaków "" zamiast null, więc podczas testowania na moim urządzeniu z Androidem 2.3.7 dostałem null i w ten sposób otrzymałem gałąź błędu. Ale na moim urządzeniu z Androidem 4.4.2 mam "" i dostałem gałąź sukcesu, ale liczba była oczywiście pusta.

Możesz ustawić liczbę na emulatorze za pomocą ten dość zaawansowany przewodnik jeśli chcesz spróbować. Więc co możesz zrobić? Prawdopodobnie nic przy użyciu API, nawet sam system Android nie może uzyskać twojego numeru, jeśli nie jest zapisany na karcie SIM. Poprosić użytkownika lub wysłać SMS-a, aby odkrył numer za pośrednictwem usługi internetowej.


1 dla odpowiedzi nr 2

Krok 5 powyżej nie zadziała, chyba że kod zostanie wywołany po wywołaniu zdarzenia „deviceready”.

będziesz potrzebować jakiegoś połączenia, aby wiedzieć, kiedy dokument jest ładowany, możesz wykonać:

<body onload="onLoad()">
<script>
function onLoad() {
document.addEventListener("deviceready", deviceReady, false);
}
</script>

LUB (w / jquery):

<script>
$(document).ready(function () {
document.addEventListener("deviceready", deviceReady, false);
}
</script>

a następnie utwórz tę funkcję:

function deviceReady() {
var telephoneNumber = cordova.require("cordova/plugin/telephonenumber");
telephoneNumber.get(function(result) {
alert("result = " + result);
}, function(error) {
alert("error = " + error.code);
});
}

Zapewni to załadowanie dokumentu i gotowość do połączenia z Cordova.