よしよし。

別アプリで編集したbitmap画像を
ウィジェットの背景に取り込むテスト成功♪

このやり方行ける。

まだまだやる事たくさんあるけど、
年内のメジャーバージョンアップを目指して頑張ろう!

今日試して見た事を軽く書いときます。

appWidgetProviderアプリと画像編集用のActivityアプリをそれぞれ含む2つのパッケージを用意。

画像編集用アプリの詳細は省きますが、
以下の様に、同じ作者が作ったアプリにアクセスを許可するオプションを付けて内部メモリに画像を保存します。

static private final String FNAME = ”savedImage.png”;

try {
 FileOutputStream out =
  context.openFileOutput(FNAME,Context.MODE_WORLD_READABLE);

 bitmap.compress(CompressFormat.PNG, 100, out);

 out.flush();
 out.close();

 Toast.makeText(context,”Image saved.”, Toast.LENGTH_LONG).show();
} catch(Exception e) {
 Log.d(“DrawTest”,”saveImage exception:”+e.toString());
}

一方、appWidgetProvider側では以下の様に上記アプリが内部メモリに保存した画像を読み込みます。

RemoteViews rv = new RemoteViews(context.getPackageName(),R.layout.testwidget);
FileInputStream in = null;

try{
Context ctxt = context.createPackageContext(“com.hogehoge.drawtest”,0);

in = ctxt.openFileInput(FNAME);

Bitmap bmp = BitmapFactory.decodeStream(in);

rv.setImageViewBitmap(R.id.wgt_img, bmp);

appWidgetManager.updateAppWidget(appWidgetIds, rv);

} catch (Exception e) {
// TODO 自動生成された catch ブロック

Log.d(“TestWidget”,”Exception:”+e.toString());

e.printStackTrace();
}finally{
try {
in.close();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
Log.d(“TestWidget”,”in close exception”);
e.printStackTrace();
}
}

上記の様に、パッケージ名を指定して画像編集アプリのContextを自作します。
そして、そのContextを利用して画像編集アプリ内の画像ファイルをbitmapとして取得しています。

これが出来る条件は以下の通り。
 ・二つのアプリのManifestに共通の作者によるアプリである事を明示する為の下記記述がある事。
  android:sharedUserId=”com.hogehoge.userid”

 ・二つのアプリの証明書が共通である事。

 ・ファイルが別アプリからの参照を許可する設定で保存される事。

これを満たせば自作アプリを複数パッケージに分割する事ができます。

使い所としては、
ボリュームのあるリソースを外出しし、利用有無をユーザにゆだねるとか、
複数アプリでリソースを共有するとか、色々ありそうに思います。

CliphWeatherでの使い方は乞うご期待と言う所で。
(もうバレバレかもしれないけれど。。。)

Tagged with:  

コメントを残す

メールアドレスが公開されることはありません。