Можно ли вызывать Activity из JavascriptInterface в Android?

#javascript #android #android-activity #cordova

#javascript #Android #android-активность #кордова

Вопрос:

Я новичок в phonegap и моем проекте, мне нужно вызвать activity из 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:

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

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

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

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

 <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 , и он должен фактически запустить вашу activity.

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

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

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

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

Комментарии:

1. Я использую ASP.NET MVC для создания веб-сайта, и я хочу передать параметры в программу phonegap, и я использую метод: shouldoverrideurlloading для загрузки активности Phonegap. Я использую ссылку: camera:param1=value1amp;amp;param2=value2 для передачи параметра.

2. Был ли где-нибудь вопрос в этом комментарии? 🙂