2013年12月12日

support.v4とは

support.v4

下位APIでもFragment等を使用可能にするサポートです。

Actionbarなどを使う際には必須となるでしょう。

色んな端末、さまざまなバージョンが存在するandroidではこういったライブラリの利用は、必須かと思います。

サポートライブラリを設定するのは簡単です。

  1. Android SDK Maneger起動
  2. Extras/Android Support Libraryを最新アップデートします。
  3. <sdk>/extras/android/support/のフォルダ内にあるandroid-support-v4.jarをコピー
  4. プロジェクト直下にlibsフォルダを作成する。(元々あればこの項目はスルーして下さい。)
  5. 作成したlibsフォルダに3.でコピーしたjarファイルを貼り付ける。
  6. ビルドパスを通す
以上です。
1.Android SDK Maneger起動
2.Extras/Android Support Libraryを最新アップデートします。
    3.<sdk>/extras/android/support/のフォルダ内にあるandroid-support-v4.jarをコピー
    4,プロジェクト直下にlibsフォルダを作成する。(元々あればこの項目はスルーして下さい。)
    5.作成したlibsフォルダに3.でコピーしたjarファイルを貼り付ける。

    6.ビルドパスを通す

    以上です。

    2013年12月10日

    Vibratorとは

    Vibrator

    端末のバイブレーション機能を利用するときに使用します。

    使用するにはAndroidManifest.xmlにパーミッションを追加する必要があります。

    <uses-permission android:name="android.permission.VIBRATE"/>

    Vibrator
    MainActivity.java
    public class MainActivity extends Activity implements OnClickListener{
    
    private Vibrator vibrator;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);  
    
    Button button1 = (Button)findViewById(R.id.button1);//バイブ単発
    button1.setOnClickListener(this);
    
    Button button2 = (Button)findViewById(R.id.button2);//バイブ連続
    button2.setOnClickListener(this);
    
    Button button3 = (Button)findViewById(R.id.button3);//止める
    button3.setOnClickListener(this);
    
    //Vibratorインスタンス取得
    vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE);
    
    }
    
    
    @Override
    public void onClick(View arg0) {
    // TODO 自動生成されたメソッド・スタブ
    
    switch (arg0.getId()){
    case R.id.button1:
    //バイブ単発
    vibrator.vibrate(300);//300ミリ秒の振動 
    break;
    
    case R.id.button2:
    //バイブ連続
    long[] pattern = {100, 500, 300, 1000, 300, 1500};//{開始,振動,休止,振動,休止,振動}
    vibrator.vibrate(pattern, 0);//第2引数,0は繰り返し,-1は単発
    break;
    
    case R.id.button3://止める
    vibrator.cancel();
    break;
    }
    }
    }

    res/layout/activity_main.xml
    <LinearLayout 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:orientation="vertical"
        android:gravity="center" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="バイブレーション"
            />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="バイブ単発" />
       
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="バイブ連続" />
      
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="止める" />
       
    
    </LinearLayout>


    res/AndroidManifest.xml
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="sample.helloworld"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
    
        <uses-permission android:name="android.permission.VIBRATE"/>//これを追加
       
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="sample.helloworld.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
         
        </application>
    
    </manifest>

    2013年12月9日

    Bundleとは

    Bundle

    画面の回転や他アプリが前面起動した際に変数が初期化されてしまう為、

    事前に値を保存、それを取り出すときに使用します。

    しかし筆者は上記保存機能は使用していません。

    あたかも初期設定かのように決まり文句でついてきます。

    public class MainActivity extends Activity{
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {//ここです。
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    }

    通常何も設定しない場合savedInstanceStateにはnullが返ってくるようです。

    でも、画面回転等で回避したい場合が出てきます。

    では実際にBundleを使って保存、取り出しをしてみます。


    • void onSaveInstanceState(Bundle outState) //保存する
    • void onRestoreInstanceState(Bundle savedInstanceState) //復帰する


    下記ソースでは"Hello World!"を"こんにちわ世界!"に切り替えてます。

    図1 縦:初期画面
    図2 縦:ボタンクリック後
    さてここまでは普通です。

    この画面(図2)を回転させます。エミュレータではCTRL+F11で画面回転します。

    図3 画面回転後
    と、通常ならば、せっかく日本語をセットした変数が初期化され"Hell World!"に戻ります。

    これを回避するソースは以下。

    図4 実行結果
    MainAcitivity.java
    public class MainActivity extends Activity implements OnClickListener{
    
    private TextView textview1;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);  
    
    textview1 = (TextView)findViewById(R.id.textView1);
    
    Button button1 = (Button)findViewById(R.id.button1);
    button1.setOnClickListener(this);
    
    }
    
    @Override
    protected void onSaveInstanceState(Bundle outState) {//Bundleに保存する
    super.onSaveInstanceState(outState);
    
    outState.putString("key", textview1.getText().toString() );//値を保存
    
    }
    
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) { //Bundleより復帰する
    super.onRestoreInstanceState(savedInstanceState);
    
    String _text = savedInstanceState.getString("key");//値を取り出す
    
    textview1.setText("Bundle保存値:" + _text);//分かりやすいように保存値と追記します
    
    }
    
    @Override
    public void onClick(View arg0) {
    // TODO 自動生成されたメソッド・スタブ
    
    textview1.setText("こんにちわ世界!");
       }
    }
    

    res/layout/activity_main.xml
    <LinearLayout 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:orientation="vertical"
        android:gravity="center" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="@string/hello_world"
            />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="日本語化" />
    
    
    </LinearLayout>

    2013年12月8日

    ToneGeneratorとは

    ToneGenerator

    いろんな種類のトーン音を鳴らします。

    種類が多いので詳細はAndroid Developersを参照して下さい。

    AudioManagerで音量調整もできます。

    以下ソースではToneGenerator.TONE_PROP_BEEPというトーン音が出て

    音量調整ができます。



    MainActivity.java
    public class MainActivity extends Activity implements OnClickListener{
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);  
    
    Button button1 = (Button)findViewById(R.id.button1);
    button1.setOnClickListener(this);
    
    }
    
    @Override
    public void onClick(View arg0) {
    // TODO 自動生成されたメソッド・スタブ
    SeekBar seekbar = (SeekBar)findViewById(R.id.seekBar1);
    int _volume = seekbar.getProgress();//音量 初期設定はactivity_main.xmlで80%に設定してます。
    ToneGenerator toneGenerator = new ToneGenerator(AudioManager.STREAM_ALARM,_volume);
    toneGenerator.startTone(ToneGenerator.TONE_PROP_BEEP);//トーンの種類をして開始
    }
    }

    res/layout/activity_main.xml
    <LinearLayout 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:orientation="vertical"
        android:gravity="center" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="音が出ます"
            />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="トーン音" />
    
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text=""/>
       
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="音量調整"/>
       
        <SeekBar
            android:id="@+id/seekBar1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:progress="80"
            android:max="100"/>
    
    </LinearLayout>