2026年3月9日月曜日

Wifiの設定

Ubuntu 24.04.4 LTS (GNU/Linux 6.17.0-14-generic x86_64)

Wifiの設定 

設定ファイの変更 

>  sudo nano /etc/netplan/50-cloud-init.yaml

設定内容の反映 

>  sudo netplan try

2026年2月25日水曜日

個人用設定 > 背景 壁紙の履歴の削除

設定から個人用設定>背景で画像を選択した場合に表示される履歴の削除

説明で書くとなんか良く分からんので、

これです(笑)

現状ではレジストリから削除するしか無さげです。Windows powershellで実行するには次の通り。

Remove-ItemProperty -Path Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Wallpapers\ -Name BackgroundHistoryPath[0-4]

短く書くこうとすれば、もう少し短くなる要素はありますが、基本的な書き方だとこうなるかと。

注意点として、設定画面の上記の設定を出したままで削除するとなんか設定画面が反応しなくなります。設定画面など、不要なwindowは閉じた状態で実行した方が良いでしょう。なお、レジストリを削除してもこの画面を開くとBackgroundHistoryPath0~4デフォルト値が追加されます。 

それと、BackedUpWallpaperPathに設定されている画像のパスとファイル名が保存されています。

背景のカスタマイズには画像以外にも設定できるのですが、変更する時に作成されるのかと思っていましたが、確認したところ作成されなかったので、アップデートや新規インストールの時にMicrosoftからの広告が出るときにでも設定されているのかもしれません。  

2026年1月4日日曜日

絶対パスの取得

DIR=$(cd $(dirname $0); pwd)

DIR=$(realpath $(dirname $0))

pwdを使用する場合は、実在しているディレクトリのみ。

realpathはオプション指定で実在している必要はない。

 

絶対パスの取得には realpath を使おう 

2025年6月4日水曜日

Google検索のAI表示を消したい

現時点(2025/06)では設定ではできなくなくなってしまった。

検索したあとに表示されるurlに「&udm=14」を追加するとAI表示はなくなる。

検索したときに表示されるタブが「すべて」になっているとAI表示も行われてしまうため、これを「ウェッブ」とすることで表示がされなくなる。

アドオンも「&udm=14」で検索すると色々出てくるが、このぐらいならアドオンによるリスクを負わなくてもいいような気もする。

 https://atmarkit.itmedia.co.jp/ait/articles/2411/15/news036.html

スクリプトのテキストファイル形式

ANSIかUTF-8(BOM付き)のどちらか。

Unix系のではテキストファイルはUTF-8(BOM付き)は正しく処理されない。

Visual Studio CodeではテキストファイルはUTF8NoBOMで保存される。Ascii文字以外の文字が含まれると文字がPowerShellは正しく処理されない。

結論として、 

PowerShellスクリプトでAscii文字以外を使用するには、UTF-8(BOM付き)にする必要がある。PowerShellスクリプトファイルはBOMがないファイルはANSIとして処理される。

 

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_character_encoding?view=powershell-7.5

画面出力

Write-Host 非推奨

Write-Verbose ユーザー側でVerbose パラメーターで出力を指定できる。

Write-Output 出力される。 

https://learn.microsoft.com/ja-jp/powershell/utility-modules/psscriptanalyzer/rules/avoidusingwritehost?view=ps-modules

文字列の分割

構文

-split <String>
-split (<String[]>)
<String> -split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -split {<ScriptBlock>} [,<Max-substrings>]
Max-substrings

PowerShell 7以降:マイナス指定で末尾から数えて処理される。

 

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_split?view=powershell-7.5

2022年10月30日日曜日

スコープ

 

関数呼び出し元の参照
(thisは省略可能)
戻り値用途
applythis呼び出し元のインスタンスプロパティ設定
alsoit呼び出し元のインスタンスプロパティ設定
letitラムダの結果メソッドの実行 nullチェック
runthisラムダの結果メソッドの実行
withthisラムダの結果メソッドの実行

[Kotlin]スコープ関数 apply,also,let,run,withの使い分け https://pouhon.net/kotlin-sfunction/1392/

2022年10月3日月曜日

プロパティーの初期化

初期化タイミングを変数を初めて使用する時に初期化する

lateinit、by lazy

プリミティブ型には使用できない。

varで宣言する必要がある。

必ずnon-nullとなる。

class MainActivity : AppCompatActivity() {

private lateinit var textView: TextView

override fun onCreate(saveInstanceState: Bundle?) {

super.onCreate(saveInstanceState)

textView = findViewById(R.id.text_view) // ここで初めて初期化される

}

// …

}

varで宣言するので、再代入には注意すること。

by lazy

型の制限はない。

valで宣言する必要がある。

nullable / nun-nullどちらでも可能

対象のプロパティが初めて呼び出されたときに初期化される。

初期化されたら必ず同じ値を返す。

class MainActivity : AppCompatActivity() {

private val userData: User? by lazy { fetchUserData() }

override fun onCreate(saveInstanceState: Bundle?) {

super.onCreate(saveInstanceState)

userData?.let { showUserData(it) } // ここで初めて初期化される

}

// …

}

ビューをlazyで初期化した場合、変更を加えても反映されない。

プロパティーにnullが入る可能性がある場合はlazyを使う必要がある。

by lazyは初期化処理を記述する必要があるので、記述上各メソッドの処理はスッキリさせることができる。


Qiita 【Android】lateinitとby lazyの使い分け【Kotlin】 https://qiita.com/u-dai/items/a31c5c2a7d5c7ed2cc47

2022年4月2日土曜日

motion いつの間にか落ちてる ffmpeg_put_frame: Error while writing video frame / event_ffmpeg_put: Error encoding image

トリガー条件不明。

motionはカメラから画像が指定したFPS以下の場合、不足したフレームを複製させてパディングするようなパラメータがあるが、実際のところ不足しているフレームは単純に抜け落ちるだけで保管もされない。

そのために落ちているのかもしれないが、よくわからない。

が、実際にこのエラーが表示されている状態でもファイル出力がされていたので、無視していいのかもしれない。

なお、部屋を暗くしたらこれが発生して落ちていた。

状況としては動作検知後、録画し始めて19時17分22秒あと、1分程度経ってからエラーが出始め、落ちていた。 

[1:ml1:F] [NTC] [EVT] [Apr 02 19:17:22] event_newfile: File of type 8 saved to: /tmp/motion/C270_2/20220402191722F-10.mp4
[1:ml1:F] [NTC] [ALL] [Apr 02 19:17:22] create_path: creating directory /tmp/motion/C270_2
[1:ml1:F] [NTC] [EVT] [Apr 02 19:17:22] event_create_extpipe: pipe: ffmpeg
[1:ml1:F] [NTC] [EVT] [Apr 02 19:17:22] event_create_extpipe: cnt->moviefps: 10
[1:ml1:F] [NTC] [EVT] [Apr 02 19:17:22] event_newfile: File of type 8 saved to: /tmp/motion/C270_2/20220402191722F-10
[1:ml1:F] [NTC] [ALL] [Apr 02 19:17:22] motion_detected: Motion detected - starting event 10
[1:ml1:F] [ERR] [ENC] [Apr 02 19:18:52] ffmpeg_put_frame: Error while writing video frame
[1:ml1:F] [ERR] [EVT] [Apr 02 19:18:52] event_ffmpeg_put: Error encoding image
[1:ml1:F] [ERR] [ENC] [Apr 02 19:18:52] ffmpeg_put_frame: Error while writing video frame
[1:ml1:F] [ERR] [EVT] [Apr 02 19:18:52] event_ffmpeg_put: Error encoding image
[1:ml1:F] [ERR] [ENC] [Apr 02 19:18:52] ffmpeg_put_frame: Error while writing video frame

[1:ml1:F] [ERR] [ENC] [Apr 02 19:20:02] ffmpeg_put_frame: Error while writing video frame
[1:ml1:F] [ERR] [EVT] [Apr 02 19:20:02] event_ffmpeg_put: Error encoding image
[1:ml1:F] [NTC] [ALL] [Apr 02 19:20:22] preview_save: different filename or picture only!

ログの抜粋はこんな感じ

作られたファイルとログは矛盾点はなかった。

もしかすると、pipeで渡しているフォーマットがまずいのかもしれないが、出力され始めるタイミングがずれているのと、フレームレートは10FPSと低めにしているのでそれなりなはずなのだが…

motion ファイル名の拡張子

use_extpipe on

でpipeで外部エンコーダを利用するとon_movie_endイベントでファイル名をパラメータとして渡したときに、拡張子がついていたりついてなかったりする。

トリガー条件が不明。

ログ(/var/log/motion/motion.log)を見てみると event_newfile: でファイル名が出力されているので見てみると、extpipeを使い始めたタイミングで2回ファイル名が出力されているように見える。extpipeがonでも拡張子があったりなかったりする。

問題がなさそうな時

[1:ml1:F] [NTC] [EVT] [Apr 01 19:58:26] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401195826F-01.mp4
[1:ml1:F] [NTC] [EVT] [Apr 01 19:59:08] event_newfile: File of type 1 saved to: /tmp/motion/C270/20220401195829F-01-05.jpg
[1:ml1:F] [NTC] [EVT] [Apr 01 20:02:28] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401200228F-02.mp4
[1:ml1:F] [NTC] [EVT] [Apr 01 20:02:58] event_newfile: File of type 1 saved to: /tmp/motion/C270/20220401200228F-02-04.jpg
[1:ml1:F] [NTC] [EVT] [Apr 01 20:11:02] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401201102F-03.mp4
[1:ml1:F] [NTC] [EVT] [Apr 01 20:14:02] event_newfile: File of type 1 saved to: /tmp/motion/C270/20220401201112F-03-02.jpg
[1:ml1:F] [NTC] [EVT] [Apr 01 20:14:26] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401201425F-04.mp4
[1:ml1:F] [NTC] [EVT] [Apr 01 20:15:06] event_newfile: File of type 1 saved to: /tmp/motion/C270/20220401201426F-04-02.jpg
[1:ml1:F] [NTC] [EVT] [Apr 01 20:15:28] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401201528F-05.mp4
[1:ml1:F] [NTC] [EVT] [Apr 01 20:16:54] event_newfile: File of type 1 saved to: /tmp/motion/C270/20220401201531F-05-01.jpg
[1:ml1:F] [NTC] [EVT] [Apr 01 20:16:56] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401201656F-06.mp4
[1:ml1:F] [NTC] [EVT] [Apr 01 20:17:57] event_newfile: File of type 1 saved to: /tmp/motion/C270/20220401201712F-06-07.jpg
[1:ml1:F] [NTC] [EVT] [Apr 01 20:21:46] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401202145F-07.mp4

問題が発生している前後では拡張子がないファイルが作成されている感じになっている。

[1:ml1:F] [NTC] [EVT] [Apr 01 22:26:47] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401222647F-02
[1:ml1:F] [NTC] [EVT] [Apr 01 22:27:31] event_newfile: File of type 1 saved to: /tmp/motion/C270/20220401222649F-02-05.jpg
[1:ml1:F] [NTC] [EVT] [Apr 01 22:38:21] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401223821F-01.mp4
[1:ml1:F] [NTC] [EVT] [Apr 01 22:38:21] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401223821F-01
[1:ml1:F] [NTC] [EVT] [Apr 01 22:38:58] event_newfile: File of type 1 saved to: /tmp/motion/C270/20220401223822F-01-07.jpg
[1:ml1:F] [NTC] [EVT] [Apr 01 22:42:45] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401224245F-02.mp4
[1:ml1:F] [NTC] [EVT] [Apr 01 22:42:45] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401224245F-02
[1:ml1:F] [NTC] [EVT] [Apr 01 22:45:45] event_newfile: File of type 1 saved to: /tmp/motion/C270/20220401224251F-02-05.jpg
[1:ml1:F] [NTC] [EVT] [Apr 01 22:45:45] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401224545F-03.mp4
[1:ml1:F] [NTC] [EVT] [Apr 01 22:45:45] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401224545F-03
[1:ml1:F] [NTC] [EVT] [Apr 01 22:47:29] event_newfile: File of type 1 saved to: /tmp/motion/C270/20220401224646F-03-02.jpg
[1:ml1:F] [NTC] [EVT] [Apr 01 22:47:30] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401224730F-04.mp4
[1:ml1:F] [NTC] [EVT] [Apr 01 22:47:30] event_newfile: File of type 8 saved to: /tmp/motion/C270/20220401224730F-04
 

動作させてるバージョン。

pi@rasp3b:~ $ motion -help
motion Version 4.1.1, Copyright 2000-2017 Jeroen Vreeken/Folkert van Heusden/Kenneth Lavrsen/Motion-Project maintainers
 

解決策としてはイベント中の処理スクリプトで拡張子を付加して対応したが、少々気持ち悪い動作というか多分バグ。仕様としては拡張パイプを使用した場合の拡張子がついてしまっているのがおかしいかな。

bash 文字列 ファイルの拡張子の扱い

pi@rasp3b:~ $ FILENAME=ABCDEF.GHI
pi@rasp3b:~ $ echo ${FILENAME##*.}
GHI
pi@rasp3b:~ $ FILENAME=ABCDEF.
pi@rasp3b:~ $ echo ${FILENAME##*.}

ファイル名に拡張子がない場合は同じ文字列になる。

pi@rasp3b:~ $ FILENAME=ABCDEF
pi@rasp3b:~ $ echo ${FILENAME##*.}
ABCDEF

拡張子しかない場合も同じものとなる。

pi@rasp3b:~ $ FILENAME=.XYZ
pi@rasp3b:~ $ echo ${FILENAME##*.}
XYZ
 

 

2020年7月1日水曜日

cannot VACUUM from within a transaction

センサーログのスクリプトを10分単位で動かしていましたが、試しに1分単位に動かしてみたところ、意外なところで想定外になってしまったようでグラフの表示やら、日時でテンポラリからストレージに移動しているスクリプトが動いてなかったり。
単純にデータ量が1日当たり144件から10倍の1440件になるので、どこかでおかしくなるかとは思っていましたが、それでも想定外でした。

Jul  1 02:03:01 rasp4b4g CRON[9173]: (root) CMD (/usr/local/sbin/savetosd.py)
Jul  1 02:03:01 rasp4b4g CRON[9164]: (CRON) info (No MTA installed, discarding output)

cronのログはsyslogにキックしたログはありましたが、エラーの出力は無い様なので、実際に動かしてみました。(メール設定をしていればエラーがメールで飛んでいく設定を作れるから設定しておいた方が良いかも…)

pi@rasp4b4g:~ $ sudo python3 /usr/local/sbin/savetosd.py
cannot VACUUM from within a transaction

VACUUMでエラーが出ているようです。
ググってみると、トランザクション中にVACUUMを行うとエラーが発生することがあるらしいのでスクリプトを確認してみると…
  1. テーブル間のデータコピー
  2. テンポラリテーブルのデータ削除
  3. VACUUM
  4. commit()
なんで、commitする前にVACUUMさせていたのかは謎ですが、今までVACUUMはトランザクションに影響しないというより、暗礁のcommitが行われてしまうものだとばかり思っていましたが、そうではなくトランザクションとして処理していてバッファが足りなくなったらしっかりエラーを吐き出すようですね。
  1. テーブル間のデータコピー
  2. テンポラリテーブルのデータ削除
  3. commit()
  4. VACUUM
という順序に入れ替えて実行してみると処理が通るようになりました。
グラフの表示が崩れていたのも、正常に戻ったので、グラフ表示させているスクリプトでテンポラリ内のデータが1日以上になってしまうと都合が悪い作りになってるようですね…





関係がありそうなインストール済みのパッケージ
libsqlite3-0:armhf                    3.27.2-3                               armhf        SQLite 3 shared library
php-sqlite3 2:7.3+69 all SQLite3 module for PHP [default]
php7.3-sqlite3 7.3.14-1~deb10u1 armhf SQLite3 module for PHP
libaprutil1-dbd-sqlite3:armhf 1.6.1-4 armhf Apache Portable Runtime Utility Library - SQLite3 Driver
libqt5sql5-sqlite:armhf 5.11.3+dfsg1-1+rpi1+deb10u3 armhf Qt 5 SQLite 3 database driver
スクリプトのpython3上でバージョンの確認
pi@rasp4b4g:~ $ python3
Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.27.2'
>>> exit()

2020年6月24日水曜日

passwd

理想はすべてのアカウントパスワードはある程度の強固なもので、それぞれ違うものをきちんと設定すべきです。

が、

一つ二つならまだしも、手持ちのデバイスが増えるにつれ、正直管理なんてできません。
実際は、使用用途によっていくつか決まったパスワードを使いまわすことが多いいわけですが、Raspberry piにターミナルでログインするたびに、パスワードを設定しろとしつこく表示されるのでパスワードの設定をしようとしてみると、

Bad: new password is too simple

と表示され、変更できず。複雑なパスワードにするべきなのはわかってはいるんですけどね。

何とかしたいので、管理者権限で

$ sudo passwd pi

とすれば、確認のパスワードも必要なく、パスワードチェックもされません。

忘れそうなのでメモメモw

2020年4月26日日曜日

セルの書式:億万の単位表示

日本人だと4桁区切りにすると読みやすいですが、カンマは3桁区切りが一般的。
不用意に4桁区切りにするよりは、どうせならとうまい表示方法はないかと調べてみると、書式設定に「####億####万####」と設定すれば良さそうですが、万単位の時に不要な「億」が表示されてしまうので条件を付けくわえて

[>100000000]####億####万####;[>10000]####万####;####

とすることでそれなりに。

これでも不要そうなゼロが消えないので、そこまでやらせようとすると表示用の別のセルにマクロや数式に頼ることになるかと。

コロナ騒ぎで計算するときに人口ベースの比率を計算するときに、桁が良く分からなくなので表計算上で数字を置いておくのに便利です。

2018年10月9日火曜日

i2cデバイスのアドレス確認

必要なパッケージ
i2c-tools
なければsudo apt-get install i2c-toolsでインストール

コマンド
i2cdetect -y 1

pi@rasp3b:~ $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3f
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 77

i2cに接続されているアドレスが表示されるので、接続前と後で見比べればどのアドレスに接続されたかわかる。

参考というか元ネタ
http://robocad.blog.jp/archives/729192.html

2018年9月23日日曜日

Failed to resolve: com.google.firebase:firebase-ads:16.0.3

結果から言えば firebase-ads: 16.0.3はStable channelではリリースされていない。
公式のドキュメント(https://firebase.google.com/docs/android/setup)を見たところ
com.google.firebase:firebase-ads:15.0.1 AdMob
となっていた。なのでおそらく
implementation 'com.google.firebase:firebase-ads:15.0.1'
と書き換えるだけでよかったのだと思う。

スタックオーバーフローでは
'com.google.firebase:firebase-core:16.0.3' (16.0.1だったかも)
をfirebase-adsの前に追加して
プロジェクトの build.gradleの
classpath 'com.android.tools.build:gradle:3.1.4'
classpath 'com.google.gms:google-services:4.0.2'
の記述があることを確認すれば解決するとかそんな感じだった。
(この話は公式ドキュメントのfirebaseを実装する手順の話になる)

正直色々と試行錯誤して半日以上費やしたが、結果からすればエラーメッセージの通り単純にfirebase-ads: 16.0.3の解決が失敗した。というのはあれなのだが、もうちょっとなんとかしてほしいものだ(笑)
例えば version 16.0.3が見つからない。存在するバージョンは15.0.1 とか表示すればアプローチがガラッと変わるのだが…

implementation 'com.android.support:appcompat-v7:26.1.0'

dependencies節のcompile(非推奨)からimplementationへの置き換え作業にて。

エラー表示がされたまま解除できなかったので試行錯誤の結果
testImplementation 'junit:junit:4.12'
をコメントアウトすることでエラー表示が無くなった。理由は不明
念のためほぼ使用していないtest関連もコメントアウト状態にした。

この時の環境
Android Studio 3.1.4
gradle 4.4
classpath 'com.android.tools.build:gradle:3.1.4'
classpath 'com.google.gms:google-services:4.0.2'

2018年8月11日土曜日

:app:lintVitalRelease FAILED

API Level 28がリリースされ、PlayStore上でAPI制限が上げられてきたのでAPIレベルを変えてリコンパイルする作業でエラーが出てきました。

この手のエラーはデバッグ用のビルドではエラーが出ず、リリース用のビルドでエラーが発生しますね…今回もリリースビルドでエラーが出てしまい、クリーンしたり、toolVersionを最新のものにしたり色々してみましたが変化しませんでした。

:app:lintVitalRelease FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:lintVitalRelease'.
> Could not resolve all files for configuration ':app:lintClassPath'.
   > Could not find com.android.tools.lint:lint-gradle:26.1.4.
     Searched in the following locations:
         file:/C:/Android/SDK/extras/m2repository/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.pom
         file:/C:/Android/SDK/extras/m2repository/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.jar
         file:/C:/Android/SDK/extras/google/m2repository/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.pom
         file:/C:/Android/SDK/extras/google/m2repository/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.jar
         file:/C:/Android/SDK/extras/android/m2repository/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.pom
         file:/C:/Android/SDK/extras/android/m2repository/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.jar
         https://jcenter.bintray.com/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.pom
         https://jcenter.bintray.com/com/android/tools/lint/lint-gradle/26.1.4/lint-gradle-26.1.4.jar
     Required by:
         project :app

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 14s
17 actionable tasks: 1 executed, 16 up-to-date

メッセージ中の「lint-gradle:26.1.4」という部分がtoolVersionを変更しても変化しないというのが気になったのですが、正直八方塞がりになってしましました。

こんな時に一番役立つのはやはりAPI Levelを設定したうえで新規プロジェクトを作成して比較するということ。バグではない限り大概これで足りない記述や変更された記述を転記してやれば正常にコンパイルできるようになります。

確認したところ、プロジェクトレベルのbuild.gradle内に
allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
赤い文字の部分が追加されていました。
今までエラーが出ていたプロジェクトに追記したところエラーが出なくなりました。

直接のビルドエラーの原因はgradleのバージョンアップでリポジトリを強制追加しない感じになったのでしょうかね。

2018年2月7日水曜日

OCN電話プレフィックス

Zenfone 2 Laserでうまく動いていない感じだったので調べてみました。

現象としてはNEW_OUTGOING_CALL自体全く動いていないといった感じで、呼び出し画面は実際にダイアルした番号が表示されるだけとなっていました。

インテントフィルターをさらに増やし、レシーバーの受け口をさらに広げる必要があるのかログで怪しそうなキーワードからソースを検索して追加してみても変化はなかった。

機能しているかどうか明らかにするために処理を少し変更して以下のことを試してみた。
・setResult(null)を行うようにした。→発信時の呼び出し画面が表示された後、すぐに消え、呼び出しが行われなくなった。
・setResultで固定で全く異なる番号をセットした。→呼び出し画面の番号は入力したり、指定したアドレスの電話番号だが、実際にはセットした別の番号に発信していた。

このことから呼び出しは正しく行われ、番号の変更は正しく行われているが、呼び出し画面や発信履歴では変更される前の番号が表示され記録されている。
CallLog.Calls.getLastOutgoingCallを使用しても変更前の番号が取得された。

Android Version 6.0