Quindi sto cercando di ottenere un URL che viene chiamato nella mia app, ma dopo l'apertura, sembra sempre essere null
non importa quello che ho fare.Schema URL Android: intent.getData() == null (PhoneGap)
Ecco la parte rilevante del mio manifesto:
<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>
Ed ecco il mio java:
@Override
public void onStart() {
super.onStart();
final Intent intent = getIntent();
Uri url = intent.getData();
Log.e("myLog", "Url = " + url);
}
Il registro è l'output "Intent = null", e non ho nessun errore.
Non sono uno sviluppatore Java quindi potrei avere un semplice problema che non riconosco. Ho intenzione di passare questo nella mia app PhoneGap con sendJavascript
ma essere un'app PhoneGap non sembra pertinente a questo problema.
EDIT:
mi sembra di essere sempre solo il primo <intent-filter>
quando accedo intent
. Ecco il log:
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) }
SOLUZIONE:
Dopo aver versato attraverso decine di messaggi su come implementare schemi URL per aprire il tuo PhoneGap app, e nessuno di loro di essere molto robusto o di lavoro a tutti, Inserirò la mia soluzione completa e spero che qualcuno la trovi utile.
Passo uno: AndroidManifest.xml - Aggiungi questo <intent-filter>
al tuo <activity>
, modifica di "urlScheme" in base alle esigenze. In questo caso, puoi fare clic su un link a urlScheme: ///? Key = val e aprire l'app.
<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>
Fase due: myApp.java - Aggiungere il seguente sotto onCreate
. Se utilizzi singleTask
, assicurati di inserire la tua logica nella funzione onStart
(anziché in onCreate
, come altri hanno sbandierato), in quanto ciò ti consentirà di collegarti alla tua app se è già in esecuzione o meno.
@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);
}
vedere la risposta accettato per una spiegazione del onNewIntent
override.
Penso che Intent final intent = getIntent(); dovrebbe essere Intent finale intent = intent.getIntent(); –
In che modo? 'intento' non esiste ancora. Ci proverò comunque. – bearfriend
Sì, non è un metodo. Credo di aver registrato 'intent' as is e di averne ricavato qualcosa. È solo chiamando metodi su di esso per ottenere i dati da esso è sempre nullo. – bearfriend