Вызов приложения Android из браузера - PullRequest
3 голосов
/ 13 декабря 2011

Я пытался вызвать приложение из браузера на Android 3.1 (Honeycomb) Вот ссылки, которые я пробовал, но ни одна из них не работала:

<a href="com.nk.myapp://movieid=95319">click me 1</a>

<a href="intent:#Intent;action=com.nk.myapp.detail;end">click me 2</a>

<a href=intent:#Intent;action=com.nk.myapp.detail;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;package=com.nk.myapp;end>click me 3</a>

Для 1-го и 2-го URL-адреса выдается «Веб-страница недоступна».

В третьем показывается Apps-market с поиском: pname: com.nk.myapp -> «Результат не найден».

Приложение все еще находится в разработке, поэтому его еще нет на рынке.

Вот так выглядит мой файл манифеста:

<activity
    android:label="@string/app_name"
    android:launchMode="singleTop"
    android:name=".MainActivity"
    android:screenOrientation="landscape" >
    <intent-filter >
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter >
        <action android:name="com.nk.myapp.action.DIALOG" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <intent-filter >
        <action android:name="android.intent.action.SEARCH" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
<activity
    android:name=".WebViewActivity"
    android:screenOrientation="landscape" >
    <intent-filter>
        <data android:scheme="com.nk.myapp" />
        <action android:name="com.nk.myapp.detail" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Дайте мне знать, если вы поймете, что я делаю неправильно.

Ответы [ 2 ]

6 голосов
/ 28 апреля 2012

Вот еще один способ сделать это:

Чтобы узнать uri, вот что я добавил в Test Apk:

Intent i = new Intent();
i.setAction("com.appname.NK_CUSTOM_ACTION");
i.putExtra("movie_id", "123456");
Log.e("IntentTest", i.toUri(Intent.URI_INTENT_SCHEME));

Который производит эту строку:

intent:#Intent;action=com.appname.NK_CUSTOM_ACTION;S.movie_id=123456;end

HTML-страница имеет эту ссылку:

<a href="intent:#Intent;action=com.appname.NK_CUSTOM_ACTION;S.movie_id=123456;end">click to load</a>

И измените файл манифеста на

<activity
    android:name=".TestActivity"
    android:screenOrientation="sensorLandscape" >
    <intent-filter>
        <action android:name="com.appname.NK_CUSTOM_ACTION" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
</activity>

В TestActivity вы получаете movie_id в приведенном ниже коде:

Intent intent = getIntent();
String data = intent.getStringExtra("movie_id");
2 голосов
/ 20 января 2012

Решил проблему некоторое время назад, на случай, если это кому-нибудь понадобится:

Вот так выглядит моя html-страница (которая загружается из браузера на устройстве):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Andriod Sample</title>
    <script type="text/javascript">

        function getQuerystring(key, default_) {
            if (default_ == null) default_ = "";
            key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");
            var qs = regex.exec(window.location.href);
            if (qs == null)
                return default_;
            else
                return qs[1];
        }

        function invokeApp(xyz) {
            var id = getQuerystring('id');
            var contentType = getQuerystring('contentType');
            var url = "myAppSceme://movie?id=" + id ;    
            document.getElementById('ref').href = url;                
        }

    </script>
</head>
<body>
<div>
<a href="#" id="ref" onclick="invokeApp(this);" >click me!</a>  

</div>
</body>
</html>

И мой файл манифеста выглядит так:

<activity android:name=".DetailActivity" android:screenOrientation="sensorLandscape" >
  <intent-filter >
    <data android:scheme="myAppSceme" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" /> 
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

Код в DetailActivity:

String id = getIntent().getDataString().replace("myAppSceme://movie?id=", "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...