Я читал о намерениях в андроиде, но здесь идет мой вопрос. Я хотел бы запустить приложение на своем телефоне на базе Android щелчком ссылки в веб-браузере. Пример: Если ссылкой является "mycam://http://camcorder.com", "mycam://" действует как некоторый "тег" для запуска моего приложения, но я хотел бы передать "http://camcorder.com" как строку к тому приложению на запуске.
Справка!
Спасибо!
в исходном коде приложения Browser есть метод, :
public boolean shouldOverrideUrlLoading(WebView view, String url) { ... }
После нажатия на url, который еще не начал загружаться:
преобразует url в intent
Intent intent;
// выполняем общий разбор URI, чтобы превратить его в Intent.
try {
intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
} catch (URISyntaxException ex) {
Log.w("Browser", "Bad URI " + url + ": " + ex.getMessage());
return false;
}
если он не начинается с market:// (или какой-то предопределенной схемы), попробуйте startActivityIfNeeded()
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setComponent(null);
try {
if (startActivityIfNeeded(intent, -1)) {
return true;
}
} catch (ActivityNotFoundException ex) {
// игнорируем ошибку. Если ни одно приложение не может обработать URL,
// например about:blank, предположим, что браузер может его обработать.
}
Это очень полезная информация! Я воспроизвожу ситуацию в простом коде:
Intent intent = Intent.parseUri("mycam://http://camcorder.com", Intent.URI_INTENT_SCHEME);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setComponent(null);
System.out.println(intent);
Результат даст мне подсказки для написания активности с intent-фильтром:
<activity android:name=".MyCamActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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="mycam" />
</intent-filter>
</activity>
PS. не забудьте android.intent.category.DEFAUL .
Наконец, ваша активность может вызываться по mycam:// scheme
mycam: // http://camcorder.com не является допустимым URI, и создание схем довольно страшно, если два приложения выбирают одно и то же. Было бы лучше, если бы вы зарегистрировали свою активность в качестве обработчика для определенного URI (например, http://www.example.com/camcorder, конечно, заменив свой собственный домен). Это можно сделать с помощью тега в теге