Как передать параметры в Android Intent в новой схеме на Chrome?

У меня есть веб-приложение, вызывающее нативное приложение на Android с помощью намерения iframe, которое не работает в Chrome 25 в соответствии со следующим....

https://developers.google.com/chrome/mobile/docs/intents

Намерение было структурировано следующим образом...

Приложение: // ТипЗапроса = Тестирование &Type=123& т =0000000000

В новой схеме intent:// как мне передать параметры, перечисленные после app://, в собственное приложение? Я не смог найти пример.

4 ответа

С новой схемой вы можете передавать аргументы как дополнительные функции в приложение, но вы должны кодировать URI следующим образом:

<a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.myextra=mystring;end">Do Whatever</a>

Это передаст дополнительную строку под названием "myextra" со значением "mystring". Взглянув на код Android, мы увидим, как нужно кодировать дополнительные параметры. "S" в начале параметра "myextra" определяет его как строку. Другие типы могут быть:

String => 'S'
Boolean =>'B'
Byte => 'b'
Character => 'c'
Double => 'd'
Float => 'f'
Integer => 'i'
Long => 'l'
Short => 's'

Например, если мы хотим передать два дополнительных параметра, Integer и String, мы можем сделать это:

<a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.name=Perico%20de%20los%20Palotes;i.age=35;end">Do Whatever</a>

Обратите внимание, что вам нужно будет url-кодировать все параметры.

В вашем приложении для Android вы должны будете принять эти дополнения. В событии "onCreate" вашей Активности:

Bundle parametros = getIntent().getExtras();
if (extras != null){
    String name = extras.getString("name");
    Integer age = extras.getInt("age");

    if (name!=null && age!=null)
    {
       //do whatever you have to
       //...
    }
}else{
     //no extras, get over it!!
}

И, конечно же, добавьте фильтр android.intent.category.BROWSABLE в свой манифест, как показано в этой ссылке.

Для схемы URL:

appname://RequestType/?Type=123&tn=0000000000

Вы хотите сопоставить с целевым URL:

intent://RequestType/?Type=123&tn=0000000000#Intent;scheme=appname;package=com.example.appname;end

Вы больше не можете использовать iframe и собственный протокол для открытия собственного приложения.

Тем не менее, вы можете использовать существующий синтаксис intent:// для запуска и назначения и передачи данных, это дает дополнительное преимущество, заключающееся в том, что пользователь попадает в магазин Play, если он не установлен.

Вы либо кодируете данные в синтаксической части "пути", как описано, чтобы вы могли иметь intent://play/?a=1#Intent;......;end; или вы можете закодировать его как Extra.

Intents не работают после 4.4.4, так что это то, что я делаю для моего приложения.

создал собственную схему для запуска моей активности в AndroidManifest.xml со следующим фильтром намерений

1)

 <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="<<YOUR UNIQUE SCHEME(I SUGGEST YOUR PACKAGE NAME)"/>
</intent-filter>

2) Создайте URL-адрес рынка с альтернативным URL-адресом, который открывает ваше приложение по созданной выше пользовательской схеме.

market://details?id=<<your app package from AndroidManifest.xml>>&url=<<your app custom scheme from AndroidManifest.xml>>://yourdomain.com?encoded(p1=v1&p2=v2....etc)

это открывает магазин, если ваше приложение не установлено, и открывает приложение с данными намерений, если приложение уже установлено, с вашими декодированными параметрами.

Надеюсь это поможет

Другие вопросы по тегам