アプリ内で使用している画像をshareする方法

353 views
Skip to first unread message

渋木毅

unread,
Oct 13, 2014, 10:43:46 PM10/13/14
to app-inv...@googlegroups.com
はじめまして、渋木と申します。
よろしくお願いいたします。

質問をさせてください。

画像をLINEなどに渡すアプリを考えているのですが、
カメラで撮影した画像ではなく、アプリ内にあらかじめ置いた画像を
使用したいと思っています。

短絡的にSharingコンポーネントを使用した方法を模索しています。

AI Companion で一度でも動作確認をすれば”/sdcard/Appinventor/assets/”に
アプリ内画像が保存されるので、Sharingコンポーネントによってパスを指定する
ことができますが、配布を考えた場合はこれは使えない手法です。

コンパイルされたパッケージ内のassets内画像をSharingコンポーネントで
指定することはそもそもできるのでしょうか?

出来ないとすれば、アプリのインストール時にassets内の画像をデバイス内の
任意のディレクトリに保存して、そのパスを指定する。なども考えてみましたが、
それにしても方法が見つけられません。

先輩の方々に知恵をお借りしたいと思っております。

よろしくお願いいたします。

urushi

unread,
Oct 14, 2014, 10:26:14 AM10/14/14
to app-inv...@googlegroups.com
こんにちは、urushiといいます。

アプリ内に画像ファイルを読み込むと「/storage/emulated/0/AppInventor/assets/」に保存されます。
もしかすると、機種によって場所が違うのかもしれないので「file:///sdcard/Appinventor/assets/」の方が
確実のようです。AppInventor2がスマホの個体差を吸収してるようです。

これにファイル名を追加してsharingすると問題なくLINEなどにデータを渡せます。

残念なことにAppInventor2にはファイルを探す(ディレクトリ操作)コマンドとか無いので
直接指定しか方法がありません。

本家のサイトに書いてあります。
http://ai2.appinventor.mit.edu/reference/components/social.html#Sharing

ではでは〜。

2014年10月14日火曜日 11時43分46秒 UTC+9 渋木毅:
Desiner.png
Block.png

渋木毅

unread,
Oct 14, 2014, 11:03:34 AM10/14/14
to app-inv...@googlegroups.com
urushiさん
例まで示していただき、恐縮です。
ありがとうございます。

本家サイトの文章も読んだ上での質問だったのですが、さらに教えてください。

・app inventor を見たこともない人の端末に、app inventorでビルドしたapkをインストールした場合、
その端末に「file:///sdcard/Appinventor/assets/」というディレクトリはできるのでしょうか?

上記のディレクトリは、companionで動作確認をする際に作られるという認識でいますが、いかがでしょう。
使用したことのない画像を使ったプロジェクトを、companionで確認せずにビルドした場合、
そのapkをインストールすると、「file:///sdcard/Appinventor/assets/」にその使ったことのない画像はありますか?

僕も、本家サイトの記述を読んでcompanionで確認をしたところ、たしかにshareは可能でした。
その後、ビルドしてインストールしてもきちんと動作します。
しかし、それはcompanionでの確認をした時のディレクトリが残っていたからだという認識です。

apkをアンインストールして、「file:///sdcard/Appinventor/assets/」のディレクトリを削除して、
もう一度apkをインストールしても、「file:///sdcard/Appinventor/assets/」は新たにできませんでした。
しかしアプリでは画像が表示されています。

すなわち、app inventorを見たこともない人の端末にこのapkをインストールしても、
file:///sdcard/Appinventor/assets/」ディレクトリは作成されないと思っていたのですが・・

assetsフォルダの中にはパッケージ名のフォルダも出来ていませんでした。
これだと、app inventorの違うプロジェクトのapkをいくつかインストールした場合、
同じディレクトリに複数のプロジェクトの画像ファイルがごっちゃになってしまう点も気になります。
やはりcompanionでの確認時のみに使われるディレクトリのように思うのですが、いかがでしょう。


2014年10月14日火曜日 23時26分14秒 UTC+9 urushi:

urushi

unread,
Oct 14, 2014, 10:18:50 PM10/14/14
to app-inv...@googlegroups.com
渋木毅さんこんにちは。

一晩考えてました。
今思いつく方法としてはアプリ内に画像を埋め込むことはできるので、
それをCanvasに描画・保存・共有する方法です。
ただ、問題点なのは保存する間は画像が表示されることと、
サイズがCanvasサイズ(横幅320)になります。

1)uploadした画像をCanvasのBackgroudImageに読み込む
2)Canvas.SaveAsにファイル名を付けて保存(ディレクトリ付与可)
  返り値はディレクトリを含むファイル名です。
  保存場所は「/storage/emulated/0」以下に作成されます。
3)Sharing.ShareFileにフルパスのファイル名をつければOKです。

参考になれば良いのですが・・・・

ではでは。


2014年10月15日水曜日 0時03分34秒 UTC+9 渋木毅:
desiner.png
block.png

渋木毅

unread,
Oct 14, 2014, 11:13:56 PM10/14/14
to app-inv...@googlegroups.com
urushiさん
貴重なお時間を割いていただき、恐縮です。
ありがとうございます。

Canvasですかぁ~
あまりCanvasのコンポーネントは使ったことが無くて、
思いもよりませんでした。

同じ画像を表示するたびに保存先ファイルを上書きしてくれるかな?とか
次の懸念もありますが、やりたかった事の具体的な方策を示していただき、
ありがとうございます。

早速試してみてご報告させていただきます。

取り急ぎ、お礼まで。

ありがとうございました♪



2014年10月15日水曜日 11時18分50秒 UTC+9 urushi:

渋木毅

unread,
Oct 14, 2014, 11:55:36 PM10/14/14
to app-inv...@googlegroups.com
urushiさん
お世話になります。

試してみました。

CanvasのBackgroundImageのsaveを行っても、同じファイル名であれば上書きされますね。
保存する度に(1),(2)...などと付加されてファイルが貯まっていってしまうことは無いようで安心しました。

ご指摘のあったCanvasに一度表示されてしまうなどの問題点は、
Canvasをもともと表示圏外に非表示としておき、シェアを仕込むボタンに
Canvas表示→保存→Canvas非表示→シェアと仕込むことで回避できるのではと思っています。(試してないですが・・)

urushiさんのおかげでとてもスッキリしました!
貴重なお時間を割いていただき、本当にありがとうございました!



2014年10月15日水曜日 11時18分50秒 UTC+9 urushi:

漆原滝大

unread,
Oct 15, 2014, 8:03:44 AM10/15/14
to app-inv...@googlegroups.com

こんばんは、渋木毅さん

少しはお役にたてたようで何よりです。
まだまだ開発中のAppInventor2てすが、少しでも多くの方に使ってほしいと思っています。

ではでは~。

Reply all
Reply to author
Forward
0 new messages