au のUserAgent一覧が公式サイトにありました。
http://www.au.kddi.com/developer/android/kishu/ua/index.html
2012年12月10日月曜日
2012年12月9日日曜日
[Android]HTML5のvideoタグの罠
WebView使ってHTML5のvideoタグを表示した時の動作にはまってしまったので、メモ。
Android 2.x
Videoタグをタップすると、ビデオビューが起動して全画面で再生
Android3.x
Videoタグをタップすると、ビデオビュー起動せず、ブラウザ内でインライン再生
コントロールの全画面押したときだけ、ビデオビュー起動して全画面で再生
もともとAndroid 2.xで動作確認していて、
Android4.0で動かすとぜんぜん動作違っていて困った。
Android 2.x
Videoタグをタップすると、ビデオビューが起動して全画面で再生
Android3.x
Videoタグをタップすると、ビデオビュー起動せず、ブラウザ内でインライン再生
コントロールの全画面押したときだけ、ビデオビュー起動して全画面で再生
もともとAndroid 2.xで動作確認していて、
Android4.0で動かすとぜんぜん動作違っていて困った。
2012年12月7日金曜日
[Android]アプリケーションのキャッシュに保存する
アプリで取得したデータを永続的にキャッシュしておきたい場合には、
アプリケーションのキャッシュに保存しておきましょう。
使い方1:データ読み出し
InputStream in = context.openFileInput("saveData");
使い方2:画像読み出し
FileInputStream is = context.openFileInput(dataName);
Bitmap image = BitmapFactory.decodeStream(is);
is.close();
使い方1:データ保存
FileOutputStream os = context.openFileOutput("saveData", Context.MODE_PRIVATE);
int DEFAULT_BUFFER_SIZE = 1024 * 4;
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int n = 0;
while (-1 != (n = in.read(buffer))) {
os.write(buffer, 0, n);
}
os.close();
使い方2:画像保存
FileOutputStream os = context.openFileOutput(dataName, Context.MODE_PRIVATE);
ret = image.compress(Bitmap.CompressFormat.PNG, 100, os);
os.cloase();
永続的でなく一時的に保存したい場合は、こちらに保存するのもアリです。
Context.getCacheDir()
http://developer.android.com/reference/android/content/Context.html#getCacheDir()
ファイル容量少なくなると、システムがファイル消してしまうので、その点のみ注意。
アプリケーションのキャッシュに保存しておきましょう。
Context.openFileInput()
http://developer.android.com/reference/android/content/Context.html#openFileInput(java.lang.String)使い方1:データ読み出し
InputStream in = context.openFileInput("saveData");
使い方2:画像読み出し
FileInputStream is = context.openFileInput(dataName);
Bitmap image = BitmapFactory.decodeStream(is);
is.close();
Context.openFileOutput()
http://developer.android.com/reference/android/content/Context.html#openFileOutput(java.lang.String, int)使い方1:データ保存
FileOutputStream os = context.openFileOutput("saveData", Context.MODE_PRIVATE);
int DEFAULT_BUFFER_SIZE = 1024 * 4;
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int n = 0;
while (-1 != (n = in.read(buffer))) {
os.write(buffer, 0, n);
}
os.close();
使い方2:画像保存
FileOutputStream os = context.openFileOutput(dataName, Context.MODE_PRIVATE);
ret = image.compress(Bitmap.CompressFormat.PNG, 100, os);
os.cloase();
永続的でなく一時的に保存したい場合は、こちらに保存するのもアリです。
Context.getCacheDir()
http://developer.android.com/reference/android/content/Context.html#getCacheDir()
ファイル容量少なくなると、システムがファイル消してしまうので、その点のみ注意。
2012年12月4日火曜日
[Android]ダイアログ作成コピペ
ダイアログ作成処理をActivityのライフサイクルに乗せる用のコピペ。
自分でダイアログ表示してもいいですが、メモリリークするので、
ライフサイクルに乗せた方がベターです。
==============
Before
==============
// メソッド呼ばれたらその場でダイアログ表示する
private Dialog createErrorDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.dialog_title)
.setMessage(R.string.dialog_message_error)
.setPositiveButton(R.string.dialog_button_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == DialogInterface.BUTTON_POSITIVE) {
dialog.dismiss();
}
}
});
builder.create().show();
}
==============
==============
After
==============
final int DIALOG_ERROR_1 = 1;
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_ERROR_1:
return createErrorDialog();
default:
return null;
}
}
// メソッド呼ばれたら、Dialog作成
private Dialog createErrorDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.dialog_title)
.setMessage(R.string.dialog_message_error)
.setPositiveButton(R.string.dialog_button_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == DialogInterface.BUTTON_POSITIVE) {
dialog.dismiss();
}
}
});
return builder.create();
}
// ボタンクリックされたら、ダイアログ表示
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// ダイアログ表示
showDialog(DIALOG_ERROR_1);
}
});
2012年12月3日月曜日
[Android]着信音ダイアログを表示する
着信オンダイアログを表示する方法
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
startActivityForResult(intent, REQUEST_CODE_RINGTONE_PICKER);
選択結果はonActivityResultで受け取ります。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == REQUEST_CODE_RINGTONE_PICKER ){
if(resultCode == RESULT_OK){
Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if(uri != null) {
ringtone = RingtoneManager.getRingtone(this, uri);
if(ringtone != null) {
uri.toString();// 着信音のパス
ringtone.getTitle(this);// 着信音の名前
}
} else {
// サイレント
}
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == REQUEST_CODE_RINGTONE_PICKER ){
if(resultCode == RESULT_OK){
Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if(uri != null) {
ringtone = RingtoneManager.getRingtone(this, uri);
if(ringtone != null) {
uri.toString();// 着信音のパス
ringtone.getTitle(this);// 着信音の名前
}
} else {
// サイレント
}
}
}
}
2012年11月28日水曜日
[Android]ImageViewの後始末
ImageViewは画像を表示するのに使いますが、
終了時にちゃんとメモリ解放処理いれてあげないと、
大きい画像を扱ったりすると、すぐにメモリ不足おきてしまいます。
使うとき
imageView.setImageResource(resId);
imageView.setImageBitmap(bitmap);
imageView.setImageDrawable(drawable);
使い終わったとき
void cleanup(ImageView view) {
d = view.getImageDrawable()
d = null;
if(bitmap != null) {
if(!bitmap.isRecycle()) {
bitmap.recycle();
}
bitmap = null;
}
imageView.setImageDrawable(null);
終了時にちゃんとメモリ解放処理いれてあげないと、
大きい画像を扱ったりすると、すぐにメモリ不足おきてしまいます。
使うとき
imageView.setImageResource(resId);
imageView.setImageBitmap(bitmap);
imageView.setImageDrawable(drawable);
使い終わったとき
void cleanup(ImageView view) {
d = view.getImageDrawable()
d = null;
if(bitmap != null) {
if(!bitmap.isRecycle()) {
bitmap.recycle();
}
bitmap = null;
}
imageView.setImageDrawable(null);
view.setOnClickListener(null);
}2012年11月26日月曜日
[Android]metaio SDK 3.0 → 4.0にバージョンアップ
metaio Mobile SDK のバージョン4がリリースされました。
というわけで、
SDKを入れ替えましたが、大幅に変わっているので、注意点をいくつか。
1.metaio Mobile SDK がない!?
Download Center に行くと、
metaio Mobile SDK 4.0 が見当たりません。
metaio SDK v4.0.2に統合されたようです。
こちらをダウンロードしましょう。
2.jarの名前が変わっている
jar の名前がmetaiomobilesdk.jar からmetaiosdk.jar になっています。
metaiomobilesdk.jar をビルドパスから外しましょう。
それから、metaiosdk.jar をビルドパスに追加しましょう。
3.クラス名が大幅に変わっている
ARViewActivity.java で使用していた様々なクラス名が変更されています。
一つずつ置き換えていきましょう。
4.シグネチャの変更が必要。
metaio Developer Console でシグネチャ登録しましたが、
4.0 に変更した場合、再度シグネチャを取得する必要があります。
5.トラッキングデータの変更
今までのも使えますが、ここも名前が変わっています。
2012年11月25日日曜日
[Android]トレーニング
Android公式でトレーニングなる項目を見つけた。
いろんなサンプルコードを解説してくれてます。
http://developer.android.com/intl/ja/training/index.html
いろんなサンプルコードを解説してくれてます。
http://developer.android.com/intl/ja/training/index.html
2012年11月22日木曜日
[Android]SQLiteOpenHelperでDBバージョンを上げる時に、列を追加する方法
SQLiteOpenHelperでDBバージョンを上げる時に、列を追加する方法です。
onUpgrade()で古いバージョン、新しいバージョンが分かるので、
古いバージョンのときに処理を行うようにします。
(今回の場合は、1 -> 2にバージョン上げたと仮定します)
db.execSQLで、
列追加のSQLコマンドを実行すればOK。
ALTER TABLE テーブル名 add 追加する列名 型名
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
if(oldVersion == 1) {
db.execSQL( "ALTER TABLE " + DB_TABLE_NAME + " add " + ADD_COLUM_NAME + " TEXT;");
}
} catch (Exception e) {
e.printStackTrace();
}
}
2012年11月21日水曜日
[Android]WebView の背景を透過する方法
WebViewの背景を透過する方法です。
HTMLで以下のように指定しても、透過されません。
<body style="background-color:transparent;">
WebView に以下のようにセットしましょう。
webView.setBackgroundColor(0);
HTMLで以下のように指定しても、透過されません。
<body style="background-color:transparent;">
WebView に以下のようにセットしましょう。
webView.setBackgroundColor(0);
2012年11月20日火曜日
[Android]TextView に使用できるHTMLタグ一覧
TextView にHTMLタグありの文字列をセットすると、
リンクや文字色などを設定することができたりします。
String html_source;
textView.setText(Html.fromHtml(html_source);
しかし、
すべてのHTMLタグが使える訳ではないです。
使用できるタグはここ参照。
http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html
<a href="...">
<b>
<big>
<blockquote>
<br>
<cite>
<dfn>
<div align="...">
<em>
<font size="..." color="..." face="...">
<h1>
<h2>
<h3>
<h4>
<h5>
<h6>
<i>
<img src="...">
<p>
<small>
<strike>
<strong>
<sub>
<sup>
<tt>
<u>
<a>タグでリンク張り、ブラウザ起動させたい場合は、以下の設定も必要です。
MovementMethod movementmethod = LinkMovementMethod.getInstance();
textView.setMovementMethod(movementmethod);
リンクや文字色などを設定することができたりします。
String html_source;
textView.setText(Html.fromHtml(html_source);
しかし、
すべてのHTMLタグが使える訳ではないです。
使用できるタグはここ参照。
http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html
<a href="...">
<b>
<big>
<blockquote>
<br>
<cite>
<dfn>
<div align="...">
<em>
<font size="..." color="..." face="...">
<h1>
<h2>
<h3>
<h4>
<h5>
<h6>
<i>
<img src="...">
<p>
<small>
<strike>
<strong>
<sub>
<sup>
<tt>
<u>
<a>タグでリンク張り、ブラウザ起動させたい場合は、以下の設定も必要です。
MovementMethod movementmethod = LinkMovementMethod.getInstance();
textView.setMovementMethod(movementmethod);
2012年11月19日月曜日
[Android]WebViewのloadDataで文字化け
ここが参考になりました。
http://d.hatena.ne.jp/paraches/20120819
loadDataWithBaseURL(null, html, "text/html", "utf-8", null)
loadData(html, "text/html; charset=utf-8", "utf-8")
http://d.hatena.ne.jp/paraches/20120819
loadDataWithBaseURL(null, html, "text/html", "utf-8", null)
loadData(html, "text/html; charset=utf-8", "utf-8")
2012年11月17日土曜日
[Android]AES復号化処理でBadPaddingException
サーバで暗号化した文字列を
アプリで復号化しようとした際にはまったので、メモ。
SecretKey key = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] encrpytText = cipher.doFinal(encryptCode);
最後のdoFinal()で
BadPaddingException: pad block corrupted.
が発生します。
そんなあなたに、
暗号化キーと復号化キーは同じですか?
http://stackoverflow.com/questions/12110459/android-des-decrypt-badpaddingexception-pad-block-corrupted
アプリで復号化しようとした際にはまったので、メモ。
SecretKey key = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] encrpytText = cipher.doFinal(encryptCode);
最後のdoFinal()で
BadPaddingException: pad block corrupted.
が発生します。
そんなあなたに、
暗号化キーと復号化キーは同じですか?
http://stackoverflow.com/questions/12110459/android-des-decrypt-badpaddingexception-pad-block-corrupted
2012年11月16日金曜日
[Android]selectorをJavaで書く
selector使うと、
ボタン押したときの画像を変更できたりします。
とても、便利。
今回は、
XMLで定義しないで、プログラム上でselectorを行う方法です。
使うのは、StateListDrawableクラス。
http://developer.android.com/intl/ja/reference/android/graphics/drawable/StateListDrawable.html
ボタン押したときの画像を変更できたりします。
とても、便利。
今回は、
XMLで定義しないで、プログラム上でselectorを行う方法です。
使うのは、StateListDrawableクラス。
http://developer.android.com/intl/ja/reference/android/graphics/drawable/StateListDrawable.html
使い方
Drawable iconOn = /* Drawble 作成する */;
Drawable iconOff = /* Drawble 作成する */;
// StateListDrawable に状態と表示するDrawable をセット
StateListDrawable d = new StateListDrawable();
d.addState( new int[]{ android.R.attr.state_selected }, iconOn );
d.addState( new int[]{ -android.R.attr.state_selected }, iconOff );
状態は、
new int[] { android.R.attr_state_xxxxx}
という形で指定します。
状態が無効のときは、マイナスを付ける
new int[] { -android.R.attr_state_xxxxx}
あとは、Viewにセットするだけです。
2012年11月14日水曜日
[Android]画面解像度の違い
ldpi、hdpi、mdpi、xdpi などありますが、
それぞれいったい画面サイズはいくつなのさ?
という訳で公式サイトにありました。
http://developer.android.com/intl/ja/guide/practices/screens_support.html#testing
それぞれいったい画面サイズはいくつなのさ?
という訳で公式サイトにありました。
http://developer.android.com/intl/ja/guide/practices/screens_support.html#testing
2012年11月13日火曜日
[Android]APIレベル一覧
APIレベルが分からなくなってしまうので、Android公式ページで探してきた。
http://developer.android.com/intl/ja/guide/topics/manifest/uses-sdk-element.html#ApiLevels
ついでに現在のOSシェア、画面解像度の割合とかもあった。
グラフでみやすい。
http://developer.android.com/intl/ja/about/dashboards/index.html
http://developer.android.com/intl/ja/guide/topics/manifest/uses-sdk-element.html#ApiLevels
ついでに現在のOSシェア、画面解像度の割合とかもあった。
グラフでみやすい。
http://developer.android.com/intl/ja/about/dashboards/index.html
2012年11月12日月曜日
[Android]Android開発グッズ(リール式USBケーブル)
Android開発で役立つアイテムを紹介します。
リール式USBケーブル。
端末付属のUSBケーブルでもよいですが、
100均で売られているリール式USBケーブルをおすすめします。
お勧めポイント
・安い
・ケーブルが細い
・リール式なので机の上がすっきり。
リール部分は壊れやすいのが難点ですが、
壊れたらリール部分をはずしておくとかさばらなくてよいです。
ぜひ。
端末付属のUSBケーブルでもよいですが、
100均で売られているリール式USBケーブルをおすすめします。
お勧めポイント
・安い
・ケーブルが細い
・リール式なので机の上がすっきり。
リール部分は壊れやすいのが難点ですが、
壊れたらリール部分をはずしておくとかさばらなくてよいです。
ぜひ。
2012年11月10日土曜日
Androidアプリ開発用に所有している端末リスト(2012)
Androidアプリの開発していると気づいたら、端末増えてきたのでまとめてみます。
docomo GALAXY NEXUS SC-04D チタンシルバー SAMSUNG Android4.0搭載 スマートフォン 白ロム 携帯電話本体標準セット
Amazonで購入。ケース付けてくれた。ラッキー。
docomo GALAXY Tab 10.1 LTE SC-01D
初のタブレット。OSは3.2。
ソニタブとは迷った。Galaxyにしたのは、Google公認なのと値段。
レイアウト確認がメイン。
解像度違うと、レイアウトが崩れる崩れる。。
4.0にバージョンアップできるけど、現状維持。
即日発送!新品 IS05 グリーン×ブラック 携帯電話 白ロム au
とあるアプリで不具合報告あって、
手持ちの端末で発生しなくて、オークションで5000円くらい購入。
結局再現できなかったですけど。
OSは2.2。
スペックが貧弱なので、メモリ不足の動作確認で。
あと、Felica搭載端末なのが魅力です。
au IS06 チャコールブラック
家族が機種変したので、貰った。
OSは2.2。
2.3にバージョンアップ出来るけど、現状維持。
電池が膨らんでて、危険。。
新品 iPhone 4S 16GB ホワイト au 白ロム MD240J/A
iPhoneアプリからAndroidへの移植案件が重なって、
画面イメージだけだと詳細まで確認できないため、購入。
オークションで。
iPhoneはiPhoneの
AndroidはAndroidの良さがそれぞれあるなと実感。
------------
という訳で現在は、iPhone含めて7台所有。
メインは、Galaxy Nexus と Xperia Play。
ルータとして、ISW11HT。
OS内訳
1.6 ・・・ なし
2.1 ・・・ なし
2.2 ・・・ 2台(IS05、IS06)
2.3 ・・・ 2台(PLAY、ISW11HT)
3.2 ・・・ 1台(SC-01D)
4.0 ・・・ 1台(SC-04D)
4.1 ・・・ なし
4.2 ・・・ なし
今すぐ、買うつもりはないけど、
次は、
4.xのタブレット端末
4.1のスマートフォン
かな。
メーカーは、悩みどころです。
ARROWS、MEDIASは一台は持っておきたいところ。
NEXUS 7が欲しい。
iPhone 5も欲しい。
Windows Phone 8も欲しい。
我慢、我慢。
1.au ISW11HT (HTC)
http://www.au.kddi.com/seihin/archive/kishu_archive.html?id=isw11ht
初めて購入したAndroid。私物です。
au初の WiMax + Wifiテザリング が魅力。
どこでもルータ代わりになって便利。
OSは購入時は、2.2。 今は、 2.3 にバージョンアップしてます。
2.docomo Galaxy Nexus SC-04D (SamSung)
4.0が普及し始めて、2.xのみでは動作確認が厳しくなってきたので、Amazonで購入。
docomo GALAXY NEXUS SC-04D チタンシルバー SAMSUNG Android4.0搭載 スマートフォン 白ロム 携帯電話本体標準セット
・Google標準機なので、基本こちらで動作確認。
・HTCと解像度異なるので、レイアウトの調整にも使ってます。
・NFCが付いてるので、それ使った開発もそのうち。
3. SIMフリー Xperia Play (SonyEricsson)
http://www.sonymobile.co.jp/product/docomo/so-01d/
楽天かAmazonで購入。
ギャラリー周りの動作確認で、ソニエリ端末が欲しかった。
Playにしたのは、形状変わっているのが理由。
OSは、2.3。
解像度は、HTCと同じなので、
HTCをルータと使ってる間の代替端末。
ゲームもできるよw
4. docomo Galaxy Tab 10.1 LTE SC-01D (SamSung)
Amazonで購入。ケース付けてくれた。ラッキー。
docomo GALAXY Tab 10.1 LTE SC-01D
初のタブレット。OSは3.2。
ソニタブとは迷った。Galaxyにしたのは、Google公認なのと値段。
レイアウト確認がメイン。
解像度違うと、レイアウトが崩れる崩れる。。
4.0にバージョンアップできるけど、現状維持。
5. au IS05 (Sharp)
http://www.sharp.co.jp/products/is05/即日発送!新品 IS05 グリーン×ブラック 携帯電話 白ロム au
とあるアプリで不具合報告あって、
手持ちの端末で発生しなくて、オークションで5000円くらい購入。
結局再現できなかったですけど。
OSは2.2。
スペックが貧弱なので、メモリ不足の動作確認で。
あと、Felica搭載端末なのが魅力です。
6. au SIRIUS α IS06 (PANTECH)
http://jp.pantech.com/products/siriusis06.htmlau IS06 チャコールブラック
家族が機種変したので、貰った。
OSは2.2。
2.3にバージョンアップ出来るけど、現状維持。
電池が膨らんでて、危険。。
7. au iPhone4S (Apple)
http://www.apple.com/jp/iphone/iphone-4s/specs.html新品 iPhone 4S 16GB ホワイト au 白ロム MD240J/A
iPhoneアプリからAndroidへの移植案件が重なって、
画面イメージだけだと詳細まで確認できないため、購入。
オークションで。
iPhoneはiPhoneの
AndroidはAndroidの良さがそれぞれあるなと実感。
------------
という訳で現在は、iPhone含めて7台所有。
メインは、Galaxy Nexus と Xperia Play。
ルータとして、ISW11HT。
OS内訳
1.6 ・・・ なし
2.1 ・・・ なし
2.2 ・・・ 2台(IS05、IS06)
2.3 ・・・ 2台(PLAY、ISW11HT)
3.2 ・・・ 1台(SC-01D)
4.0 ・・・ 1台(SC-04D)
4.1 ・・・ なし
4.2 ・・・ なし
今すぐ、買うつもりはないけど、
次は、
4.xのタブレット端末
4.1のスマートフォン
かな。
メーカーは、悩みどころです。
ARROWS、MEDIASは一台は持っておきたいところ。
NEXUS 7が欲しい。
iPhone 5も欲しい。
Windows Phone 8も欲しい。
我慢、我慢。
2012年9月25日火曜日
[Android]startActivityForResultでカメラ起動後、アプリに戻ると変数の値がnullになってる現象
タイトル長くて分かりにくいですが、、
startActivityForResult でカメラ起動する
変数に値を保持。
↓
カメラ撮影
↓
onActivityResult でアプリに戻ってくる
変数の値がnullになっている
のような現象が発生しました。
スマートフォンで発生せず、タブレットで発生。
・スマートフォン(SC-04D、ISW11HT)
・タブレット(SC-01D)
ソース1:カメラ起動する
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, filename);
values.put(MediaStore.Images.Media.MIME_TYPE, Const.MIMETYPE_PNG);
mImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
// カメラ起動
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
startActivityForResult(intent, Const.REQUEST_CODE_CAMERA);
mImageUriにカメラ撮影したデータを保存するもらう。
ソース2:カメラからの戻り処理
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK) {
Intent intent;
// カメラからの戻り処理
if(requestCode == Const.REQUEST_CODE_CAMERA){
Log.d(tag, mImageUri);
}
}
}
カメラから戻ったら、mImageUriをログ出力。
[原因]
タブレットを傾けていたのが、よろしくなかった模様。
カメラ起動元の画面はマニフェストで縦固定の指定をしていた。
android:screenOrientation="portrait"
カメラ起動後、縦⇔横回転が行われていたようで、
アプリに戻ってきたときに横 → 縦の処理が行われ、画面の再作成した。(と思う)
ここで変数が初期化されてしまった。
[対策]
マニフェストに以下を記述。
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|fontScale"
端末回転しても画面破棄しないようにする。
(orientationだけでいいんだけど、全部指定してみた)
startActivityForResult でカメラ起動する
変数に値を保持。
↓
カメラ撮影
↓
onActivityResult でアプリに戻ってくる
変数の値がnullになっている
のような現象が発生しました。
スマートフォンで発生せず、タブレットで発生。
・スマートフォン(SC-04D、ISW11HT)
・タブレット(SC-01D)
ソース1:カメラ起動する
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, filename);
values.put(MediaStore.Images.Media.MIME_TYPE, Const.MIMETYPE_PNG);
mImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
// カメラ起動
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
startActivityForResult(intent, Const.REQUEST_CODE_CAMERA);
mImageUriにカメラ撮影したデータを保存するもらう。
ソース2:カメラからの戻り処理
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK) {
Intent intent;
// カメラからの戻り処理
if(requestCode == Const.REQUEST_CODE_CAMERA){
Log.d(tag, mImageUri);
}
}
}
カメラから戻ったら、mImageUriをログ出力。
[原因]
タブレットを傾けていたのが、よろしくなかった模様。
カメラ起動元の画面はマニフェストで縦固定の指定をしていた。
android:screenOrientation="portrait"
カメラ起動後、縦⇔横回転が行われていたようで、
アプリに戻ってきたときに横 → 縦の処理が行われ、画面の再作成した。(と思う)
ここで変数が初期化されてしまった。
[対策]
マニフェストに以下を記述。
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|fontScale"
端末回転しても画面破棄しないようにする。
(orientationだけでいいんだけど、全部指定してみた)
2012年9月12日水曜日
[Android]アプリ内課金の銀行口座にデポジットされない問題→解決
Androidでアプリ内課金機能を実装する場合、
売り上げを入金してもらうための銀行口座が必要になります。
Google checkout から「設定」-「財務情報」から銀行口座を入力するわけですが、
https://checkout.google.com/sell/
Googleさんからテストデポジットがされなかったときの対処方法です。
私の使ったのは楽天銀行さんです。
銀行口座に以下の情報を入力します。
タイプ:Futsuu
銀行名:Rakuten Bank
口座名義:半角カタカナ(姓名の間スペース、小文字は大文字に)。※ローマ字ではない
銀行コード:0036
口座番号:xxxxxxx
支店番号:zzz
初めに登録したとき、
1ヶ月経ってもデポジットされず、デポジット失敗のメールも来なかったので、
サポートセンターから問い合わせしました。(英語のみ)
http://support.google.com/checkout/sell/bin/request.py?contact_type=payouts&from=vba
フォーム入力して、Submit押すと数日後にメール来ます。
※Submit押しても受付完了メールとか来なくて、何回もしてしまった。。
口座名義のところをローマ字で入力してしまってたので、修正したい旨を連絡。
銀行名も間違ってた。Rakuten KC にしてたorz
※カード見ながら入力するとこうなる
正しく入力し直して、1週間経過。
以前、Adsenseのデポジットされていたので、試しに入力するもNG。
3回やってアカウントロック。しまった!
もう一度問い合わせ。
・一週間経ってもデポジットされない。
・アカウントロックされちゃった。
Google「今日デポジットしたよー」
翌日にデポジット確認。
勉強になったこと。
・Adsenseのデポジットとは別。
・入力するときはここも参照。
http://support.google.com/adsense/bin/answer.py?hl=ja&answer=1316748#n4
・デポジットは1週間は待ってみること。
・デポジット失敗してもメールは来ない?
・なんでデポジットされなかったのかの原因は不明。
Adsense と違って、checkoutは銀行口座が認証されないと変更できないので注意
売り上げを入金してもらうための銀行口座が必要になります。
Google checkout から「設定」-「財務情報」から銀行口座を入力するわけですが、
https://checkout.google.com/sell/
Googleさんからテストデポジットがされなかったときの対処方法です。
私の使ったのは楽天銀行さんです。
銀行口座に以下の情報を入力します。
タイプ:Futsuu
銀行名:Rakuten Bank
口座名義:半角カタカナ(姓名の間スペース、小文字は大文字に)。※ローマ字ではない
銀行コード:0036
口座番号:xxxxxxx
支店番号:zzz
初めに登録したとき、
1ヶ月経ってもデポジットされず、デポジット失敗のメールも来なかったので、
サポートセンターから問い合わせしました。(英語のみ)
http://support.google.com/checkout/sell/bin/request.py?contact_type=payouts&from=vba
フォーム入力して、Submit押すと数日後にメール来ます。
※Submit押しても受付完了メールとか来なくて、何回もしてしまった。。
口座名義のところをローマ字で入力してしまってたので、修正したい旨を連絡。
銀行名も間違ってた。Rakuten KC にしてたorz
※カード見ながら入力するとこうなる
正しく入力し直して、1週間経過。
以前、Adsenseのデポジットされていたので、試しに入力するもNG。
3回やってアカウントロック。しまった!
もう一度問い合わせ。
・一週間経ってもデポジットされない。
・アカウントロックされちゃった。
Google「今日デポジットしたよー」
翌日にデポジット確認。
勉強になったこと。
・Adsenseのデポジットとは別。
・入力するときはここも参照。
http://support.google.com/adsense/bin/answer.py?hl=ja&answer=1316748#n4
・デポジットは1週間は待ってみること。
・デポジット失敗してもメールは来ない?
・なんでデポジットされなかったのかの原因は不明。
Adsense と違って、checkoutは銀行口座が認証されないと変更できないので注意
登録:
投稿 (Atom)









