Home About
Android , Chromebook , Note Taking

ドラッグアンドドロップを使って Android アプリから Web にデータを転送する

Android の手描きアプリで描いたスケッチを Webアプリに転送できないか試している。 とりあえず最低限動くものができた。

drag and drop, transfer handwritten data to web

Watch this demo on YouTube

上の動画は、ドラッグアンドドロップ(以後 DnD)テスト用の Android アプリの View に手描きしたコーヒーカップを Web ページにドロップしたところ。Web ページ側はもちろんドロップを受け付けるコードが仕込んである。

Web ページ側の実装 JavaScript 部分:

function dragover_handler(ev) {
    ev.preventDefault();
    ev.dataTransfer.dropEffect = "copy";
}

function drop_handler(ev) {
    ev.preventDefault();
  
    const data = ev.dataTransfer.getData("text/plain");
    const obj = JSON.parse(data);
    const strokes = obj.strokes;

    // 以下で strokes を canvas に描画する.
    ...
}

Web ページ側の実装 HTML 部分:

<div style="width: 510px; height:460px; border-color: #933; border-style: dashed; padding: 5px;">
  <canvas
    id="myCanvas"
    ondrop="drop_handler(event)"
    ondragover="dragover_handler(event)"
    width="500"
    height="450"></canvas>
</div>

Android OS 上では問題なく動くものの、Chromebook 上で起動した そのAndroid アプリから Chrome へ ドラッグアンドドロップすると、 ドラッグ時に表示されるアイコン(ドラッグシャドー)が意図通り表示されないことがわかった。 このアプリを ChromeOS 上で使うことを想定していたのでこれは少なからずショックである。

そこで、WSA(Windows Subsystem for Android) ではどうなのだろうか?と思い試したところ、ChromeOS より更に状況は悪く、 ドラッグシャドーが全く表示されないだけでなく、Webへのドロップが一切行われないようです。 なお、WSA上で起動したその手描きアプリ内の DnD はドラッグシャドーが表示されないだけで、意図通り DnD はできていました。

DnDの本題とは話題が少しそれますが、Windows11 の WSA で気になったのは電池の減り具合のさらなる悪化です。 試したのは、Surface GO 3 (8GBモデル) ですが、 WSAとWSLも同時に起動している、などの事情もあるとは思いますが、1時間半程度作業しただけでフル充電から50%程度まで バッテリーが消耗してしまいました。 このペースでは 3時間しか使えません。 普段 WSLのターミナルでリモートサーバに接続してコーディングしているときは 5〜6時間程度はバッテリーが持続したのですが、 3時間は厳しいですね。 5〜6時間でも短いと感じているのに。 もっとも、WSL と WSA の2つの仮想マシンを起動しているのに、文句言うなという話かもしれません。

ペン入力の感触としては、Chromebook の USI 2.0 よりも Surface Pen の方がよいです。 とはいえ、これらを Galaxy Tablet の Android の S Pen と比べると50歩100歩といったところで、 S Pen の書き味のよさとはまるで比較にならないというのが正直な感想です。

ただし、この手描きアプリで想定している「ちょっとした説明用(イラスト)を描く」という点では、 Chromebook USI 2.0 も Surface GO 3 の Surface Pen もありです。 特にテキストベースのメモを書くなどの作業をメインにしつつ、一部で説明用にイラストを添えるという使い方であれば、 全体としてキーボードとの相性の良い Chromebook / Windows11 は十分及第点といっても過言ではない。 逆に Android ではローカルマシン上で Linux が動かせないから(いわゆる Chromebook における crostini や Windows における WSLがない) 当然、その上で動かす emacs とかそのあたりの Linux アプリは(簡単には)動かない。 Termux などを使え、という声が聞こえてきそうですが、Chromebook や Windows のようにそれらが標準で対応していてほしいのです。

ただし、Windows11 というか Surface GO 3 についてはバッテリー持続時間が少なすぎる。 そもそも DnD が機能しないのであれば端から使う価値はない。 ARM CPU 版の Surface GO / Pro が出て Chromebook の ARM CPU系のタブレットのように 15時間程度バッテリーが持ち かつ WSA の DnD がきちんと作動するまでは、あくまで実験機として使うよりほかない。 Surface GO 3 はハードウェア面で完成度が高くとても気に入っているだけに残念。 Surface GO 5 くらいで、ARM 版が出ることを期待しましょう。

あと、もっとも期待できるのは Chromebook Duet 370 の メモリ 8GB モデルが日本で発売、でしょうか。 それで Chromebook の Android 13 が展開されて DnD が機能すれば言うことはない。

Liked some of this entry? Buy me a coffee, please.