我有一个php文件,它会查找userAgent
字符串,并使用正确的Intent
来回复以启动我的应用程序。
php文件是:
<SCRIPT language=javascript>
function redirectOnUserAgent() {
var params = {};
if (location.search) {
var parts = location.search.substring(1).split('?');
}
var mapping = {
// scheme : market://details?id=<package_name>
'android': 'intent://www.example.com/ag?' + parts + '#Intent;scheme=http;package=com.my.example;end',
...
}
var userAgent = navigator.userAgent.toLowerCase();
for (var dev in mapping) {
if (userAgent.search(dev) != -1) {
window.location = mapping[dev];
return;
}
}
//else redirect to another page, or nothing
window.location = 'http://my.example.com';
}
</SCRIPT>
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>Redirect to AG</title>
</head>
<BODY onload="redirectOnUserAgent();">
</BODY>
</html>
此文件从my.example.com/redirect_to_ag?siteId=xx&data=yy
到目前为止,我正在从QRCode阅读器读取此URL,因此读者会给我网址,我点击打开,然后它会自动解释intent
以启动应用程序。
现在,我想通过NFC标签做同样的事情,看到它不起作用。 但实际上,当我在Android Chrome网址字段中手动输入网址时,没有任何反应。 而且我不知道如何看到Android Chrome中会发生什么。 当我将Android Studio连接到设备时,如果我从QRCode阅读器读取网址,我会看到以下消息:
02-10 13:06:46.959 32710-32710/? W/cr_Chrome: Bad URI 'intent://www.example.com/ag?siteId=xx&data=yy#Intent;scheme=http;package=com.my.example;end'
02-10 13:06:46.962 607-1138/? I/ActivityManager: START u0 {act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=http://www.example.com/... flg=0x10000000 pkg=com.my.example cmp=com.my.example/.MainActivity (has extras)} from uid 10035 on display 0
02-10 13:06:47.004 607-4281/? I/ActivityManager: moveTaskToBack: TaskRecord{cb23831 #882 A=com.android.chrome U=0 sz=1}
02-10 13:06:47.042 607-4505/? I/ActivityManager: Start proc 392:com.android.chrome:sandboxed_process1/u0i82 for service com.android.chrome/org.chromium.content.app.SandboxedProcessService1
02-10 13:06:47.199 607-4505/? I/ActivityManager: Process com.android.chrome:sandboxed_process0 (pid 32747) has died
02-10 13:06:47.199 607-4505/? W/ActivityManager: Scheduling restart of crashed service com.android.chrome/org.chromium.content.app.SandboxedProcessService0 in 1000ms
02-10 13:06:47.226 607-617/? I/ActivityManager: Start proc 406:com.ndguide.ndguide/u0a258 for activity com.ndguide.ndguide/.MainActivity
02-10 13:06:47.264 607-673/? D/ConnectivityService: releasing NetworkRequest NetworkRequest [ id=320, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED] ]
然后应用程序启动。好!
但是当我在浏览器的地址栏中手动输入网址时,我可以看到:
02-10 13:11:43.635 5186-5186/? W/cr_Chrome: Bad URI 'intent://www.example.com/ag?siteId=xx&data=yy#Intent;scheme=http;package=com.my.example;end'
02-10 13:11:43.644 5186-5186/? I/chromium: [INFO:CONSOLE(0)] "The navigation on intent://www.example.com/ag?siteId=xx&data=yy#Intent;scheme=http;package=com.my.example;end is blocked.", source: http://my.example.com/redirect_to_ag?siteId=xx&data=yy (0)
没有更多的事情发生。
那么你能告诉我是什么阻止Chrome在手动输入同一个url时正确解释意图吗?
修改
我真的不知道它是否有用,但是当我使用QRCode Reader并使用Intent Intercept工具时,当我点击阅读器中的Open the url
时,Intent Intercept会给我以下信息
ACTION:
android.intent.action.VIEW
DATA:
http://my.example.com/redirect_to_ag?siteId=xx&data=yy
MIME:
null
URI:
intent://www.example.com/ag?siteId=xx&data=yy#Intent;scheme=http;launchFlags=0x13080000;end
FLAGS:
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
FLAG_ACTIVITY_FORWARD_RESULT
FLAG_ACTIVITY_PREVIOUS_IS_TOP
FLAG_ACTIVITY_RECEIVER_FOREGROUND
EXTRAS:
none
MATCHING ACTIVITIES:
Chrome (com.android.chrome - com.google.android.apps.chrome.Main)
然后,当我点击SEND EDITED CONTENT
到Chrome时,应用程序就会启动。
好吧,在我身边,我真的不知道它对我有什么帮助......
同样,我的问题是要了解为什么当我在Chrome的地址栏中手动输入网址时,它没有发生任何事情。