現在、初心者ながら、Androidで上で動くスクリプトを作っているものです。Android単
体でプログラムが作れて面白いのですが、なかなかコーディングしやすい良いエディタを
見つけられません。
一番の理想は、こちらのプログラム(スクリプト側)からスクリプトファイル名とエラー
行番号をintentで投げたら、そのファイルを開いてくれて問題の行にカーソルがいる。
そして、こちらにintentでスクリプトファイル名を投げてくれたら、そのスクリプトを
走らせるという風なキャッチボールができれば理想です。
これは無理としても、ファイル名を投げるとキャッチして開いてくれるエディタって、
どこかに無いでしょうか。
無いとなると自作するしかないのかな・・・。
もし、何か情報がありましたら、よろしくお願いします。
--
山本三七男 (Minao Yamamoto) ---------------- ハンドル:たろサ -----
E-Mail: taro...@gmail.com
> sheditor liteというテキストエディタを作成し、つい三日前にマーケットで公開しま
した。
早速、ダウンロードさせていただきました。エディタぽくってすごくいい感じです。ス
クリプト側には既に送信機能を作ってあったので、「file:///sdcard/luarida
/touchsample.lua」というURIを投げたところ、
「android.content.ActivityNotFoundException: No Activity found to handle Intent
{ act=android.intent.action.VIEW dat=file:///sdcard/luarida/touchsample.lua }」
というエラーがでました。
こちら側で、何か設定をしなければいけないのでしょうか。例えば、
「http://www.google.com」を投げると、ブラウザが立ち上がることは確認しています。
javaプログラムは、
Uri data = Uri.parse(strText);
Intent it = new Intent();
it.setAction(Intent.ACTION_VIEW);
it.setData(data);
startActivity(it);
こんな感じです。
> file schemeでqueryを使っていいのかどうか分かりませんが、例えば
> file:///sdcard/somewhere/test.sh?line=100
> とかでしょうか。
仕様は何も考えていないです。私の方はとても嬉しいです。この仕様で十分です。
> 一方、送る方ですが、このアプリケーションはaction.SEND、text/plainにてextra領域に
> テキスト文字列を入れて送ることが出来ます。
> action.VIEWでファイルパスを送ることもできれば良いのかもしれませんが、
> action.SENDを送りたい場合もあるでしょうから、使い分けが難しいのではないかと考え、
> このようにしました。
了解しました。とは言うものの、まだ、Android & java初心者なので、上の意味がほと
んど理解できていなかったりします。受ける側も勉強してみたいと思います。
> sheditorはまだまだ不具合も多いとは思いますが、無料ということもありますので、
> 試しに使ってみて頂けると幸いです。
はい、使わせていただきます。何か気がついたことがありましたら、報告させてもらい
ます。
ちなみに私の作っているものはLuaridaというLua言語のスクリプトです。マーケットに
無料公開しています。Androidプログラムを勉強するのにちょうど良い題材かなぁと思っ
て9月頃からチマチマ作り始めました。
> また、Android上のテキストエディタとしては、Satoshi様が作られたgEditorもあります。
> こちらも試してみてはいかがでしょうか。
gEditorも知り合いから紹介してもらいました。「file:///sdcard/luarida
/touchsample.lua」を投げても同じようなエラーが出たので、対応していないのかなぁと
思って、メール投稿させていただきました。
エラーが出るのは、こちらのプログラムが悪い性なのかなぁ・・・。
E-Mail: taro...@gmail.com
テストした結果を報告します。
Uri data = Uri.parse(strText);
Intent it = new Intent();
//it.setAction(Intent.ACTION_VIEW);
it.setAction(Intent.ACTION_SEND);
it.setData(data);
startActivity(it);
にしてみました。
こうすると、SEND待ちのアプリの一覧が出てきました。sheditor liteは出てきません
でした(←待っていないのかな)。
strText="file:///sdcard/luarida/editlua.lua";を渡しても、何も起きず・・・。当
たり前かも知れませんが。
次に、
it.setAction(Intent.ACTION_VIEW);
it.setType("text/plain");
にしてみました。すると、setType("text/plain");を見ているアプリもいるのですね。
gEditorとTextEditが出てきました。そして、起動するのですが起動するだけでした。
file://を取っていないのかな。
次に、
it.setAction(Intent.ACTION_SEND);
it.setType("text/plain");
を試してみましたが、同様でした。
残念ながら、結局、sheditor liteはいずれの場合にも、一覧に出てきませんでした。
そもそも、"file:///sdcard/luarida/editlua.lua"を渡すという発想がいけないので
しょうか。ちなみに、"file:///sdcard/luarida/editlua.txt"と拡張子を変更しても同様
の結果でした。
> 了解しました。とは言うものの、まだ、Android& java初心者なので、上の意味がほと
たろサです。
最新版をダウンロードしてテストしてみました。
> Intent i = new Intent();
> i.setDataAndType(Uri.parse("file:///sdcard/dropbox/ss.txt"), "text/plain");
> i.setAction(Intent.ACTION_VIEW);
> startActivity(i);
上のようにプログラムを変更してみました。
きちんと、sheditor liteに受け取ってもらえました。また、'?line=3'を追加した場合
も、指定の行で開くことを確認しました。
拡張子luaにも対応していただいて嬉しいです。
欲を言えば、エディットファイルの起動ですね。今度はこちらで「file:///sdcard
/hogehoge/hoge.lua」を受け取るようなプログラムを作らないといけないのですね。
また、ここら辺の書き方を、時間のあるときに詳しく教えてください。
Luaridaからの暗黙呼び出しのコマンドを実装するのは週末くらいになってしまうと思
います。Typeも引数で取れるようにして、SENDにも対応させようかなと思っています。
ここら辺の呼び出しができると、いろいろとスクリプトでちょちょっと書けちゃいそう
ですね。
--
山本三七男 (Minao Yamamoto) ---------------- ハンドル:たろサ -----
E-Mail: taro...@gmail.com
たろサです。
詳しい説明ありがとうございます。
Luaridaのメニュからスクリプト起動とエディタ起動を分けられるようにして、さっそ
く、便利に使わせてもらっています。
2時間くらい前、twitterで返信したのですが、こちらでも書いておきます。
sheditor liteでファイルを開くと、先頭に必ず改行が挿入されるようです。
下記の件は、時間のあるときに、ためさせていただきます。
shirouさんの説明通りにしたら、intentを受けられるようになりました。ありがとうご
ざいます。
スクリプト実行中にエラーが起きたときに、エラー箇所の行番号を持ってエディタを呼
ぶようにもしました。Luarida Ver1.20Betaとして公開しました。
ただ、shedit liteと同様に、
<data android:scheme="file" android:mimeType="text/*"/>
という感じで指定したので、このintentのときに、常にsheditor liteを開くようにして
いると、Luaridaに渡せないので、少し考えものかも知れません。
何か良いアイデアは無いでしょうか。
また、エディタが直ぐ呼べて、エディタからもLuaridaが呼べて、凄く便利になったの
ですが、Luarida→sheitor lite→Luarida→sheditor lite→Luaridaとintentを繰り返してい
ると、呼び出し履歴がスタックされるみたいで、一度、ランチャに戻ると、Luaridaアイ
コンをタッチしても、sheditor liteしか立ち上がらなくなってしまいました。呼び出し
た回数分、sheditor liteを終了させ続けなければなりません。
このスタックを回避する方法は、あるのでしょうか。
(2010/10/24 23:50), shirou wrote:
> ただ、shedit liteと同様に、
> <data android:scheme="file" android:mimeType="text/*"/>
> という感じで指定したので、このintentのときに、常にsheditor liteを開くようにして
> いると、Luaridaに渡せないので、少し考えものかも知れません。
> 何か良いアイデアは無いでしょうか。
これについて、明示的にintentで渡してやればいいことに気づきました。
例えば、Luaridaだと、下記のような感じにすれば渡せました。
strText = "file://sdcard/luarida/hoge.lua";
String luarida = "com.momoonga.luarida.LuaridaActivity";
it = new Intent(Intent.ACTION_VIEW);
int idx = luarida.lastIndexOf('.');
String pkg = luarida.substring(0, idx);
Uri data = Uri.parse(strText);
it.setClassName(pkg, luarida);
it.setDataAndType( data, "text/plain" );
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(it);
ここで質問なのですが、明示的に渡す場合、他のアプリのクラス名とアクティビティ名
を知る必要があるのですが、どのようにしたら、調べることができるのでしょうか。
他のアプリのAndroidManifest.xmlが見れればいいのですが。
> ここで言うクラス名とアクティビティ名は同じものではないのでしょうか?
> パッケージ名+アクティビティ(クラス)名
(例:com.momoonga.luarida.LuaridaActivity)
> が必要なのではないのでしょうか?
はい、その通りです。それを調べたいと思っていました。
杉本さんの下記の説明で、取得することができました。
せっかく作ったので、Googleマーケットに登録しておきました。GetIntentClassNameと
いうアプリ名です。
取得したクラス名をIntent.ACTION_SENDで丸投げするという荒っぽいツールです。
誰も使わないだろうなぁ。
杉本さん、ありがとうございました。