『ほむほむ語変換』の評価数がいつの間にか100件を超えていた

2013/2/22にリリースした、『ほむほむ語変換』

cb577d32eb-w192

https://play.google.com/store/apps/details?id=com.gucci1208.homuhomu_translator

 

先日、おかげさまで評価数が100件に達していました。

非常にありがたいことです。

 

そして、平均評価も、4.53とかなり高いポイントを維持しております。

1

 

総ダウンロード数も、ゆっくりとですが着実に増え8000を超えました。

2

 

こんな一発ネタというか、ノリで作ったアプリがいまだに何千人もの方に使っていただけていると思うと、感謝しかありません。

 

最近は忙しくてアップデートできていないですが、やってみたいアイデアはたくさんあるんです! ホントです!

気長に待っていただけると幸いですm(__)m

 

最後にもう一度、ダウンロードしていただいた全ての皆さんに感謝を。

ありがとうございます!

EditTextで、inputTypeでnumberを指定するとtextPasswordが無効になる件

パスワードを入力させるEditTextで、「入力した文字を隠す」ためには、inputTypeでこう指定します。

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword" />

入力する文字を「数字のみ」にしたい場合はこう指定します。

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="number" />

では、「数字のみ入力、かつ文字を隠す」という風にさせたい場合にこうします。

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword|number" />

すると、なぜか文字が隠れません。無効になってしまいます。

原因はわかりませんが、対処法としてはこう指定してください。

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:password="true"
    android:inputType="number" />

ちゃんと「数字のみ、かつ文字を隠す」EditTextになりました!!

ブログネタのためにノリでLINEオーディションに応募してみたら、主催のソニーミュージックに全くやる気がないのが伝わってきた

15日からこんな企画が開催され話題になってます。

LINEオーディション始動 今すぐ応募できてグランプリには賞金100万円

オーディション優勝者は賞金100万円とデビューのチャンスが与えられるとのこと。

「へー、面白そう! ブログの良いネタになるな!」

と、思い完全にノリで応募してみました!

Screenshot_2014-07-16-09-17-33

Screenshot_2014-07-16-09-17-42

どうやら、応募するには公式アカウントから、「LINE オーディション」というアカウントと友だちにならなくてはいけないみたい。

Screenshot_2014-07-16-09-18-03

Screenshot_2014-07-16-09-18-12

Screenshot_2014-07-16-09-18-18

Screenshot_2014-07-16-09-18-25

自動メッセージ送信で、ズラズラと説明が送られてきました。

最後に、応募用として、ソニーミュージックのアカウントが表示されます。

ん? なに、このアカウントから応募できないの?

なんでアカウントを経由すんだよ、面倒だなー。

そう思いつつも仕方なくメッセージをタッチすると、自動でソニーミュージックのアカウントへ飛びます。

Screenshot_2014-07-16-09-18-31

こいつと友だちになります。

Screenshot_2014-07-16-09-18-44

で、やっぱり自動送信メッセージでこんな文章が送られてきます。

よく解らないけど、数字の「1」を入力すればいいのか……?

Screenshot_2014-07-16-09-19-08

おお、ちゃんと認識してくれた!

宅配便の再配達の受付みたい。

同じ要領で質問に答えていきます。

Screenshot_2014-07-16-09-19-12

Screenshot_2014-07-16-09-19-29

Screenshot_2014-07-18-19-23-50

Screenshot_2014-07-18-19-23-59

こんな感じで色々聞いてきます。簡単でスムーズです。

(一部の画像で時間帯が異なるのは、後からスクリーンショットしなおしたからです。特に意図はありません。)

さて、最後の質問になりました。

Screenshot_2014-07-18-19-24-35

これは……ファイル送信をしろってことなのかな?

Screenshot_2014-07-18-19-31-34

よく解らないのでオウム返ししてみた。

Q&A的なヘルプを回答してくれるかと期待したけど、さすがにそこまでではないみたい。

とりあえず、バンド関連で撮影した動画を選択して送信しようとしてみる。

Screenshot_2014-07-16-11-40-21

あれ?

送信しようとしたファイルは約1分30秒のmp4形式の14MBの動画

14MBで制限超えちゃうって、さすがに厳しくない?

サイズを落として5MBのものを送ろうとしてみる。

Screenshot_2014-07-16-11-40-21

!?

じゃあもっと落として、3MBの動画を……

Screenshot_2014-07-16-11-40-21

!?

じゃあ、1MBの動画を……

Screenshot_2014-07-16-11-40-21

送れない。

送れない。

1MBですら受け付けてくれない。

じゃあ、と思ってmp3か何かを送ろうとした。

Screenshot_2014-07-18-19-39-47

mp3送れない。

選択できない。

今回私が使った端末はAndroidで、OSのバージョンは4.0.3である。

送ろうとした動画の拡張子mp4は、デフォルトのカメラ機能で採用されている。

1MBのmp4が送れないのは、これは実質、画像しか受け付けていないのではないか。

それか、ソニーミュージックにやる気がないかのどちらかだ。

一応メールで問い合わせてみた。

1

うーん……

動画の時間は1分30秒だし、200MB以内だし、mp4だし、WiFiなんだけどなあ……。

とりあえず、もうやる気なくしたので応募もここまでにします。

WebViewで端末のバックキーの挙動を変える 改

WebViewで端末のバックキーの挙動を変えるという記事を書きました。

が、一部の端末でちょっと変な動作が発生していたようです。

EditTextの中で文章を書いている最中に、文章を間違ったとします。

01

BackSpaceキーを押して文章を消そうとすると……

02

Activityが閉じてしまうのです。

端末の種類によっては上記のようなことは起こらず、普通に動作するのでこの不具合に気付くのが遅れました。

これを修正するには、WebViewのソース内にこんな記述が必要です。

// 端末の戻るボタンを押した時に前のページに戻す
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
	// ページを進んでいたら
	if (event.getAction() == KeyEvent.ACTION_DOWN
			&& keyCode == KeyEvent.KEYCODE_BACK
			&& webView.canGoBack() == true) {
		System.out.println("event.getAction():" + event.getAction());
		System.out.println("keyCode:" + keyCode);
		ReturnPage();
		return true;
	}
	//BackSpaceを押したとき
	else if (event.getAction() == KeyEvent.ACTION_DOWN
			&& keyCode == KeyEvent.KEYCODE_DEL) {
		System.out.println("event.getAction():" + event.getAction());
		System.out.println("keyCode:" + keyCode);
		return true;
	}
	// トップページならActivity終了
	else {
		Finish();
		return true;
	}
}

端末によっては、EditTextで文章を書いているときにBackSpaceを押すとkeyCodeがKeyEvent.KEYCODE_DELでイベントが発生します。

ちゃんとif文の条件で受け取って何も処理しないようにしないとだめです。

03

こうすると、ちゃんと……

04

文章を消すことができます!

MediaPlayerで再生したファイルをintentで遷移させた先でstopさせる その2

前回の記事で、異なるActivity間で共通のMediaPlayerインスタンスを使い、別の画面で再生開始した音声を、また別の画面で停止するという方法を書きました。

今回の記事はさらに発展させて、BroadcastReceiverで再生させたMediaPlayerを、遷移した先のActivityで停止させるというものです。
前回はActivityどうしだったので、同じ型を継承することができました。しかし今回はBroadcastReceiverとActivityを継承しなくてはいけません。複数の異なる型を継承することも可能ですが、非常にややこしいので、今回は別のやり方で。
(普通にBroadcastReceiverで再生するだけなら、こちらの記事をご参照ください)

[AlarmReceiver]

public class AlarmReceiver extends BroadcastReceiver {
    // notifications
    @Override
    public void onReceive(Context context, Intent data) {
        Resources res = context.getResources();
 
        Notification n = new Notification();
        //アイコンの設定
        n.icon = R.drawable.ic_launcher;
        //メッセージの設定
        n.tickerText = "メッセージ1";
        //通知を選択した時に自動的に通知が消えるための設定
        n.flags = Notification.FLAG_AUTO_CANCEL;
 
        // 通知をタッチしたときに起動するActivity
        Intent i = new Intent(context, StopActivity.class);
 
        PendingIntent pi = PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
        // 上から通知バーを下してきたときに表示される文章をセット
        n.setLatestEventInfo(context, res.getString(R.string.app_name), "メッセージ2", pi);
 
        //デフォルトLED点滅パターンを設定
        n.defaults |= Notification.DEFAULT_LIGHTS;
 
        // 設定したNotificationを通知する
        NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        nm.notify(1, n);
 
        //MediaPlayerを動作させるためにサービスを起動する
        Intent serviceIntent = new Intent(context, MyService.class);
        context.startService(serviceIntent);
    }
}

BroadcastReceiver内では再生しません。
↓の記述で、サービスを生成します。
サービスは、バックグラウンドで動作するので、ライフサイクルがあります。そのあたりは他の記事で詳しく調べてみてください

//MediaPlayerを動作させるためにサービスを起動する
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);

[MyService]の中身。
自動で60秒ループ再生したら停止するようにしています。
また、サービスが破棄されたときにもちゃんと停止するように、onDestroy()の中にもstopメソッドを書いておきます。

public class MyService extends Service {

	final static String TAG = "MyService";
	MediaPlayer mp;

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	@Override
	public void onCreate() {
		super.onCreate();
		Log.d(TAG, "onCreate");
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.d(TAG, "onStartCommand");

		// アラームを再生
		Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.alarm);

		mp = MediaPlayer.create(this, uri);
		mp.setLooping(true);
		mp.start();

		int timeout = 60 * 1000;
		Handler handler = new Handler();
		handler.postDelayed(new Runnable() {
			@Override
			public void run() {
				if (mp.isPlaying()) {
					mp.stop();
				}
			}
		}, timeout);

		return START_STICKY;
	}

	@Override
	public void onDestroy() {
		super.onDestroy();

		if (mp.isPlaying()) {
			mp.stop();
		}

		Log.d(TAG, "onDestroy");
	}
}

あとは、遷移した先のActivityで、↓の記述を書けいてください。
サービスが破棄されるので、アラームは停止します。

[StopActivity]

// MediaPlayerを停止させる
stopService(new Intent(getApplicationContext(), MyService.class));

忘れないように、マニフェストファイルにサービスを追加しておきましょう。

[AndroidManifest.xml]

<service android:name="○○○(プロジェクト名).MyService"/>
Top