|ハイブリッドOS|File System|ARM|Android|Java|制御システム|オープンシステム

 

Android

 
フォーム
 
キーパッドを常に表示する。
2013-12-06
キーパッドを常に表示したいEditTextに対し、フォーカスが変更されたときに呼び出されるonFocusChange()で
EditText#getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
を設定します。
 
■サンプルソース
import android.view.View.OnFocusChangeListener;
import android.widget.EditText;
public class MainActivity implements OnFocusChangeListener {
    private EditText mEditText = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        ~中略~
        mEditText = (EditText)findViewById(R.id.edit);
        mEditText.setOnFocusChangeListener(this);
        ~中略~
    }
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        mEditText.getWindow().setSoftInputMode
            (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }
}
 
EditTextでフォーカスされているかチェックする。
2013-11-21
EditTextでフォースされているかどうチェックするには以下のメソッドを実行します。
 
boolean EditText#isFocused()
 
戻り値がtrueの場合はフォーカスされている、falseの場合はフォーカスされていないとなります。
 
EditTextでキーパッドを表示しない。
2013-11-12
EditTextを選択したときにキーパッドを表示しない場合、EditText#setType(0)を実行します。
 
■サンプルコード
EditText mInput;
mInput.setType(0);
 
AlarmManagerを使用する。
2013-09-12
TimePickerDialogで設定した時刻に、自分(MainActivity)を起動するようにAlarmManagerに登録します。

■サンプルソース
○src/jp.co.newral.sample.alarmmanager/MainActivity.java

package jp.co.newral.sample.alarmmanager;

import java.util.Calendar;
import java.util.TimeZone;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Intent;
import android.widget.TimePicker;

public class MainActivity extends Activity implements OnTimeSetListener {

private AlarmManager mAlarmManager;
private Calendar mCalendar;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// AlarmManager取得
mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

mCalendar = Calendar.getInstance(TimeZone.getTimeZone("Asia/Tokyo"));

// TimerPickerDialogを表示
// 第1引数:Applicationのcontext
// 第2引数:OnTimeSetListener
// 第5引数:24時間表記かどうか
TimePickerDialog timePickerDialog = new TimePickerDialog(this, this,
mCalendar.get(Calendar.HOUR_OF_DAY), mCalendar.get(Calendar.MINUTE), true);

timePickerDialog.show();
}

@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

mCalendar.setTimeInMillis(System.currentTimeMillis());
mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay); // 時間設定
mCalendar.set(Calendar.MINUTE, minute); // 分設定
mCalendar.set(Calendar.SECOND, 0); // 秒設定 (今回は0固定)

// 自Activityを呼び出すインテント
Intent intent = new Intent(getApplicationContext(), MainActivity.class);

// システムに保存され時間差で呼び出される、ペンディングインデント。
// 第2引数:未使用。(APIマニュアルより、"currently not used")
// 第4引数:FLAG_ONE_SHOT(一度きり)
// 他にFLAG_CANCEL_CURRENT(現在設定をキャンセルして上書き)など
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),
0, intent, PendingIntent.FLAG_ONE_SHOT);

// AlarmManagerに登録。
// 第2引数:RTC(システム時刻)
// 他にRTC_WAKEUP(スリープしてたら起こす)、ELAPSED_REALTIME(起動後時間)など
mAlarmManager.set(AlarmManager.RTC, mCalendar.getTimeInMillis(), pendingIntent);
}
}
 
サービスを使用する 2
2013-09-09
bindService()/unbindService()でサービスを使用します。

■サンプルソース
○src/jp.co.newral.sample.service2/ISampleService.aidl
サービスで提供するメソッドをAIDLファイルに定義します。
AIDLファイルはパッケージに合わせたディレクトリに配置します。

package jp.co.newral.sample.service2;

/**
* サービスのメソッドを定義する。
*/
interface ISampleService {

/**
* メッセージをログ出力する。
*
* @param message メッセージ
*/
void showMessage(in String message);
}

○src/jp.co.newral.sample.service2/SampleService.java
AIDLファイルで定義したメソッドを実装します。

package jp.co.newral.sample.service2;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;

/**
* サービス
* @version 1.0 新規作成
*
*/
public class SampleService extends Service {

/** ログ用タグ */
private static final String TAG = "SampleService";

private static final ISampleService.Stub mBinder = new ISampleService.Stub() {

/**
* AIDLファイルで定義されたメソッド
* メッセージをログ出力する。
*
* @param message メッセージ
* @throws RemoteException リモート例外
*/
@Override
public void showMessage(String message) throws RemoteException {
Log.d(TAG, "message=[" + message + "]");
}
};

/**
* バインドした時に呼び出される。
*/
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}

○res/layout/activity_main.xml
サービスのメソッドを実行するButton(@+id/button1)を配置します。

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" >

 
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/label"
android:layout_below="@+id/label"
android:text="Button" />
 
○src/jp.co.newral.sample.service2/MainActivity.java
サービスを接続/切断した時に呼び出される、ServiceConnectionのonServiceConnected()/onServiceDisconnected()を実装します。
onCreate()/onDestroy()でbindService()/unbindService()を呼び出し、サービスのバインド/アンバインドを行います。
ボタンがクリックされた時にサービスのメソッドを実行するリスナーを実装します。

package jp.co.newral.sample.service2;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
* サービスを使用するサンプル
*
* @version 1.0 新規作成
*
*/
public class MainActivity extends Activity implements OnClickListener {

/** ログ用タグ */
private static final String TAG = "MainActivity";

/** サービス */
private ISampleService mService;

/** サービスコネクション */
private ServiceConnection mServiceConnection = new ServiceConnection() {

/**
* 接続された時に呼び出される。
*
* @pparam name コンポーネント名
* @param service サービス
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = ISampleService.Stub.asInterface(service);
}

/**
* 切断された時に呼び出される。
*
* @param name コンポーネント名
*/
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
}
};

/**