スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

3Dを扱う案件

Androidでアニメーションする3Dオブジェクトに対して、ユーザが任意のタイミングで、アニメーション再生、一時停止、回転、拡大、任意のフレームへのシークができるようにしたいという案件があるのだが、何を使って実現するかを模索中。

要件としては、Androidの標準のUIの一部を3Dオブジェクトを操作するViewにしたいというところがある。通常のAndroidのJavaコードから簡単に3Dオブジェクトを操作できると楽なんだけど・・・

調べてみると、RajawaliというAndroid用OpenGL ES 2.0ベースの3Dフレームワークを見つけた。

ソースコード

https://github.com/MasDennis/Rajawali

特徴

・AndroidのネイティブなAPIレベルなので組み込みが簡単 ・Android用しかない ・アニメーションを読み込める3Dオブジェクトの形式がMD2とMD5と特殊なフォーマットのみ(アニメーションしないならOBJやFBXでも可)

これなら用件を満たせるかも

【Android開発】Android4.4 KitkatでAlarm Managerの一部仕様が変わった?!

アラームがならないことがある?!だと・・・

ちょっと前に、会社で作ったアラームアプリで、アラームがならないことがあると、Android 4.4ユーザから問い合わせがきたんだけど、アラームがならないなんて報告はほぼほぼないんだよね。

しかも、鳴らないときがあるって言うから、おかしいなぁと思って、もしやAndroid4.4でなんかAPIの仕様が変わったのでは?と調べてみると、どうやらtrgetSdkVersionが19以降の場合、AlarmManagerの set() と setRepeating() で指定した時間が厳密ではなくなったっぽい。

Android4.4でAlarm Managerのset()、setRepeating()の仕様変更

どうやら、省電力仕様になったらしく、全てのアプリケーションのアラームを合理的にまとめた時間にデバイスを起こし、まとめてアラームを発火するようになった。内容からして、なんでもかんでもまとまった時間に、set() と setRepeating() でセットしたアラームが発火するわけではなく、スリープしている端末に対して、アラーム毎に起こすのではなく、ある程度発火時間が近いアラームをまとめて、一回起こしたときに発火させるという認識でいいんだと思う。


じゃあ、正確な時間に確実にアラーム鳴らすにはどうしたらええねんって思ったら、アラームを厳密な時間に発火させたいときは、新しいsetExact()メソッドが使えと・・・。


新しいメソッドをそういう仕様にすればいいのに…、と思いつつ…


ただ、先に述べたとおり、この振る舞いは、trgetSdkVersionが19以降で、Android4.4以上だけに適用される。targetSdkVersionを18以下であれば今までどおりの動作するようだ。

Xcode6でビルドしたアプリをiOS6シミュレータで動かす

Xcode6にはiOS6シミュレータがない!

Xcode6ではiOS6のシミュレータは使えなくなったので、iOS6での動作確認をどうしようかと思い、試行錯誤した結果、Xcode6から64bitでないiOS7シミュレータで一端実行し、そのシミュレータ内にできたアプリのデータを、Xcode5のiOS6のシミュレータ内に突っ込んでから、シミュレータを起動することで、iOS6のシミュレータでXcode6でビルドしたアプリを動かすことができた。


Xcode6とXcode5を共存させる

iOS6のシミュレータはXcode5を入れないと使えないので、Xcode5をダウンロードして、Xcode5と6を共存させる。やり方は、以下のサイトなどが参考になった。
http://travitu.hatenablog.jp/entry/2014/09/21/135153


Xcode6からiOS7(非64bit)シミュレータで実行後、データをコピー

まず、目的のプロジェクトのアプリをXcode6からiOS7(非64bit)シミュレータで、一端実行する。こうすることで、シミュレータ内にアプリのデータが作られるので、このアプリデータをFinderから探してコピーする。
Xcode6では、シミュレータのデータの場所は変わっているようだ。アプリのデータは以下の場所に格納されている

~/Library/Developer/CoreSimulator/Devices/<シミュレータのハッシュ値>/data/Containers/Data/Application/<アプリのハッシュ値>/ 

目的のシミュレータのハッシュ値は以下の場所にあるplistファイルに記載があるので、iOS7のシミュレータのハッシュ値をここから探し、そのハッシュ値と同じ名前のフォルダを探す。

~/Library/Developer/CoreSimulator/Devices/.default_created.plist

アプリのフォルダ名もハッシュ値になっているので、1つずつ開いて目的のアプリのフォルダを探す。見つけたらそのフォルダをコピーしておく


iOS6のシミュレータ内にアプリのデータを貼り付け、実行

今度はXcode5側のiOS6シミュレータのアプリデータが格納される場所をFinderから探して、さきほどコピーしたアプリデータを貼り付ける。
Xcode5側のシュミレータ内のアプリのデータの格納先は以下の場所にある

~/Library/Application Support/iPhone Simulator/<iOS version>/Applications/ 

アプリデータを張り付けれたら、シミュレータを起動する。iOS シミュレータを起動するには先ずXcodeを起動し、下のようにXcode -> Open Developer Tool -> iOS Simulatorの順にクリック。

MacOSX02.png
起動したら、ハードウェア -> デバイスで、iOS6のシミュレータを選択する
するとホームに目的のアプリがあるはずなので起動する!以上! てか、このやり方めちゃ面倒なんだけど!他に簡単な方法があるんじゃないの?誰かおせーて・・・

【iOS】Xcode6で既存プロジェクトをiPhone6(Plus)実行するとスケール表示される

これ、前回の記事に近い話だけど、Xcode5.xからの既存プロジェクトをXcode6から、そのままiPhone6または6Plusで実行すると、iPhone5(5s)の画面をそのまま拡大した感じで表示されるんだけど、これも、起動時のスプラッシュ画像(画面)設定をiOS8に対応せれば、iPhone6/6Plusの本来の解像度で実行できる。

Asset catalogの「LaunchImage」で「iOS8.0 and Later」をチェックをつけて、「Retina HD 5.5」、「Retina HD 4.7」に画像を設定するか、Launch Screen FileにStory boradかxibファイルを設定すればよい。

Retina HD 5.5には、1242 x 2208、Retina HD 4.7には750 x 1334のサイズの画像とすること。

MacOSX01.png
MacOSX00.png

【iOS】Xcode6での新規プロジェクトをiPhone5or5s(iOS7)で実行したときに上下に黒帯が入る

既存のプロジェクトをXcode6で扱ったりはすでにしているが、まだXcode6で新規でプロジェクトを作成していなくて、今日やってみて、とりあえず、iPhone5sのiOS7.1のシミュレータで実行したら、画面の上下に黒い帯が・・・

要は、起動時のスプラッシュ画像(画面)が設定されていないために、iPhone4sの320x480扱いになってしまうようだ。
iOS Simulator Screen Shot00

Asset Catalog で、LaunchImageで、2xとRetina 4に画像を設定すればきちんと表示されるようになる。 Launch Screen Fileを設定しておけば、iOS 8時にそちらが使われる。また、Asset CatalogでiOS8用に画像を設定しておいても、 Launch Screen Fileのほうが優先されているようだ。

MacOSX01.png
MacOSX00.png

プロフィール

basarafire

Author:basarafire
IT関連会社で情報処理の基礎やプログラミング(主にC・Java)を教えています。最近はAndroidの教育や開発なども行ったりしています。

basarafireの開発したアプリに関する内容はこちらから
http://basarafire.jugem.jp/

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
お気に入り
[プレスブログ]価値あるブログに換金可能なポイントを差し上げます。 アクセストレードレビュー
提携
ゲーム
QRコード
QR
リンク
RSSリンクの表示
お気に入り商品
カウンター
おすすめAndroid書籍
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。