通过扫描QR码启动应用程序或Play商店

时间:2016-03-18 08:30:13

标签: android google-play qr-code

我有一个包含my.test.app包名的Android应用。我想生成一个QR码,其中包含:

  • 如果我的应用已安装:打开应用
  • 如果尚未安装:在PlayStore中打开应用页面

是否有可能这样做,以便任何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:

  1. <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
    • 扫描二维码,请询问我是否在浏览器或PlayStore中打开网址
    • 但如果安装不会打开我的应用程序!

  2.  2. <data android:scheme="http" android:host="myapp.com" android:pathPrefix="/barcode"/>

    • 这会在扫描QR码http://myapp.com/barcode时打开我的应用! 问题是,扫描时未安装应用程序时没有解决方案/目标地址!也许可以通过HTML网站进行重定向,但我不想为此使用HTML服务器!

5 个答案:

答案 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"
  1. 我已经从URL https://www.example.com/landingPage生成了一个QrCode。您最终可以在末尾添加一些参数,以便将来在应用程序中处理(https://www.example.com/landingPage&param1=value1等)。

因此,当您首次捕获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中的数据来打开应用)。