2013年6月30日日曜日

カメラプレビューの縦横比を整える

カメラのプレビューサイズを合わせるには、
サーフェイスビューのサイズを変更する必要があります。
以下の例ではビューのサイズを、幅が狭い辺に合わせなるべく画面全体にビューのサイズを合わせています。

public void surfaceChanged0(SurfaceHolder holder, int format, int width,
int height) {
float scale = 1f;

if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {// 縦表示なら
scale = (float) width / (float) previewHeight;
layoutParams.height = (int) (previewWidth * scale);
layoutParams.width = (int) (previewHeight * scale);
} else { // 横なら
scale = (float) height / (float) previewHeight;
layoutParams.height = (int) (previewHeight * scale);
layoutParams.width = (int) (previewWidth * scale);
}

this.setLayoutParams(layoutParams);
}

カメラにもよりますがホームキー側に空きができると思います。

レイアウトの配置に優先順位を指定するサンプルandroid:layout_weight

ボタンなどGUIの配置の際、
上側のビューにmatch_parentを指定すると、
その下にビューが配置できなくなってしまいます。

そこで優先順位layout_weightの指定です。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <GridView
        android:id="@+id/GridView01"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:columnWidth="60dp"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="auto_fit"
        android:padding="10dp"
        android:stretchMode="columnWidth"
        android:verticalSpacing="10dp"
        android:layout_weight="0.50" >
    </GridView>

    <LinearLayout
        android:id="@+id/yohaku"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="vertical" >

    </LinearLayout>

</LinearLayout>

layout_weightはデフォルトが1になっています。
小数点以下にすることで優先度が下がります。

ビューの背面全面の指定などにも使えます。

音声リモコンカメラ2

リモコン画像

無料アプリ"音声リモコンカメラ2"をリリースしました。


今までのカメラアプリの欠点を保管した集大成です。※アイコン手抜きですいません

シャッターボタンは廃止しました。
音量UPキーで通常撮影。
音量DWONキーでクイック無音撮影。

日本語化対応しました。※変な英語ですいませんでした
撮影後すぐにプレインストールされているギャラリーに反映されるようになりました。
前作同様に登録したキーワードを発音することで撮影されます。
大きな音に反応するモードも健在です。
無音カメラモードは解像度がやや落ちますが、高画質と謳っている無音カメラ並みの画質です。

今回は広告を載せていますが、リアカメラ使用時は広告表示はありません

Androidのバージョンアップに対応すべく、大幅な改修と見直しを行い、メニューボタンを追加しました。



Android4以上だと透過ボタンデザインになります。





2013年6月29日土曜日

CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

Cursorを使用した際に以下のエラーが発生しました。

06-29 21:37:46.693: E/AndroidRuntime(18071): FATAL EXCEPTION: main
06-29 21:37:46.693: E/AndroidRuntime(18071): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
06-29 21:37:46.693: E/AndroidRuntime(18071): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:406)
06-29 21:37:46.693: E/AndroidRuntime(18071): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
06-29 21:37:46.693: E/AndroidRuntime(18071): at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:68)
06-29 21:37:46.693: E/AndroidRuntime(18071): at android.database.CursorWrapper.getInt(CursorWrapper.java:106)
・・・

どうやらカーソルの検索結果が見つからない状態でカーソルを移動させたためのようです。

    String str= ローカル変数以外の変数、finalやstatic変数など
    // コンテンツプロバイダのURI取得
    Cursor c = getContentResolver().query(str・・・

カーソルがNULLか0件でないか確認する処理が必要です。

閉じるのをお忘れなく

2013年6月28日金曜日

アマゾンアプリストアのアプリ認証から公開

アマゾンのアプリストアにアプリを申請すると約一日ほど審査期間があります。

認証後はストアが更新されるが数時間?ほどなので、

公開まで最長二日かかることになります。

検討中→認証→LIVE

といった流れです。


大抵は24時間ほどで公開されます。

R を変数に解決できません XMLエラー

エクリプスのJAVAファイルに"R を変数に解決できません"とエラーがでました。

このエラーはプロジェクトのXMLファイルにエラーがある場合に発生します。

具体的には

layout/
menu/
valses/
AndroidManifest

の中のXMLファイルです。

XMLファイルにエラーがある場合はRクラスを更新できず参照設定が行えなくなります。

XMLのエラーはファイルを開いて保存を行わないと表示されません。

修正後にもエラーが表示される場合はプロジェクトのクリーンを行うと解消されます。

隠し画面や各設定画面のショートカットを作成する

無料アプリ「カスタム写真アイコン」は、ANDROIDの隠し機能へアクセスできるショートカットを作成できます。

プロキシの設定テザリング画面などのショートカットを作成することもできます。

アプリのアイコンや名前を偽装することも可能。

直接開くことが可能な画面ならどこにでもショートカットを作成することができます。

設定の各画面にも対応しています。

使い方は色々。

インストールされているアプリのアイコンを流用して、アプリを偽装することもできます。

ギャラリーの画像をアイコンにできます。


無音カメラ 広告なし


無料アプリ「無音カメラ 広告なし」はシンプルな無音カメラです。

画質は高画質と謳われているアプリと同等です。

正しくは高画質と言いつつカメラの性能を損なう無音カメラアプリしか存在しません。
カメラモジュールの最高画素数で無音撮影できるカメラはほぼありません。
そのための試みが「カメラサイレンサー 装着式無音カメラ」です。

インタねーっとアクセス権限を必要としません。
そのため安全なアプリです。広告は表示されません。

保存先の指定ができます。

撮影した写真は簡易ギャラリーで表示できます。

プレインストールされているギャラリーに表示するには、端末を再起動してください。

ちなみにのこアプリは音声リモコンカメラの機能一部です。

音声録音時にシャッター音が入らないようにするための機能です。

2013年6月26日水曜日

アイコンを偽装、変更するアプリ

無料アプリ「カスタム写真アイコン」はアプリのアイコンを変更することができます。
写真やインストールされているアプリのアイコンを使用することも可能。

トリミング機能を搭載しているので写真を選択して簡単に加工できます。

ネットで落としたお気に入りの画像なども使えます。

いたずらトラップにも楽しめます。

カスタム写真アイコン

 無料アプリ「カスタム写真アイコン」をリリースしました。




写真をショートカットのアイコンにできます。
インストールされているアプリのアイコンに偽装することもできます。
隠し画面や各設定画面のショートカットも作成できます。

写真をトリミング画面で修正し、アイコンのショートカットを作成します。

当社アプリ"偽メールボックス"と併用することでトラップ撮影もできます。

ダウンロードはこちら








2013年6月25日火曜日

error 100 camera android

NEW音声リモコンカメラの開発が難航しております。

cameraクラスのerror 100というエラーを解決できないためです。

error 100 camera android
06-25 01:49:03.557: W/Camera(26267): Camera server died!
06-25 01:49:03.557: W/Camera(26267): ICamera died
06-25 01:49:04.968: E/Camera(26267): Error 100

もしかしたら無理なパラメーターを設定してしまっていて、負荷がかかりカメラの機能が停止したのかもしれません。
厄介なのがこちらからエラーを検知できないことです。カメラクラスのログから出力されるだけで、
カメラのインスタンスには何の変化もありません。

メーカーのカメラ設定がよくないせいかもしれませんが、一度パラメーターの最適化を考えてみます。

参考ソース


カメラエラー100

20130628
追記、どうやらオートフォーカスの停止を同期させる必要があるようです。

camera.autoFocus(null);  //オートフォーカス停止

オートフォーカスが完全に停止しないとエラーが発生します。

2013年6月24日月曜日

パソコンの購入おすすめスペック

仕事柄PCやスマホ購入、インターネット契約の相談をよく受けます。

パソコンの条件としてはオフィスが欲しい、国産がいい。という声が多いです。

オフィスに関しては無料のリブレオフィスをすすめています。
リブレオフィスはマイクロソフトオフィスの互換ソフトです。※旧オープンオフィス
マイクロソフトオフィスは2003、2007、2010、2013など有りますが、全て使い勝手が違います。
オフィスを新しくすれば使い勝手が違うので、新しく操作を覚えないといけません。
それなら無料の互換オフィスを覚えたほうが有益です。わざわざ3万円も出す必要はありません。
リブレオフィスは行政機関などでも使用されている実績がありますし。

製造元については国内も国外も一長一短といったところです。
スペックが同じなら、国内メーカー製は海外製より4割~増しほどです。
そのぶん国内メーカー製のほうが品質は高いです。とくに液晶やスピーカー。
寿命は当たり外れがあるのでなんとも。

スペックの目安について
スペックは利用方法次第です。

・オフィスとインターネット程度の使用
最新型の一番安いパソコンで十分。
XP~VISTA時代だと、安物を買うと重くて使い物にならないことがありました。
※知識のない人を騙す。量販店の粗悪品販売時代
今では安物のノートパソコンでも高速で動作します。

・ペイントソフト、音楽、動画編集の使用
cora i3 程度で純分です。現在のCPUはグラボを気にする必要なし。

・2Dゲームに使用
同上程度で十分。

・3Dゲームに使用
3Dゲームにも色々ありますが、グラボが必要になってきます。
ノート用のグラボは性能が低いのでお勧めしません。


ちなみに私ならcora2のジャンクPCを直して使います。
リサイクルショップでcora2 2.4G メモリ1GのOS無しパソコンが4千円で山積みされていて衝動買いしそうでした。時代って移ろっていくんですね。。
XPのサポート終了と同時に中古パソコンが買い時になるかもしれません。

2013年6月23日日曜日

ANDROIDのゲーム開発について

以前、アクションゲームのサンプルを作成して公開しましたが、まだ色々と修正が必要なようです。
アクションゲームサンプルの記事はこちら

ゲームには最低二つのスレッドがあります。
・ボタン入力用のスレッド
・描画処理用のスレッド

サンプルではボタン入力用のスレッドから直接キャラクターを動かしてしまっています。
ボタン入力用のスレッドはソフトウエアゲームコントローラ機能の処理行い、それに応じて共通資源のフラグを立てるだけにするほうがよさそうです。

描画処理用のスレッドは60fpsで描画されるように動作しています。
内部的な処理速度に偏りがあっても時間内に処理できれば速度は均一になります。
各計算を処理後に描画処理行います。

ゲームコントローラーについて

タッチパネルで操作しやすいソフトウエアコントローラーが必要。
画面解像度によって感度を調節する必要があり。
アクションゲームは物理コントローラー並みの扱いやすさが必要。

カメラアングルについて

各キャラクターの位置から適切なアングルを計算、または固定。

解像度について

機種によって解像度が違うので補正が必要。

ツールアプリと違い、開発コストが。。
完成するまでどのくらいかかるやら。。

2013年6月21日金曜日

アマゾンアプリストアのアカウント管理の欠陥

前回アマゾンのアプリの購入履歴が消えたことを記事にしましたが、
どうやら原因はアカント管理にあったようです。

日本でアマゾンを使用している方はAmazon.co.jpのアカウントを使用しているかと思います。
開発者がアマゾンのアプリストアでアプリを公開するにはAmazon.comのアカウントを使用します。
日本とその他の国ではアカントを別に取得する必要があります。
ここで一つ問題があるようで、アマゾンアプリストアのアプリにはアカウント入力欄にメールアドレスとパスワードしかありません。
アカントはメールアドレスとパスワードから世界中のアマゾンのアカウントを検索し、地域を判断しています。
つまり、国別のアカウントに同じメールアドレスとパスワードを設定すると検索結果が一意にならないわけです。

私の場合は海外のアマゾンのアカウント取得に日本のアカウント同じ情報を入力していたため、
今まで使用していた日本のカウントが海外のアカントがすり替わっていたことになります。
解決するにはアカントのメールアドレスを変更ればいいようです。

アマゾンさん、アソシエイトを含めてアカントを世界共通にしてください。


2013年6月20日木曜日

アクションゲームサンプルコード


アクションゲームサンプルコード を公開します。

サンプルの実行画像

ソースとAPKはこちら


ボタンは見えませんが、画面の左半分を触るとキャラクターが左右に移動します。
画面右側を押すとジャンプします。
地面から落ちると、落ち続けます・・・・・

大雑把な雛形です。自分で設計したものなので効率的であるかはわかりません。
すべてJAVAで書かれています。
キャラクターや障害物を増やすにはデータ作成管理クラスが必要になります。
戻るボタンで終了します。

大まかな構造としては

タッチスレッドでパラメーターを変更。
・移動ならXをプラス
・ジャンプなら慣性のFをプラス

描画スレッドで位置や慣性を計算。
・障害物に触れていないなら空中
・空中なら落下



//ゲーム画面呼び出しクラス
public class MainActivity   extends Activity {
private GameView gameView;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        
gameView=new GameView(this);
setContentView(gameView);

}    
}

//画面クラス
public class GameView extends SurfaceView{
 private GameViewCallBack cb;
 private long time;

 public GameView(Context context) {
     super(context);
     SurfaceHolder holder = getHolder();
     cb = new GameViewCallBack();
     cb.setContext(context);
     holder.addCallback(cb);

 }
@Override
public boolean onTouchEvent(MotionEvent event) {


//連続タップ防止 
if(time+100<System.currentTimeMillis()){

time=System.currentTimeMillis();

float x = event.getX(); // X座標を取得
       float y = event.getY(); // Y座標を取得  
cb.setTouchPoint( x , y );



}
return true;
}
   // キーイベント発生時、呼び出されます
   @Override
   public boolean dispatchKeyEvent(KeyEvent event) {
       if (event.getAction() == KeyEvent.ACTION_UP) { // キーが離された時
           switch (event.getKeyCode()) {
           case KeyEvent.KEYCODE_HOME: 
              
               
           case KeyEvent.KEYCODE_BACK:
            cb.teisi();
            return false;
           default:
           }
       }
       return super.dispatchKeyEvent(event);
   }
}


//描画スレッド
public class GameViewCallBack implements SurfaceHolder.Callback, Runnable{

private SurfaceHolder holder = null;
private Thread thread = null;
//スレッドの管理
private boolean isAttached = true;
//コントローラー
private Controler cl;
//プレイヤー情報
private PlayCharcter pc;
//障害物
private Syougai sg;

      private float w, h;
      //中心位置
      private int   cx, cy;
private Context context;
      
      public void setContext(Context rr){
     context=rr;
      }
      
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

this.w = width;
this.h = height;
this.cx=(int)(w*0.50);
this.cy=(int)(h*0.50);
cl=new Controler(width, height);
pc =new PlayCharcter(cx,cy,context);
//左、下、幅、高さ
sg = new Syougai(50,(int) (h-100),1000,100);

}

@Override
public void surfaceCreated(SurfaceHolder holder) {

this.holder = holder;
thread = new Thread(this);
thread.start(); 
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
      isAttached = false;
      thread = null;
}

private long t1 = 0, t2 = 0; 

@Override
public void run() {
while( isAttached ){
t1 = System.currentTimeMillis();
hyouji();
atari();
byouga();
// スリープ 60fpsの確保
t2 = System.currentTimeMillis();
if(t2 - t1 < 16){ 
try {
Thread.sleep(16 - (t2 - t1));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void teisi(){
isAttached=false;
thread = null;
 
}
//コントロール
public void setTouchPoint(float x, float y) {

int tmp =cl.getTouthActionProt((int)x,(int)y);
if(tmp==100){
pc.btnAction(1);
}else{
pc.moveAction(tmp);
}
}


public void byouga(){

//描画処理を開始
Canvas canvas = holder.lockCanvas();
if(canvas==null){
return;
}
//背景
canvas.drawColor(0,PorterDuff.Mode.CLEAR );
Paint paint = new Paint();//かり

paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.GREEN);
canvas.drawRect(new RectF(sg.l, sg.t, sg.r, sg.b), paint);

pc.byouga(canvas, cx, cy);
//描画処理を終了
holder.unlockCanvasAndPost(canvas);
}
//各データの計算 キャラの状態 あたり判定
private void atari(){
//慣性移動計算 障害物への移動適応
pc.kansei();
//キャラと足場が接触 pc.y仮
if(cx>=sg.l && cx<=sg.r && pc.y>=sg.t&&cy<=sg.b){
//if(pc.x>=sg.l && pc.x<=sg.r && pc.y>=sg.t&&pc.y<=sg.b){
pc.s=0;//立ち
pc.y=sg.t;//位置補正 めり込み防止
}else{//こちらへ来ないとジャンプできない
pc.s=-1;//浮び
}

sg.sukuro(pc.x,pc.y);
}
//表示領域に存在する? hFLをたてる
private void hyouji(){
sg.hFL=true;

}

}

//コントローラーくらす
public class Controler {

private int w,h,ox=0,oy=0;
private int hidari,migi,a,j,m;
public Controler(int ww,int hh){
w=ww;
h=hh;
j= (int) (w*0.75);
a= (int) (w*0.50);
migi= (int) (w*0.25);
//hidari= (int) (w*0.75);
}
public int getTouthActionProt(int xx,int yy){
int action=0;
if(xx>=j){
action=100;
}else if(xx>=a){
action =200;
}else if(xx>=migi){
action=20;
}else{
action=-20;
}
return action;
}
}

//キャラクタークラス

public  class PlayCharcter {

private Paint paint;
//慣性 重力
private int kt=0,ky=0,kp=0,kf=0;
//座標を管理
public int x=0,y=0,w=0,h=0;//当たり判定計算用
public Bitmap gazo;
public int s=-1;//状態 0 地上 -1 空中
private Context context;
//コンストラクタ
public PlayCharcter(int xx,int yy,Context c){
paint = new Paint();
        paint.setColor(Color.WHITE);
        x=xx;//初期位置
        y=yy;       
        
       
        context =c;
        gazo = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
        
        w=gazo.getWidth();
        h=gazo.getHeight();
        
        y-=h;
        
        
}
public void byouga(Canvas canvas,int xx,int yy){
canvas.drawBitmap(gazo, xx, yy-h, null);
}
//右手操作
public void btnAction(int aa){
if(s==0){
kf=7;//ジャンプの実験
y-=3;
}
}
//左手操作
public void moveAction(int aa){
x+=aa;
}
public void kansei(){

if(s==-1){
kt=ky;
ky+=(ky-kp)+kf;
kp=kt;
kf=-1;
//慣性を適応
y-=ky;
}else{
ky=0;
kp=0;
}
}

}

//障害物くらす
public class Syougai {
public int x,y,w,h,t,b,r,l,T,B,R,L;
//表示フラグ
public boolean hFL=false;
private Paint paint;
public Syougai(int xx,int yy,int ww,int hh){
x=xx;
y=yy;
w=ww;
h=hh;
//絶対座標
T=y;
L=x;
R=x+w;
B=y+h;
t=y;
l=x;
r=x+w;
b=y+h;
paint = new Paint();
        paint.setColor(Color.GREEN);
}
//プレイヤーの移動情報を適応
public void sukuro(int xx,int yy){
t=T-yy;
l=L-xx;
r=R-xx;
b=B-yy;

}
//描画処理
public void byouga(Canvas canvas){
canvas.drawRect(new RectF(l, t, r, b), paint);
}
}

権限は必要ありません。APILEVELは9以上

アクションゲームさえ作れれば大抵のゲームは作れると思います。
設計書は再設計後に記事にします。

有料アプリを無料で手に入れられる

アマゾンには本日の無料アプリという、日替わりで有料アプリを無料で手に入れることができる仕組みがあります。

本日の無料アプリアマゾンアプリストア

アマゾンのアカウントを持っていればすぐに使用可能です。

千円以上するオフィス互換アプリが無料で配布されることもあります。

無料なのでWEBサイトからワンクリックしておくだけでお得です。

スマフォのウィルス対策 安全なアプリの見極め

スマフォのウィルスが話題になることが増えてきました。
そこで、私なりの安全なアプリの見極めについて記事にします。

アンドロイドのアプリをインストールするさいには必ずアプリの権限が表示されます。
アプリの機能と権限が一致していれば安全度は高いです。
インストール数、レビューや評価は偽装することが可能なので安全性の基準にはなりません。

他には開発者のWEBサイトやメールアドレスが信用できるものであるかです。
ドメイン取得者情報と開発者が一致していれば安全のように見えますが、こちらも偽装可能です。
私のようにブログやフリーメールを利用している開発者も多いので安全性の基準になるかは微妙です。

 一番安全性の基準になるのが有料アプリを販売していることです。
有料アプリを販売するには銀行口座への振り込みテストが行われます。
つまり、グローバルに振り込みができる銀行の口座情報が登録されていることになります。
これは偽装不可能です。

ウィルス作成はFBIに捕まりますから・・・・・

ACTION_POINTER_ID_MASKは使用すべきではありません

古いサンプルコードに警告が表示されることがあります。
以下が複数タッチの新しい書き方です。

旧 ACTION_POINTER_ID_MASK
新 ACTION_POINTER_INDEX_MASK

旧 ACTION_POINTER_ID_SHIFT
新 ACTION_POINTER_INDEX_SHIFT

       int count = event.getPointerCount();
       int action = event.getAction();
!ACTION_POINTER_ID_MASKを使用すべきではありません
       //int id = (action & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
int id = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;

       switch(action & MotionEvent.ACTION_MASK) {
       case MotionEvent.ACTION_DOWN:

         break;
       case MotionEvent.ACTION_POINTER_DOWN://二点以上押されたとき

         break;
       case MotionEvent.ACTION_UP:

         break;
       case MotionEvent.ACTION_POINTER_UP://二点以上押されたとき

         break;
       case MotionEvent.ACTION_MOVE://

         break;
       }

装着式アプリで最高の無音カメラを

好きなカメラを無音or消音できる無料アプリ「カメラサイレンサー」がアップデートされました。





使用するカメラを自由に選択できます。

完全に無音化できるカメラは少ないですが、シャッター音を下げる効果は高いです。

画面のキャプチャを保存するだけの無音カメラとは違い、最高画質で撮影可能。

ただし、機種によっては安定性に難があります。

フラッシュや通知LEDは無効にされません。

大きな音を立てたくない環境でご使用ください。

2013年6月19日水曜日

サポート終了したiOS端末のバージョンアップ方法

サポートの終了したIPHONE3Gなどを最新のバージョンにアップデートする方法。
http://www.whited00r.com/installation.php/

1、上記のリンクから機種を選んでバックアップファイルをダウンロードします。
2、アイチューンの復元機能を使用して、ダウンロードしたファイルを指定します。

これだけで最新バージョン?にアップデートすることができます。

アップル社はサポート切れの端末をストアから排除してしまうので、
有志でバージョンを上げてくれる方に感謝です。
まあ、アプリのバグを無くすには有効な手段ではありますが、
切り捨てられた端末を有効利用するくらい許してほしいものです。


これでOSのバージョンをパスしてアプリをインストールできます。

アマゾン アプリストア マイアプリデータ消える

アマゾンストアアプリをアップデートし、久しぶりに立ち上げてみたら、
アプリの購入データが消えている!
クラウドにも一切履歴はありません。
Webバージョンストアの各アプリのページには購入履歴が残っています。
しかしアプリには履歴が残っておらず、アマゾンのアプリが起動しない事態に。。
ギフトの残高もゼロ円になっています。

もしかして一時的なサーバー不具合?

しばらく様子を見ます。

それにしても、本日の無料アプリのページを開くにはロングタップさせるなど、嫌な仕様変更してきますよね。

GooglePlayもいろいろと仕様変更をしてきて迷惑ですが、GooglePlayはそれなりに意味のある追加変更をしているので評価できます。

話は変わりますが無料アプリ「漫画ビューワ 広告なし」が本漫画アプリランク五位になっていました。無料リーダでは一位です。

2013年6月15日土曜日

お勧めPSコントローラーUSBコンバーター

いくつかUSBコンバーターを使用してみましたが、
"サンワサプライ USBゲームパッドコンバータ JY-PSUAD11"
がお勧めです。




毎秒50回のレスポンスなので格闘ゲームに最適です。

二人プレイをするときは、ツーポートのものより割高になりますが
シングルポートの JY-PSUAD11を二つ買うほうが性能をフルに生かせます。

ねじコン以外のPSコントローラーなら使用できます。

PCやPS3に使用できます。
PS4にも対応するかも

AdMobエラー java.lang.NoClassDefFoundError: com.google.ads.AdView

夏場に入り開発環境をノートPCからデスクPCに移しました。

その際に開発環境のアップデート、プロジェクトのインポートをして
ビルドをしたところエラーが発生。

"java.lang.NoClassDefFoundError: com.google.ads.AdView"

06-15 19:54:03.108: E/AndroidRuntime(9968): FATAL EXCEPTION: main
06-15 19:54:03.108: E/AndroidRuntime(9968): java.lang.NoClassDefFoundError: com.google.ads.AdView
06-15 19:54:03.108: E/AndroidRuntime(9968): at recitative.jp.Act.onCreate(Act.java:102)

ライブラリの参照エラーのようです。

プロジェクトのプロパティからJAVAのビルドパスを選択して
Admobのjarにチェックを入れると解消されます。

Incorrect line ending: found carriage return (\r) without corresponding newline (\n)

XMLの画面レイアウト編集のさいに
"Incorrect line ending: found carriage return (\r) without corresponding newline (\n)"
とエラーが表示されました。

とりあえずソース画面でCTRL+SHIFT+Fを押してソースの自動整形をすると直ります。

JAVAのソース画面でもたまに謎のエラー表示が発生することがあります。
そのときはプロジェクトのクリーンやソース整形で直ります。

構文に問題のないエラー

2013年6月12日水曜日

プレ4値段とスペックとPC換算

プレ4の値段が発表されました。

日本での価格は4万円です。

CPU AMD Jaguar 8コア(x86-64アーキテクチャー) 省電力APU
GPU AMD製カスタムGPU 1.84TFLOPS
セカンダリープロセッサー 省電力カスタムCPU
メインメモリー 8GB GDDR5 グラフィック共用
光学ドライブ 読み出し専用 Blu-ray Disc/DVD/CDドライブ
BD 6倍速
DVD 8倍速
入出力
USB 3.0×2
AUX端子×1
通信
イーサネット (10BASE-T/100BASE-TX/1000BASE-T)
無線LAN (IEEE 802.11 b/g/n)
Bluetooth 2.1+EDR
出力端子
HDMI
光デジタル (S/PDIF)
ストレージ ハードディスクドライブ500GB

部品の販売価格を大雑把にPCの部品で換算すると

CPU&GPU 4万円
各ドライブなど2万円
くらいでしょうか?

取り合えず赤字売りです。

Bluetooth古くない?っとも思いますがゲームコントローラーに使うだけなら問題なし。
CPUは性能よりも低発熱なものを選んだようです。X箱のように熱で溶けるなんてことはないでしょう。

動画のアップコーンバート機能がPS3以上になることを期待しています。

それと、アーキテクチャ的にPCのOSをインストールできると評価アップ△

2013年6月7日金曜日

アマゾンアプリストアWEB

アマゾンのWEBアプリストアがオープンしました。
アマゾンアプリストア
これで使い勝手はグーグルプレイにいくらか近づきました。
ストアアプリが無料で手に入る分アマゾンが有利になってもおかしくない。
あとは開発者向きの管理画面を使いやすくしてほしい。

半額セールも行っています。