2011年6月29日水曜日

ショートカットへの登録方法

今まで、ショートカットの存在を忘れておりました。
通話履歴で、発信・着信のボタンをわざわざウィジェットで用意していましたが・・・ただのボタンなんで、ショートカットで十分でした(アセアセ

と、いうことでアプリに起動用のショートカットを作成する方法を書いておきます。

Manifest部分

    
        
        
    

Manifest部分は、ホーム画面長押し → ホーム画面に追加 ダイアログ → ショートカット で表示されるショートカットを選択するダイアログでの表示を設定しています。
android:name ・・・ ショートカットの内容を定義したクラス名
android:label ・・・ ダイアログ内でのラベル名
android:icon ・・・ ダイアログ内でのアイコン
label,iconは設定しなければアプリ自体のアイコンとアプリ名になります。

IncomingShortcut.Class部分(Activityで実装)
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;

public class IncomingShortcut extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        // ショートカットの内容 インテントを発行
        Intent shortcutIntent = new Intent(getApplicationContext(), "実行するClass(***.class)を記述");
        // 何か渡したい場合は、putExtraで渡す(起動したいタブIDとか
        shortcutIntent.putExtra("****", *);

        // ホーム画面に設置した場合のショートカットの登録内容
        Intent intent = new Intent();
        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
        Parcelable iconResource = Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.call_incoming);
        // ホーム画面に設置した場合に表示されるアイコンの設定
        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
        // ホーム画面に設置した場合に表示されるラベル名の設定
        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.incoming));
  
        setResult(RESULT_OK, intent);
        finish();
    }

}
Class部分は、実際にホームに置いた場合の内容を書くみたいです。通話履歴では 発信履歴ボタンと着信履歴ボタンの2つを置いて、表示するタブを変えるためshortcutIntent.putExtraで表示するタブのIDをわたしてます。あと、Activityですので、finish()を呼び出してすぐに終了させてます。

これで、ホーム画面に設置できるショートカットができます。ショートカットにすることで ドックを変更できるホームランチャーなら ドックへの設置も行えるようになります。

(追記)
上のコードだとホームランチャーによっては、ドックへショートカットを置いたときにアイコンがアプリアイコンに変わってしまうことがあるみたいです。
なんで、最初にショートカット作成かどうかを判断するようにして、作成以外の場合は新しいIntentでAvitityを呼び出すようにしました。

2011年6月26日日曜日

通話履歴 3D(Call History 3D) Ver.1.1.8 ~ 1.2.0

version 1.1.8
カラーの選択数を増やしました。

version 1.1.9
アプリ起動時のタブを選択できるようにしました。

version 1.2.0
時間のAM,PM表示時に、分を2桁表示に変更しました。
これにより、時間フォーマットを変えちゃったんでAM,PM表示を使用されていた方は再設定が必要です。ご面倒を掛けてごめんなさい。

あと、カスタムのListViewでオーバーライドしないとダメなメソッドで使用方法がわからなかったやつを"Not Supported"表示していたのですが、普通に使えてるとのコメントがありましたので表示を取り除きました。何に使用しているメソッドか未だわかってないので不安ですが 何か不都合がありましたらご連絡ください、よろしくお願いいたします。

通話履歴 S(Call History Simple) ver.1.0.5 ~ 1.0.7

version 1.0.5
カラーの選択数を増やしました。

version 1.0.6
アプリ起動時のタブを選択できるようにしました。

version 1.0.7
時間のAM,PM表示時に、分を2桁表示に変更しました。
これにより、時間フォーマットを変えちゃったんでAM,PM表示を使用されていた方は再設定が必要です。ご面倒を掛けてごめんなさい。

2011年6月13日月曜日

通話履歴 3D(Call History 3D) Ver.1.1.7

3Dビューを1種類増やしました。

追加したビューは、こんな感じのです。

2011年6月12日日曜日

android カラーピッカー?カラーセレクター? ダイアログ

カラーピッカーと言うのか、カラーセレクターと言うのかわからないけど、まあカラーが選択できるダイアログのコードを公開します。SSは、2.2バージョンのエミュレーターです。バージョンによってダイアログの色とか変わるんですねぇ(知らなかったですわ

※マーケットに上げているのは色選択数を変更しています。

独自で作っているので 変な書き方してる部分は多めに見てください。なんせ、動けばいいわ程度でかいてますから・・・
■/drawable(各シークバーのスタイル定義)
color_picker_seekbar_r.xml(赤色のシークバースタイル)
color_picker_seekbar_g.xml(緑色のシークバースタイル)
color_picker_seekbar_b.xml(青色のシークバースタイル)
■/layout(各レイアウト)
main.xml(適当なメイン画面)
dialog_picker.xml(シークバーがあるダイアログ)
dialog_selecter.xml(カラーパレットがあるダイアログ)
■/values(文字)
strings.xml
■/src(ソース)
ColorSelectDialog.java
■マーケットURI
https://market.android.com/details?id=jp.hiro711.ColorSelectDialog&feature=more_from_developer
マーケットに上げておきますんで、DLして使ってみてください。

まったくコメントないですが・・・そんなに大変なコードじゃないので大丈夫だと思います。
カラーセレクトダイアログも、AlertDialog.Builderで作りたかったんですがGridViewを使ったら選択後すぐにダイアログを破棄できなかったんで、こんな作りになってしまいました。
普通のListViewで、16色くらいからの選択ならArrayAdapterでアダプターを作ってgetViewをオーバーライドして背景を変えてやって、AlertDialog.BuilderのsetAdapterでやればリストのXMLを作らなくても簡単にできます。注意するところは、setAdapterのOnClickListener実装時にDialogInterface.OnClickListenerを実装してやって、onClick時の最後にdialog.dismiss()でダイアログ破棄してやるくらいかな。

color_picker_seekbar_r.xml
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
    <shape>     
        <corners android:radius="5dip" />      
            <gradient          
                android:startColor="#ff000000"         
                android:centerY="0.5"         
                android:endColor="#ffff0000"         
                android:angle="0"     
            />    
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <clip>
         <shape>
          <corners android:radius="5dip" />
          <gradient
           android:startColor="#ff000000"
           android:centerY="0.5"         
           android:endColor="#ffff0000"         
           android:angle="0"       
          />      
         </shape>    
        </clip>  
    </item>
</layer-list>


color_picker_seekbar_g.xml
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:id="@android:id/background">
     <shape>     
         <corners android:radius="5dip" />      
            <gradient          
             android:startColor="#ff000000"         
             android:centerY="0.5"         
             android:endColor="#ff00ff00"         
             android:angle="0"     
            />    
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <clip>
         <shape>
          <corners android:radius="5dip" />
          <gradient
           android:startColor="#ff000000"
           android:centerY="0.5"         
           android:endColor="#ff00ff00"         
           android:angle="0"       
          />      
         </shape>    
        </clip>  
    </item>
</layer-list>
color_picker_seekbar_b.xml
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:id="@android:id/background">
     <shape>     
         <corners android:radius="5dip" />      
            <gradient          
             android:startColor="#ff000000"         
             android:centerY="0.5"         
             android:endColor="#ff0000ff"         
             android:angle="0"     
            />    
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <clip>
         <shape>
          <corners android:radius="5dip" />
          <gradient
           android:startColor="#ff000000"
           android:centerY="0.5"         
           android:endColor="#ff0000ff"         
           android:angle="0"       
          />      
         </shape>    
        </clip>  
    </item>
</layer-list>
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
 <Button android:id="@+id/changeTextColorButton"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="Change Text Color"
  />
 <Button android:id="@+id/changeBackgroundColorButton"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="Change Background Color"
  />
 <TextView android:id="@+id/sampleTextView1"
  android:layout_width="fill_parent"
  android:layout_height="40dp"
  android:gravity="center_vertical|center_horizontal"
  android:textSize="20dp"
  android:text="Sample1"/>
</LinearLayout>
dialog_picker.xml
<?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:padding="4dp"
   android:orientation="vertical">
    <TextView
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:paddingLeft="5dp"
     android:paddingRight="5dp"
     android:text="@string/color_picker_viewer"/>
    <TextView android:id="@+id/colorPickerViewer"
     android:layout_width="fill_parent"
     android:layout_height="40dp"
     android:layout_marginLeft="5dp"
     android:layout_marginRight="5dp"/>
    <TextView android:id="@+id/colorPickerTextR"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:paddingLeft="5dp"
     android:paddingTop="5dp"/>
    <SeekBar android:id="@+id/colorPickerSeekBarR"
     android:layout_height="fill_parent"
     android:layout_width="fill_parent"
     android:max="255"
     android:padding="8dp"
     android:progressDrawable="@drawable/color_picker_seekbar_r"/>
    <TextView android:id="@+id/colorPickerTextG"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:paddingLeft="5dp"/>
    <SeekBar android:id="@+id/colorPickerSeekBarG"
     android:layout_height="fill_parent"
     android:layout_width="fill_parent"
     android:max="255"
     android:padding="8dp"
     android:progressDrawable="@drawable/color_picker_seekbar_g"/>
    <TextView android:id="@+id/colorPickerTextB"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:paddingLeft="5dp"/>
    <SeekBar android:id="@+id/colorPickerSeekBarB"
     android:layout_height="fill_parent"
     android:layout_width="fill_parent"
     android:max="255"
     android:padding="8dp"
     android:progressDrawable="@drawable/color_picker_seekbar_b" />
</LinearLayout>
dialog_selecter.xml
<?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/colorSelectGridView"
     android:layout_height="fill_parent"
     android:layout_width="fill_parent"
     android:verticalSpacing="6dp"
     android:horizontalSpacing="6dp"
     android:numColumns="4"/>
</LinearLayout>
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, ColorSelectDialog!</string>
    <string name="app_name">Color Select Dialog</string>
    <string name="color_picker_viewer">Color Viewer(Click to select 16Color)</string>
    <string name="color_picker_red">RED</string>
    <string name="color_picker_green">GREEN</string>
    <string name="color_picker_blue">BLUE</string>
</resources>
ColorSelectDialog.java
package jp.hiro711.ColorSelectDialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class ColorSelectDialog extends Activity {
    final int CHANGE_TEXT = 0;
    final int CHANGE_BACKGROUND = 1;

    final int COLOR_TABLE[] = {
        0xffffffff, 0xffc0c0c0, 0xff808080, 0xff000000,
        0xffffc0c0, 0xffff6060, 0xffff0000, 0xff800000,
        0xffffe0c0, 0xffffb060, 0xffff8000, 0xff804000,
        0xffffffc0, 0xffffff60, 0xffffff00, 0xff808000,
        0xffe0ffc0, 0xffb0ff60, 0xff80ff00, 0xff408000,
        0xffc0ffc0, 0xff60ff60, 0xff00ff00, 0xff008000,
        0xffc0ffe0, 0xff60ffb0, 0xff00ff80, 0xff008040,
        0xffc0ffff, 0xff60ffff, 0xff00ffff, 0xff008080,
        0xffc0e0ff, 0xff60b0ff, 0xff0080ff, 0xff004480,
        0xffc0c0ff, 0xff6060ff, 0xff0000ff, 0xff000080,
        0xffe0c0ff, 0xffb060ff, 0xff8000ff, 0xff400080,
        0xffffc0ff, 0xffff60ff, 0xffff00ff, 0xff800080,
        0xffffc0e0, 0xffff60b0, 0xffff0080, 0xff800040
    };

    int mColor = 0xffffffff;
    int mTextColor = 0xffc0c0c0;
    int mBackgroundColor = 0xff000000;

    LayoutInflater inflater;  
    View dialogView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        final Button button1 = (Button)findViewById(R.id.changeTextColorButton);
        button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mColor = mTextColor;
                colorDialog(CHANGE_TEXT);
            }
        });
        final Button button2 = (Button)findViewById(R.id.changeBackgroundColorButton);
        button2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mColor = mBackgroundColor;
                colorDialog(CHANGE_BACKGROUND);
            }
        });
    }
   
    private void colorDialog(final int where) {
        final String rString = getResources().getString(R.string.color_picker_red);
        final String gString = getResources().getString(R.string.color_picker_green);
        final String bString = getResources().getString(R.string.color_picker_blue);

        inflater = LayoutInflater.from(this);  
        dialogView = inflater.inflate(R.layout.dialog_picker, null);
       
        final TextView textR = (TextView)dialogView.findViewById(R.id.colorPickerTextR);
        textR.setText(String.format("%s(%02X)", rString, (mColor & 0x00ff0000) >> 16));
        final TextView textG = (TextView)dialogView.findViewById(R.id.colorPickerTextG);
        textG.setText(String.format("%s(%02X)", gString, (mColor & 0x0000ff00) >> 8));
        final TextView textB = (TextView)dialogView.findViewById(R.id.colorPickerTextB);
        textB.setText(String.format("%s(%02X)", bString, (mColor & 0x000000ff)));
        final TextView viewer = (TextView)dialogView.findViewById(R.id.colorPickerViewer);
        viewer.setBackgroundColor(mColor);
        viewer.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                showDialog(0);
            }
        });
       
        final SeekBar seekBarR = (SeekBar)dialogView.findViewById(R.id.colorPickerSeekBarR);
        seekBarR.setProgress((mColor & 0x00ff0000) >>16);
        seekBarR.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            int value = seekBar.getProgress();
            textR.setText(String.format("%s(%02X)", rString, value));
            mColor = (mColor & 0xff00ffff) | value << 16;
            viewer.setBackgroundColor(mColor);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            int value = seekBar.getProgress();
            textR.setText(String.format("%s(%02X)", rString, value));
            mColor = (mColor & 0xff00ffff) | value << 16;
            viewer.setBackgroundColor(mColor);
        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            int value = seekBar.getProgress();
            textR.setText(String.format("%s(%02X)", rString, value));
            mColor = (mColor & 0xff00ffff) | value << 16;
            viewer.setBackgroundColor(mColor);
        }
    });
    final SeekBar seekBarG = (SeekBar)dialogView.findViewById(R.id.colorPickerSeekBarG);
    seekBarG.setProgress((mColor & 0x0000ff00) >> 8);
    seekBarG.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            int value = seekBar.getProgress();
            textG.setText(String.format("%s(%02X)", gString, value));
            mColor = (mColor & 0xffff00ff) | value << 8;
            viewer.setBackgroundColor(mColor);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            int value = seekBar.getProgress();
            textG.setText(String.format("%s(%02X)", gString, value));
            mColor = (mColor & 0xffff00ff) | value << 8;
            viewer.setBackgroundColor(mColor);
        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            int value = seekBar.getProgress();
            textG.setText(String.format("%s(%02X)", gString, value));
            mColor = (mColor & 0xffff00ff) | value << 8;
            viewer.setBackgroundColor(mColor);
        }
    });
    final SeekBar seekBarB = (SeekBar)dialogView.findViewById(R.id.colorPickerSeekBarB);
    seekBarB.setProgress((mColor & 0x000000ff));
    seekBarB.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
                int value = seekBar.getProgress();
            textB.setText(String.format("%s(%02X)", bString, value));
            mColor = (mColor & 0xffffff00) | value;
            viewer.setBackgroundColor(mColor);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            int value = seekBar.getProgress();
            textB.setText(String.format("%s(%02X)", bString, value));
            mColor = (mColor & 0xffffff00) | value;
            viewer.setBackgroundColor(mColor);
        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            int value = seekBar.getProgress();
            textB.setText(String.format("%s(%02X)", bString, value));
            mColor = (mColor & 0xffffff00) | value;
            viewer.setBackgroundColor(mColor);
        }
    });
    final AlertDialog.Builder alert = new AlertDialog.Builder(this);  
    alert.setView(dialogView);     
    alert.setPositiveButton("OK", new DialogInterface.OnClickListener(){  
        @Override 
        public void onClick(DialogInterface dialog, int idx) {
            switch(where) {
            case CHANGE_TEXT:
                mTextColor = mColor;
                final TextView textView0 = (TextView)findViewById(R.id.sampleTextView1);
                textView0.setTextColor(mTextColor);
                break;
            case CHANGE_BACKGROUND:
                mBackgroundColor = mColor;
                final TextView textView1 = (TextView)findViewById(R.id.sampleTextView1);
                textView1.setBackgroundColor(mBackgroundColor);
                break;
            }
        }
    });  
    alert.show();
}

@Override
protected Dialog onCreateDialog(int id) {
    if(id == 0) {
        final String rString = getResources().getString(R.string.color_picker_red);
        final String gString = getResources().getString(R.string.color_picker_green);
        final String bString = getResources().getString(R.string.color_picker_blue);

        LayoutInflater inflater1 = LayoutInflater.from(this);  
        final View dialogView1 = inflater1.inflate(R.layout.dialog_selecter, null);
        
        final GridView gridView = (GridView)dialogView1.findViewById(R.id.colorSelectGridView);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,   android.R.layout.simple_list_item_1) {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View view = super.getView(position, convertView, parent);
                view.setBackgroundColor(COLOR_TABLE[position]);
                return view;
            }
       };
       for(int i = 0; i<COLOR_TABLE.length; i++) {
           adapter.add("");
       }
       gridView.setAdapter(adapter);
       gridView.setOnItemClickListener(new OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
               mColor = COLOR_TABLE[arg2];
               final TextView textR = (TextView)dialogView.findViewById(R.id.colorPickerTextR);
               textR.setText(String.format("%s(%02X)", rString, (mColor & 0x00ff0000) >> 16));
               final TextView textG = (TextView)dialogView.findViewById(R.id.colorPickerTextG);
               textG.setText(String.format("%s(%02X)", gString, (mColor & 0x0000ff00) >> 8));
               final TextView textB = (TextView)dialogView.findViewById(R.id.colorPickerTextB);
               textB.setText(String.format("%s(%02X)", bString, (mColor & 0x000000ff)));
               final TextView viewer = (TextView)dialogView.findViewById(R.id.colorPickerViewer);
               viewer.setBackgroundColor(mColor);
               final SeekBar seekBarR = (SeekBar)dialogView.findViewById(R.id.colorPickerSeekBarR);
               seekBarR.setProgress((mColor & 0x00ff0000) >>16);
               final SeekBar seekBarG = (SeekBar)dialogView.findViewById(R.id.colorPickerSeekBarG);
               seekBarG.setProgress((mColor & 0x0000ff00) >> 8);
               final SeekBar seekBarB = (SeekBar)dialogView.findViewById(R.id.colorPickerSeekBarB);
               seekBarB.setProgress((mColor & 0x000000ff));
               dismissDialog(0);
           }
       });

       return new AlertDialog.Builder(this)
            .setView(dialogView1)
            .setNegativeButton("Cancel", null)
            .create();
       }
       return super.onCreateDialog(id);
    }
}

2011年6月9日木曜日

通話履歴 3D(Call History 3D) Ver.1.1.5 ~ 1.1.6

version 1.1.5
日付の年表示に対応

version 1.1.6
日付を年表示できるようにしてしまったんで 1行で表示しきれなくなってしまっていたので、文字の横幅を変更できるようにしました。

通話履歴 S(Call History Simple) ver.1.0.3 ~ 1.0.4

version 1.0.3
年表示に対応した際に、フォーマットをちょこっと修正したもんで、そのフォーマットを選択していたら、そのフォーマットを確認できなくて強制終了してしまうという、お粗末なアップデートだったので、確認できない場合は初期値に戻すようにしました。

version 1.0.4
通話時間を日時の横に(000:00)で表示できるようにしました。設定で通話時間表示にチェックで表示されます。
999分を越える場合 (999:99)と表示されます。
あと、よくわからないんですが データベースに-1秒となってるときがあったんでとりあえず(***:**)と表示するようにしておきました。

2011年6月7日火曜日

デジクロッくん ver 1.1.1

今回 バージョンが一気に上がってますが、Demo版と合わせただけです。

とりあえず、フォント関係のバグを出来る限り取り除いてみました。

あと、使いづらかった文字サイズ画面のシークバーをボタンで隠してみました。これで イライラは減ると思います。

通話履歴 S(Call History Simple) ver.1.0.2

日付フォーマットに年表示を追加しました。(通話履歴 3Dにも 追加予定)
広告表示がバージョンアップしたので最新版を使用してみました。(無駄な通信を防げるそうです)

次のアップデートで 通話時間(000:00)の表示ON/OFF機能を追加します。
ただ、今『デジクロッくん』のアップデートをコーディング中なんで少し時間かかります。

2011年6月6日月曜日

『デジクロッくん』 次回アップデート予定

SDにフォントを入れて表示フォントに設定したまま、SD内のフォントを消去すると強制終了で、設定データ等を消去しないと設定画面すら立ち上がってくれないバグがあったので修正します。
USB接続でマウントした場合も、マウント中にSDからフォントを読み込めないので、強制終了していたのも修正。

ファイルが読み込めなかったら、標準フォントで描画し次回描画時(分が変わったとき)に読み込める状態であれば表示しなおします。

サイズ設定のところのシークバーが誤操作しやすいので、ボタンをおしたらシークバーが表示されるように変更します。

デモ版も、製品版と同じように修正します。

今週中には 両方アップできるように頑張ります。

2011年6月1日水曜日

デジクロッくん ver 1.0.2

あんまり売れてないせいか、エラーがまったく報告されておりませんでしたが、ゲームを使用中に強制終了したとのご連絡がありました。
エラーの内容的には、
1.メモリーを食うアプリができたので androidのOSがデジクロッくんを終了させる
2.アプリが終了してしまうので、データが破棄される。
3.OSがサービスを再起動させるか、alarmManagerがサービスを再起動させる
4.設定データの読み込みをしないまま、描画処理を行う。
5.もちろん、Nullポイント エラーが発生して 強制終了となる。

対策
1.サービス内のonCreateで、データの読み込み

サービスのonCreateは、サービス作成時に一回しか読み込まないはずなのでこれでいけるかな・・・

同じ状況にできないので、Task kill系のアプリを使って デバッグしてみたところ うまくいってるみたいだったので、マーケットにアップしました。

この変更で他のエラー出ませんように(ドキドキです・・・