楽天アフィリエイト

2022年3月15日火曜日

Android でログのファイル出力(Timber+Log4J)

Androidアプリのログをファイル出力したい
Timber+Log4Jを使ったのでメモ

Kotlinで作成
Log4Jは脆弱性の対象となる前の(1.2.17)を使用
対応した現状の最新版(2.17.1)を使用したかったが,
まだ対応されていない?のかできなかった。

1.buile.gradleに追加
// Log
implementation 'com.jakewharton.timber:timber:4.7.1'
implementation 'de.mindpipe.android:android-logging-log4j:1.0.3'
implementation 'log4j:log4j:1.2.17'
2.application.ktの作成
var sLog : Logger? = null
override fun onCreate() {
super.onCreate()

initLog4J() // log4jの初期設定
initTimber() // Timberの初期設定

}
private fun initLog4J() {
val f = getFileStreamPath("${getString(R.string.app_name)}.log")
val logConfigurator = LogConfigurator()
logConfigurator.
fileName = f.path //ファイル名
logConfigurator.rootLevel = Level.ALL
logConfigurator.setLevel("org.apache", Level.ALL)
logConfigurator.
filePattern = "%d %-5p %m%n"         //メッセージ内容
logConfigurator.maxFileSize = (512 * 1024).toLong() //ファイルサイズ
logConfigurator.isImmediateFlush = true
logConfigurator.isUseLogCatAppender = false
logConfigurator.maxBackupSize = 1 //ファイル数
logConfigurator.configure()
sLog = Logger.getLogger(Application::class.java)
}
private fun initTimber() {
Timber.plant(Log4JTree())
}
private class Log4JTree : Timber.Tree() {
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
// Error,Warning,Infoのみ出力する
when (priority) {
Log.INFO -> {
sLog?.info(message)
}
Log.WARN-> {
sLog?.warn(message)
}
Log.ERROR -> {
sLog?.error(message)
}
}
}
}

3.使用方法
Timber.d("debug")   // ←これは出力されない
Timber.i("info")
Timber.w("warning")
Timber.e("error")






2022年3月2日水曜日

Bluetooth Adapterの取得

 Bluetooth使用時にAdapterを取得しているが

いろいろなサイトで下記の取得方法となっています。

val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter()

google developer(https://developer.android.com/guide/topics/connectivity/bluetooth?hl=ja)でも現状変更されていない。


しかしAPI31で非推奨となり下記の警告が表示されます。

「'getDefaultAdapter(): BluetoothAdapter!' is deprecated. Deprecated in Java」


下記のように変更すれば,OKです。

val bluetoothManager = context?.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
val bluetoothAdapter: BluetoothAdapter = bluetoothManager.adapter



参考:https://stackoverflow.com/questions/69122978/what-do-i-use-now-that-bluetoothadapter-getdefaultadapter-is-deprecated