2016-12-03 5 views
0

Я установил фильтр намерений для своей активности, чтобы открыть активность, а также открыть действие, которое вызывается URL. URL содержит специальные символы, такие как знак вопроса и амперсанд. Я не могу его получить, и андроид не знает мое приложение в качестве хоста для этого запроса. Я использую Unicode и HTML-объект для этой проблемы.Специальный символ в схеме активности Android

+0

Можете ли вы добавить пример, как выглядит ваш URL? – arkus

+0

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

+0

Почему там нет слэшей ('//') после 'http:'? Я думаю, что это должно выглядеть так: http: //www.example.com/index.php? Page = share & type = album & id = 34' Не могли бы вы также предоставить свой фильтр намерений из манифеста и как вы обрабатываете намерение открытия с помощью этого URL-адреса ? – arkus

ответ

0

Вам не хватает www в атрибуте data тега host. Он должен выглядеть следующим образом:

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

Также не включают Params в pathPrefix, вы можете извлечь их в коде активность:

@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)); 
     } 
    } 

Попробуй с ADB (примечание сбежавшего &):

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 

Выход:

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

Мне нужно управлять ссылками, которые имеют параметры, поэтому я не могу игнорировать это, наконец, я решаю проблему с библиотекой airbnb/DeepLinkDispatch, но все же у меня есть вопрос без ответа. Спасибо –