読者です 読者をやめる 読者になる 読者になる

ともちゃんのAndroid開発日記

組込みC言語プログラマだったともちゃんが、四苦八苦しながら、AndroidのJAVA言語を習得して行きます。ともちゃんの備忘録も兼ねています。

Androidアプリの課金テストのアカウント

課金テスト用のアカウントは、Google Play Consoleの [設定]→ [テスタの管理] だけでなく、 [設定]→ [アカウントの詳細]→ [テスト用のアクセス権がある Gmail アカウント] にも登録しないと、課金されてしまいます。

Android 6.0のRuntime Permission

Android 6.0のRuntime Permissionの取得方法です。 1.Activityで実行する例 ストレージのアクセス権を得る場合の例です。 if (ContextCompat.checkSelfPermission(ExportImportActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageMana…

AChartEngineで円グラフを描く

AChartEngineで円グラフを描く public void displayPieChart( int dataCount, String label[], int data[], int kind) { Resources resources = context.getResources(); if (dataCount == 0) { chartLayout.removeAllViews(); return; } CategorySeries ser…

Google Playでapkの公開に時間がかかった

Google Playでアプリの公開に時間がかかりました。 36時間経っても公開されず、さすがにおかしいと思い、バージョンコードを一つ上げて、apkをアップデートしました。 そうすると、何事も無かったかのように、2時間後くらいに新バージョンコードのapkが公開…

端末起動時の時間のかかる処理

端末起動時に処理を動かすには、 android.intent.action.BOOT_COMPLETED をキャッチしてやります。 public class BootBroadcastReceiver extends BroadcastReceiver { Context context; @Override public void onReceive(Context context, Intent intent) { …

AsyncTaskのdoInBackgroundが途中終了する

AsyncTaskのdoInBackgroundが途中終了する現象に遭遇して四苦八苦しました。 AsyncTaskの呼び出し元のスレッドかActivityが終了すると、doInBackgroundも途中終了するような感じです。。 正確な記載でなくてすいません。

【挫折】Android 5.0でSDカードのタイムスタンプの変更が出来ない

ファイルマネージャで写真を移動すると、ファイルのタイムスタンプが移動した日になってしまうのに、常々不満を持っていました。 良いアプリを探しましたがありません。 ならば自分で作ってしまえ、と作り始めましたが、ダメです。出来ません。 Android 5.0…

DatePickerDialogのonDateSetが2回よばれる。

機種依存かもしれないですが、DatePickerDialogのonDateSetが2回よばれる現象が発生しました。 その場合の対処法: DatePickerDialog.OnDateSetListener DateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(android.widge…

Dialogが閉じたことを検出する

Dialogが閉じたことを検出する。 dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialogInterface) { }});

setTextの文字が途中で切れてしまうとき

textView.setText()で設定した文字が途中で切れてしまうことがありました。 そんな時、 textView.setInputType(InputType.TYPE_CLASS_TEXT); というように、textViewですが、InputTypeをTEXTにしてやったら解決することがあります。 理由は不明ですが・・・。

BACKボタンのイベントを取得する

BACKボタンのイベントを取得するには、Activity#onKeyDownを使用します。 @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK){ moveTaskToBack(true); return super.onKeyDown(keyCode, event); }else…

Androidでアプリを終了させる

Activity#moveTaskToBack (boolean nonRoot)アプリケーション全体を終了する際の推奨される終了方法です。アプリケーションを中断状態にします。 moveTaskToBack(true);

ナビゲーションバーに戻るボタンを付ける

ActionBarに戻るボタンを設置する。 ActionBar actionBar = getSupportActionBar();actionBar.setDisplayHomeAsUpEnabled(true); 戻るボタンを押したときのイベントはActivity#onOptionsItemSelected()で行う。 @Overridepublic boolean onOptionsItemSelect…

UCalendarView

カレンダー機能を作ってみました。 サンプルソースコードです。 http://uchida001tmhr.web.fc2.com 良かったら使ってみてください。

Viewの下位のViewのデータを参照する

Viewの下位のViewのデータを参照する方法です。 ViewGroup viewGroup = (ViewGroup) view;int viewCount = viewGroup.getChildCount();if (viewCount > 0) { TextView childView=(TextView) viewGroup.getChildAt(0); String strDate = childView.getText().…

EditTextの下線の色を変える

EditTextの下線の色を変える。 [1] Styles.xml <resources> <style name="EditTextColorControl"> <item name="colorControlNormal">@color/colorUnderLineNormal</item> <item name="colorControlActivated">@color/colorUnderLineActivated</item> </style></resources> colorControlNormal:通常時の色 colorControlActivated…

Playストアのアプリのページを表示する

評価のために、Playストアのアプリのページを表示したいことがあります。 以下の様にします。 String packageName = getPackageName();Uri uri = Uri.parse("market://details?id=" + packageName);Intent intent = new Intent(Intent.ACTION_VIEW, uri);sta…

Androidの通知LEDが点灯(点滅)しない!!

Androidの仕様で、スクリーンがONの時は、通知LEDは点灯しないそうです。 確かに!! スクリーンを点けていた!! 通知LEDは、スクリーンがOFFの時の通知手段なので、スクリーンがONの時は点灯しない仕様なんだそうだ。

Androidのアプリ内購入のテスト用アカウントの追加

Androidのアプリ内購入の開発では、テスト用アカウントは開発用アカウントとは別に作らなければなりません。開発用アカウントではサンドボックスデバッグはできても、実際の販売形態でのテストができないのです。 私は、 メイン機種:Android 5.1.1、開発者…

SQLiteデータベースの更新

SQLiteデータベースの更新は、update()を使用します。 String whereClause = "_id=" + String.valueOf(id);ContentValues values = new ContentValues();values.put("date", date);values.put("kind", kind);values.put("money", money);values.put("categor…

ポップアップウィンドウでスピナーを使用する

ポップアップウィンドウでスピナーを使うと、例外で落ちることがあります。 その場合、XMLのスピナーの属性に以下を追加します。 android:spinnerMode="dialog" これにより、スピナーが別ウィンドウで開くようになります。

DatePickerの日付を制限する(最小値)

DatePickerの日付を制限する(最小値) // 最小値GregorianCalendar minDate = new GregorianCalendar();minDate.set(2016, 0, 1); // 2016年1月1日DatePicker datePicker = datePickerDialog.getDatePicker();datePicker.setMinDate(minDate.getTimeInMillis(…

年月だけのDatePicker(スピナー型)

年月だけのDatePicker(スピナー型)の作り方です。 // 日付設定ダイアログの作成・リスナの登録DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), android.R.style.Theme_Holo_Dialog, DateSetListener, year, monthOfYear, dayOfMon…

Android 5.0(Lollipop)でDatePickerをスピナー型にする

Android 5.0(Lollipop)では、datePicker.setSpinnersShown(true)もdatePicker.setCalendarViewShown(false)も効きません。datePickerは強制的にカレンダ型になってしまいます。 スピナー型を選択する場合、旧テーマを選択することにより実現できます。 // 日…

Android版Gmailのプロフィール画像

Android版Gmailのプロフィール画像の変更は、Google+にログインして、プロフィール設定から行う。

数値をフォーマットする

金額の3桁毎にコンマを入れる。 textView.setText(String.format(Locale.JAPAN, "%,d", calculateBalance())); 数値のはじめを0でパディングする。 mNumber = (TextView) convertView.findViewById(R.id.textViewListNumber);mNumber.setText(String.format…

Spinner

Spinnerを使用してドロップダウンリストからアイテムを選択する。 レイアウト <Spinner android:layout_width="200dp" android:layout_height="wrap_content" android:id="@+id/spinnerCategoly" android:textAppearance="?android:attr/textAppearanceMedium" /> ソースコード ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R…</string></string></spinner>

ポップアップウィンドウ(PopupWindow)

PopupWindowを表示して、EditTextでデータを入力する方法です。 まず、PopupWindowのレイアウトを決めます。 category_setting_popup.xml

Action ModeとToolbarのオーバーラップ

Toolbarを使っていると、コンテキストメニュのAction ModeとToolbarが二重で表示される事があります。 それを避けるため、style.xmlで、 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>…

IMEが自動で出るのを防ぐ

EditTextにカーソルが移動すると、自動でIMEが出てしまうことがあります。 それを避けたい場合、 getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); のようにします。 こうすると、自分でEditTextを…

Scroll View

Linear LayoutやRelative Layoutをスクロールするには、Scroll Viewを使います。 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" android:layout_weight="1"></scrollview>

IntentでメールツールにCcとBccを渡す

今回は、IntentでメールツールにCcとBccを渡します。 ソースコード例はこちら: // 「メール作成01」のOnClickListener本体private class MakeMail01NowOnClickListener implements View.OnClickListener { public void onClick(View v) { SharedPreferences…

ボタンの角を丸くする

ボタンの色を変えるのは、 Button button = findViewByID(R.id.button1); button.setBackgroundColor(Color); でできることは、前に書きました。 ただ問題点は、ボタンを押したときの反応が亡くなることと、ボタンが何の変哲もない四画になってしまうことで…

ステータスバーの背景色を変える

setStatusBarColorを使います。 setStatusBarColorはAndroid5.0(Lollipop、API Level 21)で追加された機能です。 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {// Android 5.0 Lollipop Window window = getActivity().getWindow(); // cle…

ボタンの背景色の変更

ボタンの背景色の変更は、単純に Button button = findViewByID(R.id.button1); button.setBackgroundColor(Color); でできます。 例えば私の実装は下記です。 まず、色の定義クラスを作ります。 public class DataCenter { public final String COLOR_SKYBL…

Uriで指定されたファイルの読み込み

暗黙的インテントでアプリが起動される場合、Uriでファイルが指定されることがあります。その場合、ContentResolverを駆使しなくても、ファイルを読みだすことが可能です。 UriにCSVファイルが指定されている場合を例にとって、説明していきます。 1.Uriで…

スリープさせる

スリープさせる。 try { Thread.sleep(200); //200ミリ秒Sleepする} catch (InterruptedException e) {} スリープ中に割り込み等が入る可能性があるため、try~catchは必須です。

プログレスダイアログ

1.前処理 progressDialog = new ProgressDialog(dataCenter.getExportImportContext());progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);progressDialog.setMessage("処理を実行しています");progressDialog.setCancelable(true);progr…

マルチスレッド

1.マルチスレッドのクラス定義 static class AsyncExportProgress extends AsyncTask<Void, Void, String> { ProgressDialog progressDialog; @Override protected void onPreExecute() { // ここに前処理を記述します // 例) プログレスダイアログ表示 DataCenter dataCenter</void,>…

暗黙的インテントによるファイルの読み込み

1.マニフェスト CSVファイルを選択したときに、アプリが起動するようにするために。 <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/*" /></intent-filter> これだと、テキストファイル選択したときにアプリが起動するんだけど、CSVファイルに限定するやり方がわからなかった。 2.インポートメソッドのソースコード …

データファイルの書き出しとファイル添付

1.マニフェスト <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 2.ソースコード public static class FileIO { private final String EXPORT_FILE ="DietRecData.csv"; public FileIO () { } public void exportFile (Context context) { String dir1 = Environment.getExternalStorageDirectory().ge</uses-permission>…

AChartEngineでグラフを描く

グラフィックライブラリに、AFrecchartを使っていたのですが、どうしてもデータのある箇所に点(Shape)が出せなかったのと、ライセンスがLGPLであり、Androidアプリだとソースを公開しなければならない可能性もあるので、AChartEngineに変更しました。 0.準…

文字列⇔値変換

数値 ⇒ 文字列 String s = String.valueOf(i); 文字列 ⇒ 数値 int i = Integer.parseInt(s);

列挙型enumの使い方

enumの定義は以下の様に行います。 private enum CalendarAction { NEXT, PREVIOUS, TODAY, STAY} 使用時には、以下の様です。 switch (action) { case NEXT: cal_start.add(Calendar.DATE, DISPLAY_PERIOD_DAY); break; case PREVIOUS: cal_start.add(Calen…

日付が正しいかどうかのチェック

日付が正しいかどうかのチェックをするサンプルソースコードです。 String strYMD = ymd.strYear + "/" + ymd.strMonth + "/" + ymd.strDate;DateFormat sdf=new SimpleDateFormat("yyyy/M/d");try { sdf.setLenient(false); sdf.parse( strYMD );//Exceptio…

ラジオボタンの状態の取得、設定

ラジオボタンの状態の取得のサンプルソースコードです。 1.XMLは以下の通りです。 <RadioGroup android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/radioGroupSelectGrpah" android:layout_alignParentTop="true" android:layout_centerHorizontal="true"> </radiogroup>

チェックボタンの状態の取得、設定

チェックボタンの状態の取得するサンプルソースコードです。 何かボタンが押されたときに、チェックボタンの状態の取得するコードです。 CheckBox checkBoxStampStar = (CheckBox)view.findViewById(R.id.checkBoxStar);int stamp_Star;if (checkBoxStampSta…

グラフの再描画には、invalidate()を使用

グラフの再描画には、invalidate()を使用します。 グラフ描画のクラスのサンプルコードです。 private class GraphManager { public GraphManager () { }; public void displayGraph (TimeSeries series, float target, float min, float max ) { if (target …

EditTextの入力の変化を検出する

TextWatcherを使います。 1.TextWatcherの登録 // 年のTextWatcherを設定edTextYear.addTextChangedListener(new textWatcherYearMonthDate()); 2.TextWatcher本体 // 年月日のTextWatcher本体public class textWatcherYearMonthDate implements TextWat…

トーストを表示する

トーストを表示する。 Toast.makeText(getActivity(), "正しい日付を入力して下さい", Toast.LENGTH_SHORT).show(); 簡単ですね。