Управление DOM-элементами из приложения Android
Я пытаюсь получить контроль над элементами DOM Play / Pause html (в браузере, открытом на ПК) с устройства Android.
На странице HTML (в браузере Google Chrome) есть <video>
тег, чтобы я мог контролировать это так:
//js code
document.querySelector("video").play();
document.querySelector("video").pause();
Но я хочу, чтобы он запускался с устройства Android, поэтому я использую GCM.
Я прочитал здесь и получил некоторое понимание, но у меня все еще есть некоторые вопросы.
Во-первых, так как я пишу в затмении, и он не видит нет
document
переменная, выдает ошибку. Итак, как можно затмить признать, чтоelement
на странице HTML, так что я могу скомпилировать и установить APK на устройстве?Где мне указать URL страницы, с которой я хочу общаться? (отправить команды воспроизведения / паузы)
Для запуска JS внутри Java я использую Rhino. Я просмотрел примеры в документации, но все еще не уверен, что
@JSFunction
аннотации достаточно, чтобы объявить функцию js.
Вот мой код:
import com.alaa.chromote.util.SystemUiHider;
import com.google.android.gcm.GCMRegistrar;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;
import android.view.View.OnClickListener;
import org.mozilla.javascript.*;
import org.mozilla.javascript.annotations.*;
public class MainApplication extends Activity {
private final static String GCM_SENDER_ID = "484514826047";
private static final String LOG_TAG = "GetAClue::GCMIntentService";
private Button playButton;
private Button pauseButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_application);
playButton = (Button) findViewById(R.id.PlayButton);
pauseButton = (Button) findViewById(R.id.PauseButton);
playButton.setVisibility(View.INVISIBLE);
pauseButton.setVisibility(View.VISIBLE);
//connect to gcm
GCMRegistrar.checkDevice( this );
GCMRegistrar.checkManifest( this );
final String regId = GCMRegistrar.getRegistrationId( this );
if( regId.equals( "" ) ) {
GCMRegistrar.register( this, GCM_SENDER_ID );
}
else {
Log.v( LOG_TAG, "Already registered" );
}
Context.enter(); //start Rhino
setupListeners();
}
@JSFunction
public void play() { document.querySelector("video").play(); }
@JSFunction
public void pause() { document.querySelector("video").pause(); }
private void setupListeners()
{
playButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
play();
}
});
pauseButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
pause();
}
});
}
@Override
protected void onStop() {
Context.exit(); //stop Rhino
super.onStop();
}
}
Как мне продолжить отсюда?
1 ответ
Во-первых, поскольку я пишу в Eclipse, и он не видит переменную документа, он выдает ошибку. Так как же затмить распознавать этот элемент на HTML-странице, чтобы я мог скомпилировать и установить apk на устройстве?
answer: На вашем устройстве Android вы просто передаете сообщение браузеру Chrome. Ак переменная действия, которая установлена для воспроизведения или остановки. После этого приложение Chrome получит сообщение и будет действовать соответственно. Также вы можете отправить URL-адрес в качестве переменной в сообщении, если вы хотите иметь возможность воспроизводить разные URL-адреса.
Где мне указать URL страницы, с которой я хочу общаться? (отправить команды воспроизведения / паузы)?
ответ: Вы уже создали нужное приложение Chrome и убедились, что оно работает? Это должно проверить с облачным сервером Google для сообщений. Этот сервер отслеживает URL для вас.
Для запуска JS внутри Java я использую Rhino. Я просмотрел примеры в документации, но все еще не уверен, достаточно ли аннотации @JSFunction для объявления функции js.
ответ: Кажется, вы неправильно понимаете, что делает приложение для Android (отправляет действие воспроизведения) и что делает браузер Chrome (фактически воспроизводит фильм)
Надеюсь, мой ответ немного помог, отзывы приветствуются:)