Próbuję uzyskać wywołanie adresu URL do mojej aplikacji, ale po jej otwarciu zawsze wydaje się, że jest to null
nie ważne co ja zrobić.Schemat URL dla systemu Android: intent.getData() == null (PhoneGap)
Tutaj jest odpowiednia część mojego manifestu:
<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>
A oto moja Java:
@Override
public void onStart() {
super.onStart();
final Intent intent = getIntent();
Uri url = intent.getData();
Log.e("myLog", "Url = " + url);
}
Rejestr jest wyprowadzanie "Intent = null", i nie mam żadnych błędów.
Nie jestem programistą java, więc może mam prosty problem, którego nie rozpoznaję. Mam zamiar przekazać to do mojej aplikacji PhoneGap z sendJavascript
, ale bycie aplikacją PhoneGap nie wydaje się istotne dla tego problemu.
EDIT:
I wydają się być coraz tylko pierwszy <intent-filter>
gdy loguję intent
. Oto 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) }
ROZWIĄZANIE:
Po wylaniu przez dziesiątki postów na temat implementacji schematów URL, aby otworzyć aplikację PhoneGap, a żaden z nich są bardzo wytrzymałe i działa w ogóle, Zamierzam opublikować moje pełne rozwiązanie i mam nadzieję, że ktoś uzna to za przydatne.
Krok pierwszy: AndroidManifest.xml - Dodaj tę <intent-filter>
do swojego <activity>
, zmieniając "urlScheme" na cokolwiek chcesz. W takim przypadku możesz kliknąć link do urlScheme: ///? Key = val, aby otworzyć aplikację.
<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>
Krok drugi: myApp.java - dodaj następujące pod onCreate
. Jeśli używasz singleTask
, pamiętaj, aby umieścić swoją logikę w funkcji onStart
(zamiast w onCreate
, jak inni trąbili), ponieważ pozwoli ci to połączyć się z twoją aplikacją, czy już działa, czy nie.
@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);
}
Zobacz zaakceptowane odpowiedź na wyjaśnienie onNewIntent
ręcznym.
Myślę, że końcowy intent intent = getIntent(); powinien być ostateczny Intent intent = intent.getIntent(); –
Jak to zrobić? "intencja" jeszcze nie istnieje. Spróbuję tego. – bearfriend
Tak, to nie jest metoda. Wierzę, że logowałem "intencję" tak jak jest i otrzymałem z tego coś. To tylko wywoływanie metod, aby uzyskać dane z niego zawsze jest zerowe. – bearfriend