タイトル長くて分かりにくいですが、、
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月25日火曜日
2012年9月19日水曜日
[Android]動くジョジョ風ランチャーウィジェット2をリリースしました
動くジョジョ風ランチャーウィジェット2をリリースしました。
1とは別アプリとして動作します。
1ではなかったユーザーさんが好きな文字を入力できる機能を実装。
こんな風に文字入力できます。
ウィジェットとして設定するとこんな感じです。
お試しあれ。
https://play.google.com/store/apps/details?id=com.gettingsignals.android.JoJoLauncher2
1とは別アプリとして動作します。
1ではなかったユーザーさんが好きな文字を入力できる機能を実装。
こんな風に文字入力できます。
ウィジェットとして設定するとこんな感じです。
お試しあれ。
https://play.google.com/store/apps/details?id=com.gettingsignals.android.JoJoLauncher2
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は銀行口座が認証されないと変更できないので注意
2012年9月7日金曜日
[Android]広告(adstir)をFragment化してみた
nendさんに続いて、お次はAdStirさんです。
http://ja.ad-stir.com/
AdStirさんは複数の広告ネットワークを自動で配分してくれます。
Android 2.xでも使えるように、Android Support Package v4使ってます。
libsフォルダに adstir.jar を追加し、ビルドバスに追加。
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
・・・・>
<meta-data android:name="ADSTIR_APP_ID" android:value="MEDIA-xxxxxxx" />
</application>
http://ja.ad-stir.com/
AdStirさんは複数の広告ネットワークを自動で配分してくれます。
Android 2.xでも使えるように、Android Support Package v4使ってます。
libsフォルダに adstir.jar を追加し、ビルドバスに追加。
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
・・・・>
<meta-data android:name="ADSTIR_APP_ID" android:value="MEDIA-xxxxxxx" />
</application>
main.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<fragment
android:id="@+id/fragmentAd"
android:name="com.package.Sample.AdstirFragment"
android:name="com.package.Sample.AdstirFragment"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
/>
</RelativeLayout>
AdstirFragment.java
public class AdstirFragment extends Fragment {
AdstirView adView;
public AdstirFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
adView = new AdstirView(getActivity(), 1);
return adView;
}
@Override
public void onResume() {
super.onResume();
adView.start();
}
@Override
public void onPause() {
super.onPause();
adView.stop();
}
@Override
public void onDestroy() {
super.onDestroy();
new AdstirTerminate(getActivity());
}
@Override
public void onDestroy() {
super.onDestroy();
new AdstirTerminate(getActivity());
}
}
onResume() / onPause() でstart / stop の処理が必要。
これでいいのかな、Fragment使いこなすにはもう少しかかりそう。
[Android]広告(nend)をFragment化してみた
とあるアプリをタブレット対応したので、ついでに広告処理もFragment実装してみました。
使用したアドネットワークは、nendさん。
https://www.nend.net/
libsフォルダにnendSDK-1.2.1.jarを格納し、ビルドパスに追加。
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" >
<fragment
android:id="@+id/fragmentAd"
android:name="com.sample.package.NendFragment"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
使用したアドネットワークは、nendさん。
https://www.nend.net/
libsフォルダにnendSDK-1.2.1.jarを格納し、ビルドパスに追加。
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
追記。
main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" >
<fragment
android:id="@+id/fragmentAd"
android:name="com.sample.package.NendFragment"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>
NendFragment.java
public class NendFragment extends Fragment implements NendAdListener {
private static final int SPOT_ID = ****** 発行されたSPOT ID ******;
private static final String API_KEY = "******** 発行されたAPI KEY *********";
public NendFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
NendAdView adView = new NendAdView(getActivity().getApplicationContext(), SPOT_ID, API_KEY);
adView.setListener(this);
return adView;
}
@Override
public void onFailedToReceiveAd(NendAdView arg0) {
}
@Override
public void onReceiveAd(NendAdView arg0) {
}
}
Fragment化しておけば、レイアウトファイルに追加するだけでいいから便利ですねー。
登録:
投稿 (Atom)