Можно ли вызвать Activity из JavascriptInterface в Android? - PullRequest
0 голосов
/ 30 сентября 2011

Я новичок в phonegap и моем проекте, мне нужно вызвать действие из javascript на html-странице, возможно ли это?

  


    public void capturePhoto() {
            JavascriptInterface.this.runOnUiThread(new Runnable() {
               @Override
               public void run() {              
                   try{
                        Intent i = new Intent(JavascriptInterface.this, GetPicture.class);                  
                        startActivity(i);
                   }catch(Exception e){
                       Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_SHORT).show();
                   }

               }
            });
         }


1 Ответ

0 голосов
/ 30 сентября 2011

Я не настолько знаком с веб-программированием на Android или с интерфейсами javascript, поэтому я не знаю, возможно ли запустить произвольное намерение с ними.

Однако я предполагаю, что у вас есть какой-то способ просто открыть ссылку. И если вы обнаружите, что иначе невозможно запустить действие, вы все равно можете получить что-то работающее, используя собственную схему URI.

По сути, идея заключается в том, что вы добавляете фильтр намерений к действию, которое вы хотите запустить, который регистрирует пользовательскую схему URI для этого действия. А затем, когда вы попытаетесь открыть ссылку с использованием этой схемы, Android отобразит ее в целях android.intent.action.VIEW для вашей активности.

Например, если у вас есть следующее в фильтре намерений для действия, которое вы хотите запустить:

<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="penroser"/>
</intent-filter>

Затем вы можете запустить URL-адрес, например penroser:BLAH, и он действительно должен запустить вашу деятельность.

Однако вышеизложенное предполагает, что вы можете добавить фильтр намерений к действию, которое хотите запустить. Однако, если вы хотите запустить более общее намерение или запустить действие, которое вы не контролируете, это усложнит ситуацию.

В этом случае вы можете определить действие «трамплин», целью которого является получение пользовательских намерений URI, а затем декодировать некоторую информацию о намерениях, используя определенный вами формат, а затем запустить намерение на основе этого декодированного информация.

Например, предположим, что вы зарегистрировали пользовательскую схему URI launchactivity:, и затем вы можете запустить ссылку, например: launchactivity://activity?component=com.example.MyActivity, а затем иметь некоторую логику анализа в Spring-board Activity, которая анализирует имя компонента из URI и запускает намерение для этого компонента.

В зависимости от того, что именно вам нужно, вы сможете передавать любые намеренные данные в launchactivity: URL

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...