bea*_*end 5 android url-scheme android-intent cordova
所以我正在尝试将一个URL调用到我的应用程序中,但在打开之后,它似乎总是在null我做的事情上并不重要.
这是我的清单的相关部分:
<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>
Run Code Online (Sandbox Code Playgroud)
这是我的java:
@Override
public void onStart() {
super.onStart();
final Intent intent = getIntent();
Uri url = intent.getData();
Log.e("myLog", "Url = " + url);
}
Run Code Online (Sandbox Code Playgroud)
日志输出"Intent = null",我没有错误.
我不是一个java开发人员所以我可能有一个我不认识的简单问题.我将把它传递到我的PhoneGap应用程序,sendJavascript但是作为PhoneGap应用程序似乎与此问题无关.
编辑:
我<intent-filter>登录时似乎只是第一个intent.这是日志:
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) }
Run Code Online (Sandbox Code Playgroud)
解:
在通过几十篇关于如何实现URL方案来打开你的PhoneGap应用程序的帖子,并且它们都不是非常健壮或正在工作之后,我将发布我的完整解决方案并希望有人发现它有用.
第一步:AndroidManifest.xml - 将此添加<intent-filter>到您的<activity>,将'urlScheme'更改为您喜欢的任何内容.在这种情况下,您可以单击指向urlScheme:///?key = val的链接,它将打开该应用程序.
<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>
Run Code Online (Sandbox Code Playgroud)
第二步:myApp.java - 在下面添加以下内容onCreate.如果您正在使用singleTask,请确保将您的intent逻辑放在onStart函数中(而不是onCreate像其他人那样大肆宣传),因为这样您就可以链接到您的应用程序,无论它是否已经运行.
@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);
}
Run Code Online (Sandbox Code Playgroud)
有关onNewIntent覆盖的说明,请参阅接受的答案.
Vla*_*nov 18
试着覆盖onNewIntent.问题是getIntent返回Intent开始的Activity,但不是最新的.但您可以使用setIntent方法覆盖它.
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7683 次 |
| 最近记录: |