2016-12-03 3 views
0

J'ai défini un filtre d'intention pour mon activité afin d'ouvrir l'activité, tandis que l'activité est ouverte lorsque l'URL est appelée. URL contient des caractères spéciaux comme le point d'interrogation et l'esperluette je ne peux pas l'obtenir et Android ne connais pas mon application en tant qu'hôte pour cette demande. J'utilise Unicode et l'entité HTML pour ce problème est resté non résolu.Caractère spécial dans le schéma d'activité Android

+0

Pouvez-vous ajouter un exemple à quoi ressemble votre URL? – arkus

+0

http: www.example.com/index.php? Page = share & type = album & id = 34 –

+0

pourquoi il n'y a pas de barre oblique ('//') après 'http:'? Je pense que cela devrait ressembler 'http: //www.example.com/index.php? Page = partager & type = album & id = 34' Pourriez-vous également fournir votre intention-filtre du manifeste et comment vous gérez l'intention d'ouverture avec cette URL ? – arkus

Répondre

0

Il vous manque www dans l'attribut host de la balise data. Il devrait ressembler à ceci:

<intent-filter android:label="@string/app_name"> 
    <action android:name="android.intent.action.VIEW"/> 

    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 

    <data 
     android:host="www.example.com" 
     android:pathPrefix="/index.php" 
     android:scheme="http"/> 
</intent-filter> 

Aussi ne comprennent pas params dans pathPrefix, vous pouvez les extraire dans le code d'activité:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Uri data = getIntent().getData(); 
    if(data != null) { 
     Log.d(TAG, "onCreate: " + data.toString()); 
     Set<String> names = data.getQueryParameterNames(); 
     for(String name : names) { 
      Log.d(TAG, "onCreate: param " + name + ": " + data.getQueryParameter(name)); 
     } 
    } 

test avec adb (note échappé &):

adb shell am start -W -a android.intent.action.VIEW -d "http://www.example.com/index.php?page=share\&type=album\&id=34" com.example.myapplication 

sortie est:

12-03 13:10:41.924 32595-32595/com.example.myapplication D/MainActivity: onCreate: http://www.example.com/index.php?page=share&type=album&id=34 
12-03 13:10:41.924 32595-32595/com.example.myapplication D/MainActivity: onCreate: param page: share 
12-03 13:10:41.924 32595-32595/com.example.myapplication D/MainActivity: onCreate: param type: album 
12-03 13:10:41.924 32595-32595/com.example.myapplication D/MainActivity: onCreate: param id: 34 
+0

J'ai besoin de gérer les liens qui ont params donc je ne peux pas ignorer cela, enfin je résous le problème avec la bibliothèque airbnb/DeepLinkDispatch, mais j'ai encore ma question sans réponse. Je vous remercie –