我有一个包含my.test.app
包名的Android应用。我想生成一个QR码,其中包含:
是否有可能这样做,以便任何Android QR扫描仪都可以处理上述操作?我找不到能够实现两者的问题/答案......谢谢!
编辑 - 到目前为止我做了什么 我将以下内容添加到我的“App to open”清单中:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:exported="true" >
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="my.test.app"/>
</intent-filter>
</activity>
...
</application>
当我生成内容为my.test.app://test
的QR码并进行扫描时,QR阅读器应用会显示正确的内容,但无法打开我的应用!
第二次编辑 - 尝试了一些网址
我只是尝试在我的Manifest的intent-filter中设置一些其他URL:
<data android:scheme="http" android:host="play.google.com" android:pathPrefix="/store/apps/details?id=my.test.app"/>
http://play.google.com/store/apps/details?id=my.test.app
2. <data android:scheme="http" android:host="myapp.com" android:pathPrefix="/barcode"/>
http://myapp.com/barcode
时打开我的应用! 但问题是,扫描时未安装应用程序时没有解决方案/目标地址!也许可以通过HTML网站进行重定向,但我不想为此使用HTML服务器!答案 0 :(得分:2)
您可以创建一个可由您的应用识别的网址,并自动将其打开(您可以在清单中声明这些内容)。 您可以将该页面显示为“将您重定向到Google Play ...”,然后在几秒钟内重定向。
因此,如果他们安装了应用,则会触发打开该网址,如果未打开,则会留在浏览器中并重定向到Google Play。
答案 1 :(得分:2)
这是我针对同一问题找到的解决方案: 1.我创建了一个带有2个徽章的简单http登陆页面,第一个用于Google-play android应用,第二个用于Apple App Store应用。 (https://www.example.com/landingPage) 2.我在清单中添加了以下几行(如上所述):
app:boxBackgroundMode="filled" app:boxStrokeWidth="0dp"
因此,当您首次捕获QrCode时,您将通过浏览器定向到登录页面,并可以选择要下载和安装的应用程序。下次您捕获到设备的QrCode时,将显示用于执行它的应用程序列表,您将在此处找到刚刚安装的应用程序。 这对我来说很好
答案 2 :(得分:1)
you can through a html page
please note Android_URL like [scheme]://[host]/[path]?[query]
scheme:which App you want to start
host:note
path:key
query:Key and value
Android_URL = "myapp://www.test.com/openwith?uid=123";
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta content="telephone=no" name="format-detection" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
<title>open or download App</title>
<script src="assets/plugins/jquery-1.8.3.min.js" type="text/javascript"></script>
</head>
<body>
<a id="vlink" onClick="try_to_open_app()" style="display:none"></a>
<script>
var browser={
versions:function(){
var u = navigator.userAgent, app = navigator.appVersion;
};
}()
}
var Android_URL = "myapp://www.test.com/openwith?uid=123";
function open_link() {
window.location=mtUrl;
}
function try_to_open_app() {
setTimeout('open_link()', 500);
}
//Android
else if(browser.versions.android){
document.getElementById("vlink").setAttribute("href",Android_URL);
document.getElementById("vlink").click();
}
else{
open_link();
}
</script>
</body>
</html>
**android**
<activity
android:name="net.laobanquan.im.splash.StartActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- new in -->
<activity
android:name="net.test.WebStartActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.VIEW"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<category android:name="android.intent.category.BROWSABLE"></category>
<data android:scheme="myapp" android:host="www.test.com" android:path="/openwith"/>
</intent-filter>
</activity>
**activity**
String action = getIntent().getAction();
String uid = null;
if(Intent.ACTION_VIEW.equals(action)){
Uri uri = getIntent().getData();
if(uri != null){
uid = uri.getQueryParameter("uid");
}
}
Log.d(TAG, uid);
答案 3 :(得分:0)
您不会找到会触发打开应用程序意图的QR扫描仪应用程序。
包括我在内的大多数QR码扫描仪实施基本意图(呼叫,http url,联系人等。)
QR App开发人员应自行决定是否打开您的应用。
仅供参考,QR码扫描结果的所有内容均以字符串的形式返回,因此大多数Qr扫描应用程序无法处理他们查看的Android Core中的所有意图。字符串的结构并触发它们可以承受的基本意图。
如果扫描结果包含以“ http”开头的字符串,则我们将触发浏览器意图等。
您应该只生成包裹名称的QR码,并希望QR Code Scanner Dev实施可识别包裹的全局Intent。
如果假设他们实现了通过检测程序包打开应用程序的全局意图,则应生成应用程序包名称的QR码,例如my.test.app
这是从扫描仪一侧实现该意图的方式
//它会检查该应用程序是否存在于手机中,否则会午餐,如果没有在手机中安装google play应用程序,它将在手机中的Google Play应用程序中搜索该应用程序并避免崩溃。它将使用浏览器在Google Play商店中搜索该应用:
public void LunchAnotherApp(String PackageNameFromScan) {
final String appPackageName = PackageNameFromScan;
Intent intent = getPackageManager().getLaunchIntentForPackage(appPackageName);
if (intent != null) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else {
onGoToAnotherInAppStore(intent, appPackageName);
}
}
public void GoToAnotherInAppStore(Intent intent, String appPackageName) {
try {
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + appPackageName));
startActivity(intent);
} catch (android.content.ActivityNotFoundException anfe) {
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("http://play.google.com/store/apps/details?id=" + appPackageName));
startActivity(intent);
}
}
答案 4 :(得分:0)
问题似乎是在扫描QR时要求打开应用程序,如果未安装应用程序,请打开网页。通常,用户会在手机中打开某些应用程序以扫描QR码。
Apple已开发出名为deep linking的功能,如果您使用的是Apple iOS 11,则当通过手机摄像头扫描QR图像时,它将打开注册的应用程序;否则,它将打开一个网站的网络浏览器。或重定向到应用商店以下载应用(基于QR中包含的后备设置)。
对于使用较早操作系统的用户,“打开您的QR码扫描应用程序进行扫描”。 (照常)。对于那些没有QR扫描应用程序的用户,他们需要下载一个(扫描QR码),或升级到支持与Deep Linking类似功能的设备。
这两种方法似乎都有相同的目标(通过使用数据扫描QR或由用户打开以扫描QR中的数据来打开应用)。