Приложение запуска с URL

Я читал о намерениях в андроиде, но здесь идет мой вопрос. Я хотел бы запустить приложение на своем телефоне на базе Android щелчком ссылки в веб-браузере. Пример: Если ссылкой является "mycam://http://camcorder.com", "mycam://" действует как некоторый "тег" для запуска моего приложения, но я хотел бы передать "http://camcorder.com" как строку к тому приложению на запуске.

Справка!

Спасибо!

6
задан Carlos Portes 14 June 2010 в 16:28
поделиться

2 ответа

в исходном коде приложения Browser есть метод, :

public boolean shouldOverrideUrlLoading(WebView view, String url) { ... }

После нажатия на url, который еще не начал загружаться:

  1. преобразует 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;
    }
    
  2. если он не начинается с 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

5
ответ дан 10 December 2019 в 02:42
поделиться

mycam: // http://camcorder.com не является допустимым URI, и создание схем довольно страшно, если два приложения выбирают одно и то же. Было бы лучше, если бы вы зарегистрировали свою активность в качестве обработчика для определенного URI (например, http://www.example.com/camcorder, конечно, заменив свой собственный домен). Это можно сделать с помощью тега в теге в AndroidManifest.xml . Когда пользователь щелкает ссылку, он попадает в ваше приложение. Таким образом, вы также можете разместить настоящую страницу в Интернете, давая указание людям установить ваше приложение или что-то еще.

4
ответ дан 10 December 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: