Android: фильтр намерения для конкретного шаблона Uri - PullRequest
3 голосов
/ 06 ноября 2010

Мне нужно, чтобы приложение Android запустило определенную активность в моем приложении, отвечая на следующие данные Uri из отправленного намерения:

http://www.example.com/redirect.aspx?customurl=example%3a%2f%2f%3fop%3dexampledetail%26stuff%3d12345%26morestuff%3dI%2520Love%25Android

Если я используюследуя в моем манифесте (для Действия, которое я хочу ответить на Намерение), я могу захватить это, но выскакивающий элемент выскакивает (что я не хочу):

<intent-filter>
 <action android:name="android.intent.action.VIEW" />
 <data android:scheme="http" android:host="www.example.com" />
 <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

Так как я не 'Я не хотел, чтобы выбирался всплывающий список, я попытался использовать в теге android: pathPattern или android: pathPrefix для дальнейшей фильтрации, чтобы убедиться, что только мое приложение отвечает, но оно не работает для меня.

Может ли кто-нибудь помочь мне сделать это?

Ответы [ 2 ]

7 голосов
/ 06 ноября 2010

Если я использую в своем манифесте следующее (для Действия, которое я хочу ответить на Намерение), я могу перехватить это, но всплывающее окно выбора (которого я не хочу):

Большинство Android-устройств будут иметь браузеры 1+. Пользователь может посетить этот URL-адрес в одном из этих браузеров, а не в вашем приложении. Именно поэтому появляется выбор. Более того, было бы серьезной дырой в безопасности, если бы разработчики могли взломать любой URL-адрес HTTP, который они хотели.

Теперь, если вы владеете веб-сайтом, на который ссылается этот URL-адрес, вы можете использовать прием, который использует сканер штрих-кода: использовать обнаружение в браузере, чтобы помещать смарт-коды на эту страницу, которые при просмотре в браузере Android объясняет пользователю почему они должны позволять вашему приложению обрабатывать этот URL в будущем.

6 голосов
/ 16 ноября 2010

Похоже, что вы имеете дело с данными, которые поступают из вашего собственного приложения, поэтому не используйте свой "частный" URL в качестве цели намерения, а создайте конкретный компонент для намерения и присвойте ему URL своих данных как ДОПОЛНИТЕЛЬНОпараметр.

Что-то вроде:

Uri privateUri = Uri.parse("http://yourserver.com/path/to/data");
Intent i = new Intent(context, yourActivity.class);
i.putExtra("DATA_URI", privateUri);
startActivity(i);

В yourActivity.class вам просто нужно получить Uri со следующим кодом:

Uri privateUri = (Uri) getIntent().getParcelableExtra("DATA_URI");
...