2013年5月31日金曜日

SurfaceView Canvas NullPointerException デバッグできない

SurfaceViewを使用したアプリでデバッグ中のみ"NullPointerException"が発生しました。

通常起動では問題なく動くのですがデバッグができないのは不便なので調べてみました。
どうやらキャンパスのロックが発生しているようです。

アプリはSurfaceViewのコールバックにのみスレッドを描画スレッドをもたせています。
明示的にキャンパスをロックしている箇所は一つだけです。描画スレッドも一つだけ。

誰がキャンパスをロックしているのかと調べた結果。
surfaceChangedが犯人です。

どうやらデバッグ時はsurfaceChangedが遅延するようで、描画スレッドのキャンパスロックと被るようです。

なので、描画スレッドをsurfaceChangedの後に起動するように修正しました。

ライフサイクルとスレッドを同期させる設計にするべきかもしれません。



2013年5月25日土曜日

CanvasのX軸Y軸の原点

描画の際にXY軸の原点がどちらであったか忘れる事があるのでメモ

Canvasクラスの原点(X=0,Y=0)は左上です。

Javaの画像処理クラスやiOSのアニメーションは左下が原点だったような?

数学のグラフのように、左下を原点にしてくれた方がわかりやすい気がします。

文字のように左上から描画していくので自然なのでしょうか?

OpneGLなど3Dになるとさらにややこしい・・・・・・

2013年5月23日木曜日

アマゾンのアプリストアで配布

アマゾンのアプリストアに「漫画ビューワ広告無し」を登録しました。

英語のページを翻訳しながらの登録でしたので色々を解り難く、、
114*114のアイコンやサイズの合うスクリーショットをが面倒でした。
アプリの登録から審査が通り公開されるまでは24時間ほどです。

アマゾンのアプリストアは、無料で開発者登録と公開ができます。
ただ、現状ではGooglePlayのほうがアプリが多いので利用者は
本日の無料アプリ」狙いが多いようです。

開発者向けの管理画面を解り易くしてほしいところです。
キンドルの評価がいまいちなのはGooglePllayを使用できない点が大きいようです。

無料で開発者を受け入れている点は評価できます。



「漫画ビューワ広告無し」は画像形式の漫画を開くためのアプリです。


漫画のコマ分割や文字の拡大機能を搭載予定のアプリでしたが、
先読み画像処理やその他もろもろのメモリ消費で落ちるため、
機能を限定して公開したアプリです。
無駄に先読み機能が付いています。

2013年5月22日水曜日

スマホ光学式手ぶれ補正機種一覧

 カメラアプリを公開していると「手ぶれ補正を付けてほしい」と要望を受ける事があります。
しかしながらアプリによる手ぶれ補正はISO感度を上げてシャッタースピードを早くしているだけで、手ぶれを多少軽減する程度です。ISO感度を上げると画質が悪くなるので効果はプラスマイナスゼロだと思います。これを電子式手ぶれ補正と言います。

 スマホ自体のカメラモジュールに光学式手ぶれ補正機能が付いていればデジカメ同様の手ぶれ補正と画質を維持できます。ただ光学式手ぶれ補正機能付きのスマホは限られています。

 光学式手ぶれ補正機能付きのスマホ一覧をピックアップしてみました。

他にも 
AQUOS PHONE SERIE SHL21
AQUOS PHONE 102SH
など、

光学手ぶれ機能はシャープ製品の一部くらいしかありません。

他メーカーはカメラのF値を低くしてシャッターを早くする事で手ぶれを軽減しています。
F値が高いと背景がボケるため記念撮影には向いていません。

ISO:電子的な感度
F値:レンズの暗さ



2013年5月21日火曜日

偽メールボックスがGooglePlayお勧めアプリに?



人気が無いため放置していたアプリ「偽メールボックス」が何故か

一日のインストール9000越え!

普段は一日10インストール有るかないかなんですが・・・・・・

しかし、嬉しい訳ではありません。

このアプリの説明文が悪かったのか実際に不具合があるのかは定かではありませんが、

評価が一気に下がった。。

このアプリは広告無し、インターネットアクセス無しの安全なアプリです。
利益を目的にしていない、ユーザーからの評価を得るために作ったのに残念な結果になりました。

Googleさん、更新頻度の高いアプリの宣伝をお願いします。。

次は万全のプログラムと説明文で挑みます!

2013年5月18日土曜日

カスタマイズしたVIEWをXMLレイアウトで実装 サンプルコード

viewをカスタマイズして使用するには幾つか方法があります。
XMLで表記する場合は以下になります。



                                              <パッケージ名.クラス名
                                                  android:id="@+id/aaa"
                                                  android:layout_width="match_parent"
                                                  android:layout_height="wrap_content"
                                                  android:layout_gravity="top"
                                                  android:layout_weight="1.15"
                                                  android:gravity="top" >

                                              </パッケージ名.クラス名>

findViewIDを使用する場合はコンストラクタが必要です。

 public クラス名(Context context, AttributeSet attrs){
 super(context,attrs);
     public クラス名(Context context, AttributeSet attrs,int defStyle){
 super(context,attrs、defStyle);


プログラムから使用する場合はいつも通りです。

ブログ内検索キーワード、XML、独自ビュー、カスタマイズビュー

クローン不可クラスをクローン可能にする サンプルコード

オブジェクトの基本クラスにはクローンメソッドがあるが
サブクラスには引き継がれない事がある。

そこでクラスをクローン可能にするためのサンプルコードが以下。


public class クラス名 extends クローン出来るようにしたいクラス implements Cloneable{
//コンストラクタはクローンしたいクラスによる
public クラス名(Context context) {
super(context);

}
//
 public クラス名 clone() throws CloneNotSupportedException {
   return (クラス名) super.clone();
}

絶対にクローン出来るとは保証できません

JAVAのクラスはイコールでコピーしても参照扱いになるので
クローンのようにメモリを新たに確保して別の実体にする。

Admobのクリック単価は一円以下

GoogleAdsenceならワンクリック十円以上の広告がざらですが
AdMobはワンクリック一円以下になることもある。

特に今年の五月に入ってからのクリック単価の下がりは酷い

シュミレーションゲームの広告レポート
年月日  利益  広告依頼 表示回数 クリック数 クリック率
2013/5/17
$0.23
674
642
27
4.01%
2013/5/16
$0.13
529
520
12
2.27%
2013/5/15
$0.27
740
701
17
2.30%
2013/5/14
$0.16
643
614
12
1.87%
2013/5/13
$0.18
1,078
1,012
25
2.32%
2013/5/12
$0.57
1,001
993
37
3.70%
2013/5/11
$0.29
1,122
1,103
36
3.21%
2013/5/10
$0.13
697
696
18
2.58%
2013/5/9
$0.10
485
465
16
3.30%
2013/5/8
$0.23
665
660
35
5

クリック率が高い理由は、広告をクリックしてもアプリが停止しない構造だからです。

シュミレーションゲームなど(例えばナメコ育成とか)はアプリを停止せずに広告を開く事ができます。そのためクリック率を高くする事ができる。



2013年5月17日金曜日

GooglePlayゲームサービス

本日なにげなくGooglePlayの開発者向けコンソールを開いたら。
あれ?メニューに見覚えのないマークが……

GooglePlayゲームサービス」なにこれ?

開いてみたらなんと!
ゲーム用のクラウドサービスでした。
ゲームデータやランキングをクラウド化したり、
マルチプレイヤーで通信対戦ができるらしい!

普段は簡単府を使用しない私でも驚き、と言いますか待っていました!

個人でサーバーを運用するのはレンタルだろうと厳しいですからね。

WIFIダイレクトのAPIレベルや安定性の問題から多人数プレイのゲーム開発はあきらめ気味でした。青牙は管理が面倒でした。
携帯ゲームは通信対戦が出来てこそだと思います。



これで、本格的にゲームエンジンの開発を進められます。

4K動画撮影できる安いカメラ

4K動画の撮影が出来るカメラがお手頃価格になってきました。

防水やリモート用の部品も含まれてこの値段です。ハイスピードカメラにもなります。
とは言っても、4K動画を再生するディスプレイが高級すぎて手が届きません。
スマホはディスプレイがフルハイビジョンに進化してきましたが、
テレビ放送が4K以上になるにはしばらく待たねばいけないようです。

今後の予想としては、4Kテレビの普及よりも、PCディスプレイが先に4Kに対応するでしょう。
それとほぼ同時に4Kディスプレイ+4Kカメラ付きのスマホが発売されると予想します。
CMOSセンサーなら動画サイズを大きくしやすいでしょうし。
スマホのカメラモジュール市場は広いですし。

画素数一覧
フルハイビジョンの画素数が200万画素
4K動画の画素数が800万画素

フルハイビジョンの段階でL版写真にしても問題ないレベルです。

このカメラは4K動画撮影をすると15fpsらしいですが、800万画素レベルの連続写真と考えれば面白いと思います。

2013年5月15日水曜日

スマホアプリの統合開発環境ID

Androidの開発と言うとEeclipseかと思います。
エクリプスなら何でも出来ますし、情報も多いです。

しかし、エクリプスはアンドロイド端末で動かす事はできません。
そこで「AIDE」というアプリを見つけました。
簡単なアプリなら作れるようです。

スマホでスマホのアプリ開発「AIDE
https://play.google.com/store/apps/details?id=com.aide.ui

ただし、インターネットアクセス権限がちょっと気になります。


他にも気になる開発環境が

インテルのHTML5開発環境「Intel XDK

AndroidADKもそうですが、これらも日本語に対応していません。


アプリの開発環境は沢山あります。
しかし、特殊なプログラムを作るには情報量が重要だと思います。
なので有名どころを使用するのが無難です。

2013年5月11日土曜日

GooglePlayマーケティングの除外

GooglePlayの開発管理画面の項目に「価格と販売/配布地域」の設定画面があります。
その項目の下の方に

マーケティングの除外

という項目がありますが、いつもながらGoogleさんの日本語は意味がわかりません。

意味的には「貴方のアプリをGoogleの管轄以外で宣伝してもいい?」という事だと思います。

Googleは有料アプリやAdmobで利益を得る事ができるので積極的にアプリを宣伝したいのかもしれません。

なので、チェックを入れておいて害は無いはずです。

2013年5月9日木曜日

Sound reaction shooting camera application


Download audio remote control camera is here.

Voice remote control camera, you can voice or was set to camera shooting by the reaction of a big sound.

Through the use of a microphone highly directional, you can remote control from a distance of more.

There is no advertising is a free app.

Remote control camera 2 corresponding to the movie shooting and front camera is also under development.

root required.I turn off the shutter sound of the camera


Free app "Camera silencer"




Terminal operating because it does not give me a review still is not correct.
It is paying off for many terminals as long as you see the statistics.
I think application that can silence the camera without loss of resolution is rare.
And It seems like it is eliminate the shutter sound until it turned into root for some people,
I do not think there is any need for crossing the bridge dangerous but not a developer.

I can silence if "EVO 3D ANDROID4.0.3".
Silencer immediately after use of the camera - when I take off the, but the sound may be formed by delay,
Silencer - while with a camera and video can also be silenced completely.
It may be the only app that can silence the 3D shooting.

I can quieter the "EVO WIMAX ANDROID2.3.3". The shutter sound is not much heard only in a quiet place. Video camera can silence.

I do not know yet for other terminals. It offers a mode - silencer of three types of current. You may increase the - terminal silencer that can be tested, the more.

Leave it to other apps, camera feature has reduced the development cost of this app.
There is a place where the lack of stability for that somewhat.


/ / Terminal operation report
Quiet ARROWS Z ISW11F EX
silence crane-pub X
Quiet DIGNO ISW11K EX
Kyocera Hydro C5170?
LG Optimus Elite EX

Download

2013年5月8日水曜日

カメラをリモコン操作するアプリ


音声リモコンカメラはスマホのカメラを遠隔操作することができます。

音声リモコンカメラのダウンロードはこちら

サイレントモードを使用すればシャッター音を消す事もできます。
※画質が低下します。

保存先の指定も可能です。

音声リモコンカメラ2開発中!

2013年5月7日火曜日

大きな音に反応させてカメラ撮影するアプリ



音声リモコンカメラのダウンロードはこちら

音声リモコンカメラは、設定した音声、または、大きな音に反応させてカメラ撮影することができます。

指向性の高いマイクを使用する事で、より遠くからの遠隔操作ができます。

無料アプリです広告はありません。

フロントカメラや動画撮影に対応したリモコンカメラ2も開発中です。

2013年5月6日月曜日

スクロールビュー サンプルコード ScrollView Xml記述

端末によってはディスプレイの解像度が低く、
画面が切れて表示されてしまう事が有ります。

そういった場合を考慮してレイアウトの親には
スクロールビューの使用をおすすめします。




<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  <LinearLayout 
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

・・・・略


</LinearLayout>
</ScrollView>

・キーワード
画面レイアウト
XML記述



2013年5月5日日曜日

GMailの送信サンプル ファイル添付

GMAILの送信サンプル

Java Mail for ANDROIDのライブラリをlibに追加してください。
インターネットのパーミッションも必要です。

 



import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;




   protected  void sendGmail(){ 
     //エラー対策 エラー時は以下を使用  
    //  StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build());
       Properties props = new Properties();  
     
       props.put("mail.smtp.host", "smtp.gmail.com"); 
       props.put("mail.host", "smtp.gmail.com");       
       props.put("mail.smtp.port", "587"); 
       props.put("mail.smtp.auth", "true"); 
       props.put("mail.smtp.starttls.enable", "true");
     
         Session session = Session.getDefaultInstance(props);  
       session.setDebug(true);  
     
       MimeMessage msg = new MimeMessage(session);  
     
     
     
       try {  
        // 件名
           msg.setSubject(daimei, "UTF-8");  
           msg.setFrom(new InternetAddress(from)); 
           msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
     
     
          Multipart mixedPart = new MimeMultipart("mixed");            
           
           
           // 本文
           MimeBodyPart textBodyPart = new MimeBodyPart();  
           textBodyPart.setText(honbun, "UTF-8", "plain");  
           textBodyPart.setHeader("Content-Transfer-Encoding", "base64");  
           mixedPart.addBodyPart(textBodyPart);  
     
     
           //添付ファイル  
           MimeBodyPart imageBodyPart = new MimeBodyPart();  
           DataSource dataSource = new FileDataSource(sdcard+gazo+".jpg");  
           DataHandler dataHandler=new DataHandler(dataSource);  
           imageBodyPart.setDataHandler(dataHandler);  
           try {  
               imageBodyPart.setFileName(MimeUtility.encodeWord(gazo+".jpg"));  
           } catch (UnsupportedEncodingException e) {  
                e.printStackTrace();  
               eNumber=1;
           }  
           imageBodyPart.setDisposition("attachment ");   
           mixedPart.addBodyPart(imageBodyPart);  
     

           msg.setContent(mixedPart);  
     
     
           Transport t = session.getTransport("smtp");  
           t.connect(from,fpass); //Gmailアカウント設定  
           t.sendMessage(msg, msg.getAllRecipients());  
     
       } catch (MessagingException e) {  
           e.printStackTrace();  
         }  
     
   

2013年5月3日金曜日

JAVA MAIL送信 android.os.NetworkOnMainThreadException

NetworkOnMainThreadExceptionはUIのメインスレッドからネットワークを同期させようとするエラーです。

メインスレッド以外からこのエラーが発生する場合は、
ネットワークコネクション実行前に以下のコードを挿入してください。

 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build());

特にAndroid2.3以下でテストした場合は注意が必要です。
Android3以上と挙動が異なるのでNetworkOnMainThreadExceptionがバージョンによって発生しない事があります。

2013年5月1日水曜日

アプリを宣伝する方法

マーケットに登録しただけではアプリを利用してもらえません。
開発したアプリを利用してもらうには以下の宣伝方法が有効です。

1、マーケットの検索を有効にする
 アプリ名プロモーションテキスト説明文の順で使用されている言葉をキーワードにして検索が行われています。
 アプリ名の後ろにキーワードを付けるなど、工夫できます。

2、ブログやツイッターでアプリを宣伝する
 ブログの場合は宣伝記事を書くのが有効です。

3、動画サイトを使用する(使ってみた系の)
 Youtubeやニコニコ動画などで宣伝です。

ダウンロードが伸びないい場合は、この三つを行っておきましょう。
特に競合製品が多い場合はマーケットのキーワードが弱くなるので注意しましょう。

アプリを宣伝するには他にも方法があります。
アプリ自体に自分の他のアプリの広告を載せるなど、
本末転倒なようですが、ダウンロード数が伸びるほどマーケットに表示されやすくなります。
自身への投資が一番有効です。