Also versuche ich eine URL in meiner App aufgerufen werden, aber nachdem es öffnet, scheint es immer nur null
egal was ich machen.Android URL Schema: intent.getData() == null (PhoneGap)
Hier ist der relevante Teil meines manifest:
<activity android:name="myapp" android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<data android:scheme="myapp" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
Und hier ist mein Java:
@Override
public void onStart() {
super.onStart();
final Intent intent = getIntent();
Uri url = intent.getData();
Log.e("myLog", "Url = " + url);
}
Das Protokoll "Intent = null" ausgibt, und ich habe keine Fehler.
Ich bin kein Java-Entwickler, so dass ich ein einfaches Problem habe, das ich nicht erkenne. Ich werde dies in meine PhoneGap-App mit sendJavascript
weiterleiten, aber eine PhoneGap-App scheint für dieses Problem nicht relevant.
EDIT:
ich nur scheinen die erste <intent-filter>
bekommen, wenn ich intent
anmelden. Hier ist das Protokoll:
03-13 12:36:18.593: E/MyAppLog(13793): Intent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.wd.myapp/.myapp (has extras) }
LÖSUNG:
Nach dem Gießen durch Dutzende von Stellen, wie URL-Schemata zu implementieren Ihre PhoneGap App zu öffnen, und keiner von ihnen sind sehr robust oder überhaupt arbeiten, Ich werde meine vollständige Lösung posten und hoffe, dass jemand sie nützlich findet.
Schritt eins: AndroidManifest.xml - Fügen Sie dieses <intent-filter>
zu Ihrem <activity>
hinzu und ändern Sie 'urlScheme' zu was auch immer Sie mögen. In diesem Fall könnten Sie auf einen Link zu urlScheme: ///? Key = val klicken und die App öffnen.
<intent-filter>
<data android:scheme="urlScheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
Zweiter Schritt: myApp.java - unter onCreate
folgendes hinzufügen. Wenn Sie singleTask
verwenden, stellen Sie sicher, dass Sie Ihre intent
Logik in der onStart
Funktion (anstatt in onCreate
, wie andere haben trompeted), wie Sie können in Ihre App verknüpfen, ob es bereits läuft oder nicht.
@Override
public void onStart() {
super.onStart();
final Intent intent = getIntent();
String url = intent.getDataString();
if(url != "" && url != null) {
super.sendJavascript("setTimeout(function() { handleOpenURL('" + url + "'); },1);");
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent); setIntent(intent);
}
Siehe die akzeptierte Antwort auf eine Erklärung der onNewIntent
außer Kraft setzen.
Ich denke, endgültige Absicht intent = getIntent(); sollte endgültig sein intent intent = intent.getIntent(); –
Wie so? 'Absicht' existiert noch nicht. Ich werde es versuchen. – bearfriend
Ja, es ist keine Methode. Ich glaube, ich habe "Absicht" protokolliert, wie es ist und habe etwas davon. Es ruft nur Methoden auf, um Daten daraus zu erhalten, ist immer null. – bearfriend