2016-04-13 8 views
1

Native Android-Code mit Codenamen versuchen, aber das gleiche funktioniert nicht auf dem Gerät. Wenn ich Simulator versuche, funktioniert es auch keine Nachricht/Fehler. Aber wenn dasselbe am tatsächlichen Gerät versucht wird, dann erhielt Nachricht "NO Support". Es bedeutet in NativeCall nt = NativeLookup.create(NativeCall.class); durch Gerät nt ist null. Gibt es einen Fehler in meinem Code?Native Implementierung funktioniert nicht

NativeImpl Code:

public class NativeCallImpl extends Activity implements userclasses.NativeCall{ 

public void setNative(String param) { 
    Intent intent = new Intent(this, UploadData.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast( 
            this.getApplicationContext(), 234324243, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
            + (10 * 1000), pendingIntent); 
    Toast.makeText(getApplicationContext(), "Native call", Toast.LENGTH_LONG).show(); 
} 

public boolean isSupported() { 
    return true; 
} 
} 

Schnittstelle:

public interface NativeCall extends NativeInterface{ 
public void setNative(String mobileNumber); 
//public boolean isSupported(); 
} 

Call:

private void autoUpdate(){ 
    NativeCall nt= NativeLookup.create(NativeCall.class); 
    if(nt!=null){ 
     nt.setNative(getMobileNumber()); 
    }else{ 
     Dialog.show("NO Support", "No Native Support", "OK", null); 
    } 
} 

Screenshot des Gerätes: enter image description here

Antwort

1

Sie erhalten wahrscheinlich eine Ausnahme in der Konsole, die Sie sehen, wenn Sie das Gerätekabel anschließen und DDMS ausführen.

Erweitern Sie Activity nicht in der nativen Schnittstellenimplementierung. Wenn Sie eine Aktivität benötigen, fügen Sie eine separate Klasse hinzu.

Implementieren Sie die native Schnittstelle nicht in der impl-Klasse. Entfernen Sie spezifisch das: implements userclasses.NativeCall. Es wird Probleme verursachen, wenn Sie mit Peer-Komponenten arbeiten ...

Für weitere Details überprüfen Sie die developer guide section on native interfaces.

+0

Sie sind richtig, aber warum unten Fehler beim Erstellen 'Nicht kopieren Bibliothek D: \ PR_work \ checkInOut \ override, es ist ein Verzeichnis. Kopieren der Bibliothek D: \ PR_work \ checkInOut \ lib \ impl \ cls ist kein Verzeichnis. Kopieren der Bibliothek D: \ PR_work \ checkInOut \ lib \ impl \ stubs ist kein Verzeichnis. Kopieren der Bibliothek D: \ PR_work \ checkInOut \ native \ internal_tmp ist kein Verzeichnis. Kopieren der Bibliothek D: \ PR_work \ checkInOut \ native, es ist ein Verzeichnis.Es wird in das Projekt aufgenommen oder nicht. –

+0

Wenn ich Komponenten von Codename eins in nativem Code wie Dialog.show(); verwende, funktioniert das? –

+0

Dies sind keine Fehler, dies sind Hinweise von Ant. Sie können Codename One-Komponenten von nativ aufrufen, beachten Sie jedoch, dass dies in iOS viel schwieriger ist und Sie Threading-Probleme behandeln müssen, da Codename One-Komponenten auf dem EDT ausgeführt werden müssen, während nativer Code in einem eigenen Thread ausgeführt werden muss. Es gibt einen Abschnitt über native Rückrufe im oben genannten Entwicklerleitfaden. –

1

Ich weiß nicht, ob ein Problem mit Ihrem Code vorliegt, aber Sie können die native Funktionalität im Simulator nicht testen. Sie können die Option zum Erstellen von Include-Quellen verwenden, den Quellcode herunterladen und in Android Studio oder XCode kompilieren und in diesen Umgebungen testen.

Verwandte Themen