#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. Был ли где-нибудь вопрос в этом комментарии? 🙂