2016-03-18 15 views
5

Ho un'app per Android con nome pacchetto come my.test.app. Voglio generare un codice QR, che:Avvia app o Play Store eseguendo la scansione del codice QR

  • Se è installata la mia app: Aprire l'applicazione
  • Se non ancora installato: Aprire la pagina app in PlayStore

Esiste un modo possibile per fare questo, in modo che qualsiasi scanner QR Android possa gestire le azioni sopra descritte? Non sono riuscito a trovare una domanda/risposta che comprenda entrambi ... Grazie!

EDIT - Quello che ho fatto finora ho aggiunto il seguente al mio "App per aprire" manifesta:

<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> 

Quando ho generare un codice QR con contenuti my.test.app://test ed eseguirne la scansione, il lettore QR l'app mostra il contenuto corretto, ma non apre la mia app!

2nd EDIT - Ho provato alcuni URL

ho solo cercato di impostare un paio di altri URL nella mia del manifesto intent-filtro:

  1. <data android:scheme="http" android:host="play.google.com" android:pathPrefix="/store/apps/details?id=my.test.app"/>
    • questo mi chiede se aprire l'URL nel browser o nel PlayStore, se eseguo la scansione del codice QR con il contenuto http://play.google.com/store/apps/details?id=my.test.app
    • MA NON APRIRÀ LA MIA APP SE INSTALLATA!


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

  • Si apre la mia app durante la scansione del codice QR http://myapp.com/barcode! MA il problema sarebbe, che non esiste alcuna soluzione/indirizzo di destinazione quando l'applicazione non è installata durante la scansione! Un reindirizzamento tramite sito HTML sarebbe possibile, ma non voglio usare un server HTML per questo!
+0

So che è possibile ottenere almeno un URI nel Play Store. Non sono sicuro di avviare la tua app se è installata –

+1

Possibile duplicato di [Avvio applicazioni Android da QR Code con parametri] (http://stackoverflow.com/questions/10258633/android-start-application-from-qr- code-with-params) –

+0

Potrebbe essere necessario aggiungere un filtro Intent al Manifest per un URI personalizzato come suggerito qui. http://stackoverflow.com/a/8778268/2308683 –

risposta

2

È possibile creare un URL che verrà riconosciuto dall'app e aprirlo automaticamente (è possibile dichiararlo nel file manifest). Si potrebbe rendere quella pagina visualizzata qualcosa come "Reindirizzamento a Google Play ...", e quindi reindirizzare in pochi secondi.

Quindi, se hanno installato l'applicazione, l'URL potrebbe attivarlo aprendolo, se non è aperto, rimarrà nel browser e reindirizzerà a Google Play.

+0

Sì, questa sarebbe una possibile soluzione. Il problema sembra essere che le app del lettore QR hanno comportamenti diversi durante la scansione dei tag con il proprio schema. –

+0

Non è necessario un proprio schema. Basta usare un indirizzo come 'http: // myapp.com/barcode' –

+0

Ok, ho provato qualche altro URL, vedere la mia seconda modifica sopra nella domanda. –

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); 
+0

Ciò aprirà l'app se è già installata sul mio dispositivo, ma non funzionerebbe se non fosse ancora installata, wouldn ' vero? Anche io non voglio usare un server web per questo. Ho bisogno di una "soluzione nativa per codice android e qr" –

Problemi correlati