Как передать параметры в 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)
это открывает магазин, если ваше приложение не установлено, и открывает приложение с данными намерений, если приложение уже установлено, с вашими декодированными параметрами.
Надеюсь это поможет