Nexus7を外部モニタ化した時に邪魔だったVNCクライアントのナビゲーションバー消せないか調べてみた。

結論から言うとAndroid/4.1で追加されたAPIを使えばアプリ単位で消せる。
OS全体で消そうとするとroot権が必要になる。

前回試したアプリの中で androidVNC がソース公開されていたのでこれに 自前のパッチを当てて試したところ 800x1280 の完全な全画面モードでVNCを使う事ができた。

終了。

じゃあ、野良ビルドでも公開しようかなと思ったらここで問題が。
apkを作ってアプリを実機にインストールしようても 「×アプリはインストールされません。」のメッセージが出る。

eclipseからデバッグモードでのインストールは問題無い。

うーん、一度同じアプリをGooglePlayからインストールしているから 正規の証明書が残ってるって事だろうか?
これ以上の情報が無く対処しようがないので野良ビルドの公開は諦めとします。

=> 出来ました Nexus7を外部モニタ化 (3)

...

せっかくなのでビルド手順はメモして置きます。

androidVNCのSVNからプロジェクトを2つチェックアウトします。

  • http://android-vnc-viewer.googlecode.com/svn/trunk/eclipse_projects/
    • androidVNC
    • ZoomerWithKeys

trunkの日付が 2011年になっているのでこのプロジェクトは活動停止中っぽいです。

ビルドには sqlitegen というプラグインが必要です。 (専用プラグインのような気がします。)
以下のページの案内にしたがってインストールしてください。

以下のパッチを当てます。

Index: AndroidManifest.xml
===================================================================
--- AndroidManifest.xml (revision 204)
+++ AndroidManifest.xml (working copy)
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="android.androidVNC" android:installLocation="auto" android:versionCode="13" android:versionName="0.5.0">
+    package="android.androidVNC" android:installLocation="auto" android:versionCode="14" android:versionName="0.5.0">
     <application android:icon="@drawable/icon" android:label="androidVNC" android:debuggable="false">
-       <activity android:label="@string/app_name" android:name="androidVNC" android:screenOrientation="landscape">
+       <activity android:label="@string/app_name" android:name="androidVNC" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"></action>
                <category android:name="android.intent.category.LAUNCHER"></category>
            </intent-filter>
        </activity>
-       <activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="VncCanvasActivity">
+       <activity  android:configChanges="orientation|keyboardHidden" android:name="VncCanvasActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"></action>
            </intent-filter>
Index: src/android/androidVNC/VncCanvasActivity.java
===================================================================
--- src/android/androidVNC/VncCanvasActivity.java   (revision 204)
+++ src/android/androidVNC/VncCanvasActivity.java   (working copy)
@@ -39,6 +39,7 @@
 import android.graphics.PointF;
 import android.net.Uri;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.SystemClock;
 import android.util.Log;
 import android.view.KeyEvent;
@@ -607,6 +608,23 @@

        vncCanvas = (VncCanvas) findViewById(R.id.vnc_canvas);
        zoomer = (ZoomControls) findViewById(R.id.zoomer);
+       
+       vncCanvas.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener(){
+           @Override
+           public void onSystemUiVisibilityChange(int visibility) {
+               if (visibility == View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) return;
+               
+               Handler handler = new Handler();
+               handler.postDelayed(new Runnable() {
+                  @Override
+                  public void run() {
+                       vncCanvas.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
+                   }
+               }, 3000);
+           }
+       });
+       vncCanvas.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
+

        vncCanvas.initializeVncCanvas(connection, new Runnable() {
            public void run() {

プロジェクトの「プロパティ」から「Android」を選んでターゲットを 4.2.2 にします。

これでビルドできるはずです。
尚、「自動でビルド」のチェックは何故か必須です。