質問: お世話になっております。 タイトル通りとなりますが、Android StudioもしくはUnityを用いて、Blenderで作成した3DモデルをAndroid端末向けにデスクトップマスコットとして表示できますか? イメージとして、docomoのしゃべってコンシェルのような表示になります。 もし、表示可能なら方法も教えていただくと幸いです。
回答: 3Dモデルであることと、Home画面でOverlay表示させること(デスクトップマスコット)は無関係ですので 単にHome画面でOverlay表示させることについて説明いたします。 (そこに指定するのは3Dモデルであってもなくても構いません) 結論から言うと「力技で出来る」となります。 要素的には以下の3つになります 1. 作成されたアプリを常にOverlay表示する 2. 別アプリは遷移できるように1.はActivityではなくService化する 3. Home画面のみそれを実行する(3.が力技が必要) 1.については WindowManager.LayoutParamsを使用して、typeに作成されたいWindowをOverlay表示させる種別に設定すれば良いです。 例えばTYPE_PHONEです。 これだけですとただのActivityですのでbackキーを押した場合等に消えてしまいますので、 Serviceとして実装する必要があります。 ``` public class MyService extends Service { @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); LayoutInflater layoutInflater = LayoutInflater.from(this); WindowManager.LayoutParams params = new WindowManager.LayoutParams( ~目的に従って任意にparameter指定~ WindowManager.LayoutParams.TYPE_PHONE, PixelFormat.TRANSLUCENT); view = layoutInflater.inflate(R.layout.overlay, null); ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).addView(view, params); ``` 3.が一番厄介なのですが、 ActivityManager.RunningTaskInfo等でHomeが動作している間を監視する等しかない気がします。(この方法だと権限も必要だし、対象Homeアプリをハードコーディングする必要があるので非常に限定的です。) しゃべってコンシェルもHomeアプリによって挙動が変わるようなので力技でやっているのではないのでしょうか。。。 (追記)ActivityManager.RunningTaskInfoはAPILevel21より制約が厳しくなりSystemOrSignatureしか使用できなくなっておりました。。。 また、アプローチは変わりますがしゃべってコンシェルのように「HomeアプリのOverlay」 ではなく「Homeアプリの背景」ならば LiveWallPaperとして実装する方法があります。 こちらの方がシンプルですが、インタラクティブであるもののあくまで壁紙扱いになってしまいます。