Myu
2018年7月14日土曜日
Android Studioを使ってみた
以前に比べ、Androidアプリの開発もだいぶやりやすくなっている。Android StudioというIDEが使いやすい。SDKのバージョンに配慮が必要なようだが、けっこう簡単にスマホにインストールできるようだ。
英文、和訳、英語音声を同時に表示、再生していくアプリを作ってみた。
MainActivity.java
package com.example.hgoto.myapplication; import android.media.AudioManager; import android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.content.res.AssetFileDescriptor; import android.widget.Toast; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Formatter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import android.widget.EditText; import java.util.Timer; import java.util.TimerTask; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.view.Menu; import android.widget.TextView; import android.os.Process; public class MainActivity extends AppCompatActivity { private Timer mainTimer; //タイマー用 private MainTimerTask mainTimerTask; //タイマタスククラス private TextView countText; //テキストビュー private Handler mHandler = new Handler(); //UI Threadへのpost用ハンドラ private MediaPlayer mediaPlayer; ArrayList
EList = new ArrayList<>(); ArrayList
JList = new ArrayList<>(); String num = "001"; boolean rflag=false; EditText editText4; public class MainTimerTask extends TimerTask { @Override public void run() { //ここに定周期で実行したい処理を記述します mHandler.post( new Runnable() { public void run() { if (mediaPlayer == null){ //num=editText4.getText().toString(); editText4.setText(num); audioPlay(); if(rflag){ }else{ if(num.equals("560")){ num="001"; }else{ num=String.format("%03d",Integer.parseInt(num)+1); } } } } }); } } @Override protected void onCreate(Bundle savedInstanceState) { // Read { try { FileInputStream fileInputStream; fileInputStream = openFileInput("myfile.txt"); byte[] readBytes = new byte[fileInputStream.available()]; fileInputStream.read(readBytes); num = new String(readBytes); } catch (FileNotFoundException e) { } catch (IOException e) { } } //タイマーインスタンス生成 this.mainTimer = new Timer(); //タスククラスインスタンス生成 this.mainTimerTask = new MainTimerTask(); //タイマースケジュール設定&開始 this.mainTimer.schedule(mainTimerTask, 1000,1000); InputStream is = null; BufferedReader br = null; int ci = 0; try { try { // assetsフォルダ内の sample.txt をオープンする is = this.getAssets().open("sample.txt"); br = new BufferedReader(new InputStreamReader(is)); // 1行ずつ読み込み、改行を付加する String str; while ((str = br.readLine()) != null) { ci++; if (ci % 2 != 0) { EList.add(str); } else { JList.add(str); } } } finally { if (is != null) is.close(); if (br != null) br.close(); } } catch (Exception e) { // エラー発生時の処理 } super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 音楽開始ボタン Button buttonStart = findViewById(R.id.start); editText4 = (EditText) findViewById(R.id.editText4); editText4.setText(num); // リスナーをボタンに登録 buttonStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Write { try { FileOutputStream fileOutputStream = openFileOutput("myfile.txt", MODE_PRIVATE); String writeString = num; fileOutputStream.write(writeString.getBytes()); } catch (FileNotFoundException e) { } catch (IOException e) { } } // 音楽再生 // num=editText4.getText().toString(); // audioPlay(); // if(Integer.parseInt(num)-1>0){ // editText4.setText(String.format("%03d",Integer.parseInt(num)-1)); // } finish(); Process.killProcess(Process.myPid()); } }); // 音楽停止ボタン Button buttonStop = findViewById(R.id.stop); // リスナーをボタンに登録 buttonStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mediaPlayer != null) { // 音楽停止 // audioStop(); } if(rflag){ rflag=false; }else{ rflag=true; if(num.equals("001")){ num="560"; }else{ num=String.format("%03d",Integer.parseInt(num)-1); } } } }); Button buttonP = findViewById(R.id.button); // リスナーをボタンに登録 buttonP.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(num.equals("560")){ num="001"; }else{ num=String.format("%03d",Integer.parseInt(num)+1); } editText4.setText(num); } }); Button buttonM = findViewById(R.id.button2); // リスナーをボタンに登録 buttonM.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(num.equals("001")){ num="560"; }else{ num=String.format("%03d",Integer.parseInt(num)-1); } editText4.setText(num); } }); } private boolean audioSetup() { boolean fileCheck = false; // rawにファイルがある場合 //mediaPlayer = MediaPlayer.create(this, R.raw.a001); mediaPlayer = MediaPlayer.create(this, getResources().getIdentifier("a" + num, "raw", getPackageName())); // 音量調整を端末のボタンに任せる setVolumeControlStream(AudioManager.STREAM_MUSIC); fileCheck = true; return fileCheck; } private void audioPlay() { if (mediaPlayer == null) { // audio ファイルを読出し if (audioSetup()) { // Toast.makeText(getApplication(), "Rread audio file", Toast.LENGTH_SHORT).show(); EditText editText = (EditText) findViewById(R.id.editText2); editText.setText(EList.get(Integer.parseInt(num) - 1) + '\n' + JList.get(Integer.parseInt(num) - 1)); } else { Toast.makeText(getApplication(), "Error: read audio file", Toast.LENGTH_SHORT).show(); return; } } else { // 繰り返し再生する場合 mediaPlayer.stop(); mediaPlayer.reset(); // リソースの解放 mediaPlayer.release(); } // 再生するan mediaPlayer.start(); // 終了を検知するリスナー mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { Log.d("debug", "end of audio"); audioStop(); } }); } private void audioStop() { // 再生終了 mediaPlayer.stop(); // リセット mediaPlayer.reset(); // リソースの解放 mediaPlayer.release(); mediaPlayer = null; } }
activity_main.xml
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿