スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

iOSでボタンの同時押しを禁止する方法

iOSのアプリを開発しているときにハマったので、書いておく。

iOSってデフォルトでボタンの同時押しが可能なのね。知らなかったのでハマったよ…。いろいろボタンを同時押しして、テストしてみたら、おかしな動きをしてしまう箇所が結構あったよ。とほほ…

で、要はボタン(View)のタップなどのイベントを同時に発生させたくないわけだ。

ボタンの単純なシングルタップイベントの場合

タップイベントに対する同時発生を抑制するのは簡単だ。以下のように、ボタンに対して、UIViewのexclusiveTouchプロパティに「YES」を設定するばいい。

button.exclusiveTouch = YES;

このようにすれば、他のボタンを押している間、このボタンは反応しなくなる。
FC2 Management

Eclipse上で、AndroidのJUnitテスト

今更ながら、EclipseでAndroidのプログラムをユニットテストする方法。

テストターゲットのAndroidプロジェクトを作成

まず、いつもどおり、Androidのプロジェクトを作成する。本記事では、

プロジェクト名:AndroidUnitTestTarget
パッケージ名:com.hoge.target

とした。そして以下のように、「MainActivity」というエントリーのアクティビティを作成する。

MainActivity.java

package com.hoge.target;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TextView result = (TextView) findViewById(R.id.resultText);

result.setText("result:" + plus(1, 2));
}


public int plus(int a, int b){
return a + b;
}

}

activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
android:id="@+id/resultText"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</RelativeLayout>

テストのAndroidプロジェクトを作成

次に、テスト実行用のプロジェクトを作成する。

新規>その他>Android>Androidテスト・プロジェクトを選択
android_unit_test00.png
次へをクリック
プロジェクト名をAndroidUnitTestTargetTestとする
android_unit_test01.png

「Select Test Target」のダイアログで、テスト対象のプロジェクトとして先ほど作成した「AndroidUnitTestTarget」を選択。

作成されたプロジェクトのsrcフォルダ内に

com.hoge.target.test

というパッケージが追加されているので、その中に以下のテストケースのクラスを追加する。

TestMain.java

package com.hoge.target.test;

import android.test.ActivityInstrumentationTestCase2;
import android.widget.TextView;

import com.hoge.target.MainActivity;
import com.hoge.target.R;


public class TestMain extends ActivityInstrumentationTestCase2<MainActivity> {

private MainActivity mActivity;
private TextView mResutTextView;

public TestMain() {
super(MainActivity.class);
}

@Override
protected void setUp() throws Exception {
super.setUp();

// アクティビティを取得
mActivity = getActivity();
mResutTextView = (TextView) mActivity.findViewById(R.id.resultText);
}

public void testResut() {
assertEquals(5, mActivity.plus(2, 3));
}

public void testResutText(){
assertEquals(mResutTextView.getText(), "result:3");
}

}

あとは、プロジェクトを右クリック>実行>Android JUnit Test

で、実行。

Eclipse上の「JUnit」のタブに、実行結果が出る。

実行:2/2 エラー:0 失敗:0

全テストを通過すると、緑色のバーが表示される。

android_unit_test02.png


エラーやテストに失敗した場合は、バーが赤色になる。

テーマ : android
ジャンル : コンピュータ

JCIFSを使ってWindows共有フォルダをandroidから参照する

案件で、Windowsの共有ファイルをAndroidから読み書きする必要が出てきたので、実現方法を調べてみた。

どうやら、JCIFSというライブラリを使えば簡単にWindowsの共有ファイルにアクセスできることがわかった。

CIFSとは

そもそもJCIFSの「CIFS(Common Internet File System)」ってのは、もともとWindowsのファイル共有サービスで利用されているプロトコル「SMB」を拡張して、Windows以外のOSやアプリケーションソフトでも利用できるようにものだそうだ。知らんかったわ…、勉強になりやす。


JCIFSを使ってみる

JCIFSのライブラリはhttp://jcifs.samba.org/からダウンロードできる。
jcifs00.png

今回は、上記サイトからjcifs-1.3.17.zipをダウンロードした。ダウンロードしたZipファイルを解凍した中にある「jcifs-1.3.17.jar」をEclipseのAndroidプロジェクトのlibフォルダにをコピー。

とりあえず、今回は、Windowsの共有ファイルを読むところまでを書いてみた。
public void loadShareFile() {

SmbFile dir;
String host = "host name";
String user = "user name";
String password = "pass";

try {
//最後にバックスラッシュが必要
String path = "smb://" + user + ":" + password + "@" + host + "/test/";
dir = new SmbFile(path);

//ファイル一覧セット
SmbFile[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {

//ファイルパスを取得
String filePath = files[i].getPath();
Log.i(TAG, "File name: " + filePath);

//ファイル取得
SmbFileInputStream sfis = new SmbFileInputStream(filePath);
BufferedReader br = new BufferedReader(new InputStreamReader(sfis, "sjis"));

String str;
while ((str = br.readLine()) != null) {
Log.i(TAG, "data: " + str);
}

br.close();
sfis.close();
}

} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, e.toString());
}
}

必要なパーミッションは
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.ADD_SYSTEM_SERVICE

クローズや例外処理の部分が適当なのは勘弁してね。上の例では、「test」という共有フォルダ内のテキストファイルの内容をすべて表示している。指定するパスの最後にバックスラッシュが必要なところに気をつけたい。

配列に決まった範囲の値を重複なしでランダムにきっちり配置する方法[Java]

icon240.png

僕は、ナンバーズ アタック!っていう、脳トレ系パズルアプリをAndroidアプリとして公開してるんだけど(詳細はこっち)、要は、NxNの格子状のパネルにランダムに数字が表示されて、それを1から順番にタップして、すべてタップするまでの時間を競うっていう、よくあるやつ(僕のアプリの場合はオプションが豊富)。

numbers_attack_help00.png

でそれほど難しい話ではないけど、ある人に、グリッドに番号をランダムに配置するアルゴリズムがわかんないから、教えてほしいって言われたのね。

これって、つまりは配列(リスト)に決まった範囲の値をその値の個数分、重複なしできっちり配置するアルゴリズムってことになる。このアルゴリズムにおいてのポイントは

・重複してはいけない
・決まった範囲の値をすべて使わなければならない


一見難しそうに感じるかもしれないが、この2つのポイントを満たさなければならないアルゴリズムは言い換えれば、たとえば1から25(5x5)までの値の範囲であれば、1から25までの値を順番に並べ、その並びをばらばら(ランダム)にするということだ。なので、とりあえず1から25までの値を順番に並べてみる。
List<Integer> numberList = new ArrayList<Integer>();

for(int i = 0 ; i < 5 * 5 ; i++){
numberList.add(i + 1);
}

あとは、その並びをランダムな並びにしてしまえばいい。Javaの場合、Collections.shuffle()を使えば簡単にやってくれる。
Collections.shuffle(numberList, new Random());

for (Integer integer : numberList) {
System.out.print(integer + ", ");
}

これで終わり。あとはリストの頭から順番に値を取り出し、パネルに設定していけばいいだけ。

iPhoneでHOMEを整理する場合はiTunesを使うべし

僕もiPhone持ってるけど、アプリは2ページに収まるくらいしか入っていない(もちろんフォルダわけしてあるのもあるが)から、あんまりHOMEやアプリの整理を一生懸命したことがないんで、ぜんぜん知らんかったけど、PCでiTunesを使えば、HOMEの整理が簡単にできるみたい。

詳しくは↓
http://www.iphone-girl.jp/2014/04/349533/

アプリ1個1個だけでなく、ページの入れ替えや挿入が簡単にできるようだ。僕ももしHOMEのページが増えて、iPhone上での整理が大変になったら、iTunesを試してみようと思う。
プロフィール

basarafire

Author:basarafire
IT関連会社で情報処理の基礎やプログラミング(主にC・Java)を教えています。最近はAndroidの教育や開発なども行ったりしています。

basarafireの開発したアプリに関する内容はこちらから
http://basarafire.jugem.jp/

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
お気に入り
[プレスブログ]価値あるブログに換金可能なポイントを差し上げます。 アクセストレードレビュー
提携
ゲーム
QRコード
QR
リンク
RSSリンクの表示
お気に入り商品
カウンター
おすすめAndroid書籍
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。