Kotlin (Android) のスニペット集
このページは、Kotlin (Android) のスニペットをまとめる予定のページです。
目次
注意
- コードのライセンスは CC0 (クレジット表示不要、改変可、商用可) です。
- Kotlin 1.3.72, Android API レベル 29 時点のコードです。将来のバージョンでは動作しない可能性があります。
スニペット
日付のフォーマット
val formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
val dateTime = LocalDateTime.now()
val dateTimeString = dateTime.format(formatter)
部品の背景のセット
//val root = inflater.inflate(R.layout.fragment_home, container, false)
val buttonExample = root.findViewById(R.id.button_example)
buttonExample.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_button_example)
部品の有効・無効切り替え
buttonExample.isEnabled = true
buttonExample.isEnabled = false
権限の確認 (ランタイム)
/** 権限コード */
private val PERMISSION_GRANTED = 1;
/** 確認したい権限 (例) */
private val PERMISSIONS = arrayOf(
Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_EXTERNAL_STORAGE
)
/**
* ユーザーが権限許可・拒否を選択した時
*/
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
when (requestCode) {
PERMISSION_GRANTED -> {
if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
// 許可 (あらためて権限が必要なメソッドなどを実行)
// execute()
} else {
// 拒否
}
return
}
else -> {
// 不明なコード
}
}
}
/**
* 必要な権限があるか確認します。
*/
fun hasPermissions(context: Context, vararg permissions: String): Boolean = permissions.all {
ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED
}
/**
* 権限が必要な処理の例です。(権限の確認のテスト)
*/
fun execute() {
// 権限がない場合はリクエスト
if (!hasPermissions(requireContext(), *PERMISSIONS)) {
requestPermissions(PERMISSIONS, PERMISSIONS_GRANTED)
return
}
// 権限許可後の処理...
}
- アプリの権限をリクエストする | Android デベロッパー | Android Developers
- java - Android 6.0 multiple permissions - Stack Overflow
ViewModel の使用
class ExampleViewModel : ViewModel() {
private val _text = MutableLiveData<String>()
val text: MutableLiveData<String> = _text
}
// ViewModel の生成
exampleViewModel = ViewModelProvider(this).get(ExampleViewModel::class.java)
// 反映先 UI
val textView: TextView = root.findViewById(R.id.text_view_1)
// 反映後の処理
exampleViewModel.text.observe(viewLifecycleOwner, Observer {
textView.text = it
})
// 値のセット
exampleViewModel.text.value = "test"
- 補足
ViewModelProviders.of(this).get(ExampleViewModel::class.java)
は deprecated です。
- 参考
AsyncTask の使用
class ExampleAsyncTask : AsyncTask<Void, Void, Void>() {
/**
* 前処理
*/
override fun onPreExecute() {
}
/**
* 実行処理
*/
override fun doInBackground(vararg param: Void?): Void? {
return null
}
/**
* 進捗処理
*/
override fun onProgressUpdate(vararg values: Void?) {
}
/**
* 後処理
*/
override fun onPostExecute(result: Void?) {
}
}
ExampleAsyncTask().execute()
- 補足
- 型パラメータ
<○, ○, ○>
の型は下記を表します。- 1つ目:
execute()
で与えるパラメータの型 (doInBackground()
で受け取る) - 2つ目:
publishProgress()
で与える値の型 (onProgressUpdate()
で受け取る) - 3つ目:
doInBackground()
の戻り値の型 (onPostExecute()
で受け取る)
- 1つ目:
- 型パラメータ
- 参考
録音
MediaRecorder
val soundFilePath = "録音先のパス"
// val soundFilePath = context?.getExternalFilesDir(null).toString() + "/test.wav"
try {
mediaRecorder = MediaRecorder()
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC)
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT)
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT)
mediaRecorder.setOutputFile(soundFilePath)
mediaRecorder.prepare()
mediaRecorder.start()
} catch (e: Exception) {
e.printStackTrace()
}
try {
mediaRecorder?.stop()
mediaRecorder?.reset()
} catch (e: Exception) {
e.printStackTrace()
}
<uses-permission android:name="android.permission.RECORD_AUDIO" />
音声ファイルの再生
val soundFilePath = "録音先のパス"
try {
val player = MediaPlayer()
player.setDataSource(soundFilePath)
player.prepare()
player.start()
} catch (e: Exception) {
e.printStackTrace()
}