2021-11-30

Google Drive API:Requested entity was not found のエラーが出た時に考えること

 Androidアプリの開発で、ある特定のGoogleドライブ内のファイルを操作する(読み書きする)プログラムを実行すると、表題のように

  • Requested entity was not found
というエラーが出ることがあります。IDは間違っていません。これが意味することは何でしょうか?

認証スコープの設定を確認
Androidアプリ側から(今回の場合は、Flutter)SpreadSheetやDriveのファイルを操作するには認証とスコープの設定が必要になりますが、問題はこのスコープです。

[スコープ:https://www.googleapis.com/auth/drive.file]の意味
これは、このアプリで開いた、または作成したGoogleドライブのファイルとフォルダを表示および管理できます。言い換えると、Google Drive内にある既存のファイルを操作することはできません。表題のようなエラーは、このスコープの制限にひっかかった時に出てきますのでわかりにくいです。

フルアクセス[ https://www.googleapis.com/auth/drive]の意味
フルアクセスにすれば、上記のエラーはでませんが、Googleの認証を受けていない状態であれは、Warningメッセージがクライアントに出ることになります。



2021-11-22

はじめてのPySimpleGUIコード

とりあえずテンプレ的なサンプルコードをアップします。ポイントは以下の通り。

1.GUIウィジェットを先に宣言しとく。宣言しなくてもレイアウトに直接ぶっ込むこともできますが、それはちょっとスマートではないので。。。(個人的見解)

2.ウィジェットのレイアウトはリストで並べる(ここがPySimpleGUIのキモとも言える)。サンプルのように書くことで、並ばせかたを行列のイメージで配置できる。もちろん、frameやcolなどのオブジェクトを利用することでもう少し凝ったこともできるが、この記事では範囲外とする。

3.ウィンドウ表示ループは関数化しておく。下記のshow_window関数がそれに該当する。ここでメインウィンドウを生成して、無限ループでイベントを待つ(read関数)。

4.イベントの種類や、それに付随する情報がread関数の引数で送られてくる。ここで、ウィンドを閉じた時はイベントを抜けて終了するように書いておかないと、後でいろいろ厄介。この記述は必須のテンプレと思われる。

5.本サンプルは、ボタンクリックイベントに対応した記述をしているが、ボタンクリックイベントの識別は、ボタンのラベル名が対応しているらしい。これが嫌な場合は、key属性を使うとよい感じ。



PySimpleGUIはじめました

今年から、ゼミでもPySimpleGUIを使うことにしたのでその第1報。

PySimpleGUIとは

PythonでデスクトップGUIアプリを作成するのはどうすればいいか?というのはいろいろ議論があるようですが、ここ最近は、PySimpleGUIでよくね?という風潮になっているようです。PySimpleGUIは2018年に出てきた新参のライブラリです。

TkinterかPySimpleGUIか?

Python標準のGUIライブラリとしては、Tkinterがあります。Tkinterについては

  • インストール不要
  • Tkという古くからあるGUIライブラリを利用。
  • 書き方が若干、昔風

という特徴があります。最後の書き方が昔風というのは、私のような老人には意外とすんなり理解できるところでもあります。が、PySimpleGUIは今風ですね。意外と日本国内でもブログ記事が多くなってきたので、ここは思い切ってPySimpleGUIをゼミの標準ライブラリとしてみました。

ライブラリのインストール方法

下記の通りpipでインストールできます。

pip install pysimplegui

以後、PySimpleGUIのネタをちょくちょく書くことになるかもしれません。

関連リンク




2021-11-20

PlatformException(network_error, com.google.android.gms.common.api.ApiException: 7: , null, null)

 表題のようなエラーが出た場合は、ネットワークにうまく接続できてないというのが原因です。解決策としては

  • 端末(またはエミュレーター)がネットワーク接続できているか確認する。
  • Proxy設定を確認する(エミュレーター、Android Studio本体)
で試行錯誤するしかないでしょう。おちラボでも時々このエラーに遭遇することがあり、悩めるところであります。



2021-11-15

Windows環境でのマイク音がおかしい時の試したいこと

 先日、PCを買い替え、Windows11にしたところ、マイクの音がやけにおかしいという状況になりました。具体的には

  • エコーして聞こえる
  • ノイズキャンセリングされている?
  • 音が遅延する
という感じで、特に特別なソフトを介してもおらずどうなっているのか。。。。と試行錯誤。これじゃあZoomとか、オンライン動画の作成に支障がでるな、、と困惑しておりました。

原因と対策
原因として考えられるのは、OSのカーネルミキサーというやつが悪さをしている可能性があり。。解決策として、
【コントロールパネル】→【ハードウェアとサウンド】→【オーディオデバイスの管理】
で設定を次のように変更する。
  • 【録音】より該当のマイクを選択→プロパティで詳細の「排他モード」と「オーディオ機能拡張を有効にする」のチェックを外す
  • 【再生】より該当のスピーカーを選択→プロパティで詳細の「排他モード」と「オーディオ機能拡張を有効にする」のチェックを外す
注意点は後者の設定かな。。おそらく、前者のマイクの設定だけで解決しているのだろうけど、後者が悪さをして治ってないように見える、、、このトラップにハマって無駄な時間を消費しました。

補足
すべてのWindows PCでこのような現象になっているわけではないというのが、これまた問題。ノートPCでは問題ないし、自宅のデスクトップでも問題なし(いずれもWindiows11)。環境依存ということでしょうか。。


2021-11-07

com.google.android.gms.common.api.ApiException: 12500: のエラーに対する対応

FlutterでFirebase使ったGoogle認証をする際に、よくこのエラーに遭遇するのでメモ書き。詳細は、参考サイトを参照のこと。

このエラーに対する解決策は主に以下の方法

  1. Firebaseプロジェクトの認証でGoogle認証を有効にする
  2. Firebaseプロジェクトにメールアドレスを登録する
  3. google-service.jsonファイルをダウンロードしなおす
  4. build.gradleの設定を確認する(プロジェクトレベルとアプリレベルの2つのファイルの設定が必要)
  5. FirebaseにSHA1、SHA256キーを登録する(SHA1だけでも良い?)
  6. エミュレーターをGoogle Play Storeに対応しているものに変更する

参考サイト