カテゴリーアーカイブ OS

asaba 著者:asaba

【android】機内モードを使って消失した現在地アイコンを復活させた話

gpsを使って現在地を読み取るアプリを作っていたのですが、今まで普通に映っていた現在地アイコンが急に消えてしまう事案に

遭遇しました。プロジェクトクリーンやリビルドも何回かしたのですが依然アイコンは消えたまま・・・!

ここまでコードをロールバックしても動かなかったので、視野を広げて飛行機ちゃんこと機内モードに白羽の矢を立てました。

機内モードにするとbluetoothやwi-fiといった通信機能が一時的に使えなくなります。こいつをタップして一度全てリセットした状態でも

う一回起動してみようと思い試してみました。が変わらず・・・。さてどうしましょうと考えていたらなんといきなり現在地アイコンが復活しました!

読み込みに時間がかかっていただけのようで、その後何回か再起動したのですが問題なく現在地アイコンを出すことができました。

iphoneユーザーですからっていい訳は死んでも使いたくないのでここで解決できて本当に助かりました。

設定方法→①まずホーム画面に戻ります。②上から下にスワイプすると、下のような画面が出てきます。③左下にある機内モード(飛行機のマーク)を押します。すると、wi-fi、bluetooth、位置情報といった通信手段が一斉遮断され、アプリなどの連携を断ち切ります。

ここで、もう一回機内モードを押して停止させましょう。すると、今までオフだった通信手段が全部白色になりオンの状態に

なります。とりあえずこれで解決・・・・。

 

 

コードやライブラリ周りを見てもまだ現在地が出てこなかった場合は、こちらが怪しいと目をつけてみてください。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】cordova-plugin-media使用時の音楽ファイルパスの指定について

dちょっとハマりかけたので、備忘録としてまとめ。
昨日ご紹介した、Cordova アプリで音楽ファイルを扱うためのプラグイン「cordova-plugin-media」の音楽ファイルのパスの指定方法についてです。

なお、昨日の記事はこちらから。

【Cordova】音声ファイルを扱うためのプラグイン「cordova-plugin-media」

 

で、ハマりかけたのは、Android での音楽ファイルのパスの指定方法についてです。
単純に、画像ファイルなんかと同じように、www ディレクトリ以下のパスを指定すればOKかと思ったら、それでは動かず、Code: 1 のエラーが発生しました。
なお、エラーコード 1 は、MediaError.MEDIA_ERR_ABORTED というエラーとのことです。
Aborted は「中止」という意味なので、エラーで途中で中断したという感じかな?

で、色々検索したところ、下記の記事がヒットしました。

【Monaca】Mediaプラグインを使う時に気をつけたいこと【Cordova】|webico
https://blog.webico.work/monaca-cordova02

その中で、下記のようにファイルパスを取得している関数があり、それを音楽ファイルの頭につけていたので、それを参考に修正しました。

// パス取得の関数
function getPath() {
    let str = location.href;
    let i = str.lastIndexOf('/');
    return str.substring(0, i+1);
}

私の場合、Android の時は音楽ファイルの頭に file:///android_asset/www/ を付けるようにしたら問題なく動作するようになりました!
なお、iOS の場合、単に www ディレクトリからのパスだけでOKだったので、cordova-plugin-device を利用して、プラットフォームごとに処理を切り替えるようにしましょう。

最終的なコードは下記のようになりました。

playMedia() {
  let src = '[www からの音楽ファイルのパス]';
  if (window.device.platform == 'Android') {
    src = 'file:///android_asset/www/' + src;
  }
  let media = new window.Media(src);
  media.play();
}

なお、前の記事でも書きましたが、Android の場合はリリースの処理をきちんと行いましょう。
私は…今から追加します。

 

以上、cordova-plugin-media の音楽ファイルのパスの指定方法でした。
お困りの方がいましたら、参考にしていただければと思います。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】音声ファイルを扱うためのプラグイン「cordova-plugin-media」

Cordova アプリで効果音を出したいという要望があったので、メディアプラグイン「cordova-plugin-media」をインストールしました。
HTML5 の audio タグを使用する方法もありますが、iOS では動作しない可能性もあるとのことでしたので、プラグイン導入を選択しました。

GitHub のページはこちらから。

GitHub – apache/cordova-plugin-media: Apache Cordova Plugin media
https://github.com/apache/cordova-plugin-media

 

実装方法ですが、まずプラグインをインストールします。

cordova plugin add cordova-plugin-media

で、下記のように使用したい音声ファイルや、成功/失敗時に実行する関数などを定義します。

const media = new Media('[音声ファイルのパス]', [成功時の処理], [失敗時の処理], [ステータス変化時の処理]);

なお、音声ファイルのパス以外はすべてオプションなので、必要がなければ定義しなくてもOKです。

あとは、呼び出したいメソッドを任意のタイミングで実行するだけ!
私は単に音楽ファイルを再生したいだけだったので、下記を実行しました

media.play();

なお、OS のオーディオリソースを開放する release メソッドもあります。

media.release();

特に Android の場合、メディア再生に割り当てることができるインスタンスの数に限りがあるため、Media リソースが不要になった場合には必ず上記を実行しましょう。

 

以上、メディアを扱うための Cordova プラグイン「cordova-plugin-media」のご紹介でした。
どなたかの参考になれば幸いです。

  • この記事いいね! (0)
著者:ym

やっぱり VMware 。VMware と Hyper-V 切り替え

昔ながらの BIOS マシンを使用しているので、以下のコマンドで切り替えられます。

VMware を使いたい場合

bcdedit /set hypervisorlaunchtype off
その後 OS 再起動


Hyper-V を使いたい場合

bcdedit /set hypervisorlaunchtype auto
その後 OS 再起動

HDD マシンだから再起動したら 30 分以上かかる。どうにかならんのか、これ。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】「Please fix the version conflict either by updating the version of the google-services plugin」エラーの対処法

昨日紹介した、Cordova のプラグイン「google-analytics-plugin」をインストールした際に発生したエラーについてです。
ちなみに、プラットフォームは Android です。

昨日の記事はこちらから。

【Cordova】アプリのアクセス解析を行えるプラグイン「google-analytics-plugin」
https://cpoint-lab.co.jp/article/201904/9282/

 

エラー全文はこちら。

Please fix the version conflict either by updating the version of the google-services plugin (information about the latest version is available at https://bintray.com/android/android-tools/com.google.gms.google-services/) or updating the version of com.google.android.gms to 9.0.0.

Google 翻訳に突っ込んだところ、「google-servicesプラグインのバージョンを更新することで、バージョンの競合を修正してください(最新バージョンについての情報はhttps://bintray.com/android/android-tools/com.google.gms.google-services/にあります)。 またはcom.google.android.gmsのバージョンを9.0.0に更新する。」とのこと。

結果から言うと、build.gradle を下記のように修正すればOKでした。

dependencies {
    ...
    compile 'com.google.android.gms:play-services:9.0.0'
}

バージョンの競合とか面倒くさそうなことを書いてあったので、手こずるかと思いましたが、そもそも解決方法がエラーに書いてありましたね。
今まで、エラー文に書いてある解決策って動かないこともあるので、若干半信半疑で試しましたが、今回は上手くいったようです。

 

以上、「google-analytics-plugin」導入時に発生したエラーの対処法についてでした。
今回はあっさり解決できたので、よかったです。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】アプリのアクセス解析を行えるプラグイン「google-analytics-plugin」

今回は、Google Analytics を Cordova アプリで使うためのプラグイン「google-analytics-plugin」についての紹介です。
そう言えば入れてなかった…と気づき、実装。

GitHub のページはこちらから。

https://github.com/danwilson/google-analytics-plugin
https://github.com/danwilson/google-analytics-plugin

 

実装方法については、こちらのサイトが分かりやすいかと。

Google Analyticsプラグインを使ってアプリの行動分析を行おう|モナカプレス
https://press.monaca.io/atsushi/447

まず下記のコマンドでプラグインをインストールします。

cordova plugin add https://github.com/danwilson/google-analytics-plugin.git
// または
cordova plugin add cordova-plugin-google-analytics

インストールが終わったら、下記のコードを deviceready イベントのタイミングで実行します。

window.ga.startTrackerWithId('[トラッキングID]');

画面を追跡するには下記のコードを利用します。

window.ga.trackView('[画面名]')

また、ボタンを押したり、検索を実行したタイミングなどでイベントを記録したい場合には、下記のコードを追加します。

window.ga.trackEvent('Category', 'Action', 'Label', Value);

Label と Value はオプションで、Value には数値が入ります。

意外と簡単!と思ったのですが、実は最初のトラッキング ID の指定から躓いております。
Google Analytics のページで、新しいプロジェクトを追加したのですが、モバイルアプリを選択すると、「トラッキングIDの発行」ではなく「アプリの追加」になっていて、ここでは ID が取得できないのかも?
ならどこに?と探しているのですが、未だ見つけられておりません。

で、色々見て調べていたのですが、そもそも、プロジェクト作成時に Firebase のプロジェクトと連携させたんですよね。
…これは、Google Analytics ではなく、Firebase のアナリティクスを使った方が早いのでは…!
ということで、その方向で進めてみたいと思います。

 

以上、Google Analytics を Cordova アプリに導入するためのプラグイン「google-analytics-plugin」のご紹介でした。

  • この記事いいね! (0)
asaba 著者:asaba

【ButterKnife】バターナイフは明示的にgradleに書くべき

viewのメソッドを簡潔にかくことが出来るライブラリです。一般的なviewを使いたい時は、findViewByIdで紐付けるだけで使うことが

できますが、これが複数のviewとなると、同じようなコードができてしまいこれでは可読性に欠けてしまいます。

バターナイフは、このダブつくview定義を事前に定義させることでsetContentViewの下からviewの操作を可能にしてくれるので、複数の

ビューを使いたいけど管理が大変なエンジニアさんには重宝されています。こんな感じ↓

class ExampleActivity extends Activity {
@BindView(R.id.title) TextView title;
@BindView(R.id.subtitle) TextView subtitle;
@BindView(R.id.footer) TextView footer;

@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
}
}

 

今自分が開発しているアプリもバターナイフを使って管理しているのですが、グレイドル(また出たなお前)のバージョンを上げたら

やっぱりというべきかエラーに通せんぼされてしまいました。

 


Error:Execution failed for task ':app:javaPreCompileDebug'.
> Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor. Please add them to the annotationProcessor configuration.
- butterknife-6.1.0.jar (com.jakewharton:butterknife:6.1.0)
Alternatively, set android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true to continue with previous behavior. Note that this option is deprecated and will be removed in the future.
See https://developer.android.com/r/tools/annotation-processor-error-message.html for more details.

訳してみました。

プロセッサは明示的に宣言されなければなりません。次のコンパイルクラスパスへの依存関係に、注釈プロセッサが含まれています。 annotationProcessor設定にそれらを追加してください。

 

どうやらバターナイフはグレイドルのバージョンに合わせてannotationProcessorとして定義しなければいけないみたいです。グレイドル

アップデート前は普通に定義しなくても使えていたのに・・・。

まあもうできたのが6年前なので仕様が変わっていても不思議じゃないですよね。という訳でannotationProcessorにバターナイフを定義してあと残り

なく解決です。

 

annotationProcessor "com.jakewharton:butterknife:6.1.0"
compileOnly "com.jakewharton:butterknife:6.1.0"

このライブラリに変わるものがすでに出てきているか分かりませんが、ライブラリとしては書くことが少なく学習コストも低いので

いとまがあれば使ってみたいと思います。

  • この記事いいね! (0)
takahashi 著者:takahashi

Ubuntu 18.04で廃止されたgksuを使わずに、GUIアプリを管理者権限で実行する方法

Linuxに置いてのGUIアプリを管理者権限で起動する方法に”gksu”というコマンドを経由するという方法が以前はありました。

ターミナルからであれば非推奨ながらも “sudo -H” コマンドなどで起動できたのですが、例えばGNOMEなどから直接ショートカットで実行したい場合などでは、ターミナルが開かないためパスワードが入力できないという問題があります。

gksuコマンドではsudoと同じように権限の昇格を行ってくれる上、GUIのフロントエンドも表示してくれるので、ターミナルを経由せずに管理者権限でアプリやコマンドを実行させることが可能でした。

ところが、このgksuが本家debianのリポジトリから削除されたことに伴い、Ubuntu でも バージョン18.04で削除されてしまいました。

$ sudo apt install gksu
[sudo] hoge のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
パッケージ gksu は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。

E: パッケージ 'gksu' にはインストール候補がありません

よって今後は、gksuコマンドを使ってGUI上から管理者権限でアプリを起動することができません。

これでは困ってしまうので、代替策をいろいろ調べたところ、下記記事を発見。

Linux Mint 19: 「’gksu’ not found」 廃止された gksu の代わりの方法 – 221B Baker Street

どうやら、代わりに”pkexec”コマンドを利用すればいいようです。

ただし、このコマンドをgksuのようにGUIで利用できるようにするには

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY コマンド

のようにする必要があるようです。

しかし、これを毎回打つのはかなり面倒なので、aliasへ登録しておきます。
上記の記事では

alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'

のようにpkexecを上書きすることをお勧めされていましたが、これだとオプション無しの”pkexec”コマンドが使えなくなってしまいますので、僕の場合はこのようにしました。

alias gksu='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'

こうしておけば、もはや存在しなくなったgksuコマンドでオプション付きのpkexecが呼び出せますし、新しいコマンドを覚える必要もないので便利です。

aliasの効果は一時的なので、永続化させるためにこの記述を、

~/.bashrc

ファイルの最終行あたりに追記しておきます。

こうすることで、ログインするたびに.bashrcに記述したaliasコマントが実行されるので、常に使用することが可能になります。

ただし.bashrcはGNOMEのようなデスクトップ環境から直接呼び出されないので、
(例えばショートカットを作成してダブルクリックだけで起動したい場合などで) GUIから直接aliasで作ったgksuコマンドをたたいても、先ほどのaliasが設定されていない為存在しないコマンドとなり実行できません。

そこで、先ほどのオプション付きpkexecコマンドをシェルスクリプトファイルに書き、パスが通っている場所(/usr/local/binなど)に置いて、普通のコマンドとして扱えるようにしてしまいます。

例えば、

vi /usr/local/bin/gksu

のようにして、次のように記述して保存します。

#!/bin/bash

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $1

こうすることで、gksu コマンド を実行したときに、コマンドが$1に渡されるので目的の動作をさせることができますし、パスが通ったディレクトリに置くことで、どのディレクトリからもコマンドとして実行できます。

つまり、GNOMEのようなデスクトップ環境上でも、直接自作の”gksu”コマンドが実行できるようになります。

gksuが使えなくてお困りの方は是非一度試してみてください。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】「The versions of the Android Gradle plugin and Gradle are not compatible.」エラーの対処法

ちょっとミスをして、Cordova アプリから Android プラットフォームの削除・再追加を行ったのですが、その時に発生したエラーについて。
Android Studio のバージョンを上げたのも原因だったのかも?

Gradle のバージョンに関するエラーで、全文は下記のとおり。

ERROR: The versions of the Android Gradle plugin and Gradle are not compatible.
Please do one of the following:
Update your plugin to version 2.4. This will require changes to build.gradle due to API changes.

エラー:Android GradleプラグインとGradleのバージョンは互換性がありません。次のいずれかを行ってください。プラグインをバージョン 2.4 に更新してください。これはAPIの変更により build.gradle への変更を必要とします。」とのこと。

 

そのため、エラー文に書いてある通り、build.gradle のバージョンを更新しました。
また、Android Studio の File > Project Structure の Project でも、バージョンを確認しました。
…が、最初はどこを直していいのかわからず、いろんなところを直しては戻し、また別のところの値を変え…とやっていたら、いつのまにか直っていた感じなので、確認箇所がこれでいいのかは不明です。

一応、参考にさせていただいたサイトを挙げておきます。

[Android Studio][gradle]gradleとAndroid plugin for gradleのバージョンを合わせる
https://qiita.com/azumak/items/c48c56447a7a345f2b43

 

以上、Android Studio で Gradle のバージョンエラーが発生した際の対処法についてでした。
あまり参考にならない気もしますが…。

  • この記事いいね! (0)
takahashi 著者:takahashi

Intel HD Graphics コントロールパネルが開かない時に確認したいこと

先日、Windows10 October 2018 Update(1809)を適用した後あたりから、グラフィックドライバの設定がおかしくなり(無効化していたはずのバッテリー駆動時のフレームレートを低下させる機能が再び有効になっていた)、唯一の設定手段であるIntel HD Graphics コントロールパネルを開こうとしたところ、

このスプラッシュ画面までは表示されるものの、何度試しても肝心のコントロールパネルは一向に表示されません。

Windows 10でのIntel HD Graphics問題の対処法(更新) – Windows 10 Solomonレビュー[redémarrage]

こちらの情報も参考にしていろいろ試したのですが、何度ドライバを入れなおしても一向に解決しませんでした…

困り果ててOSのバージョンのロールバックも考えたのですが、その前に「もしかしたら開かない原因がイベントビューア(システムログビュアー)に落ちているのでは」と思いダメ元で見てみました。

すると…

障害が発生しているアプリケーション名: Gfxv4_0.exe、バージョン: 8.15.100.6472、タイム スタンプ: 0x5c0ebadd
障害が発生しているモジュール名: amdvlk64.dll、バージョン: 1.0.39.0、タイム スタンプ: 0x5a4370eb
例外コード: 0xc000041d
障害オフセット: 0x000000000000ae51
障害が発生しているプロセス ID: 0x5a98
障害が発生しているアプリケーションの開始時刻: 0x01d4f425b8b07ceb
障害が発生しているアプリケーション パス: C:\WINDOWS\System32\DriverStore\FileRepository\igdlh64.inf_amd64_555cfc07a674ecdd\Gfxv4_0.exe
障害が発生しているモジュール パス: C:\WINDOWS\System32\amdvlk64.dll
レポート ID: ...
障害が発生しているパッケージの完全な名前: 
障害が発生しているパッケージに関連するアプリケーション ID: 

このようなエラーを発見。

Gfxv4_0.exe はIntel HD Graphics コントロールパネルの一部であり、これが何らかのエラーで止まってしまったというまさにドンピシャのエラーが記録されていました。

原因となっている amdvlk64.dll ですが、名前の通り、AMD製グラフィックドライバー周りのファイルだと思われます。

実は問題が起きたPCには、外部GPUとしてAMD製のグラフィックカードであるRadeonが搭載されていて、そのチップ用のグラフィックドライバもインストールされているのですが、確認したところ、何故か古いバージョンのものに戻ってしまっていました。

そこで、AMD Radeon公式サイトから、自動アップデートツールを入手して、ドライバのアップデートを実行しました。

AMD公式のドライバ配布ページに行き、赤枠のアプリをダウンロードすれば、GPUのモデルがわからなくても自動で最適なドライバをインストールしてくれます。
アップデート完了後のドライバユーティリティの画面。旧バージョンにはなかった”アップデート”の文字が追加されました。

ドライバのインストール完了後、一度再起動を行い、再度HD Graphicsコントロールパネルを開いたところ…

無事表示されるようになっていました!!!
まさか、他社製のグラフィックドライバが足を引っ張っていたとは…

ということで、何かトラブルが起きたときはまずログを確認しましょう。

…というお話でした(汗

  • この記事いいね! (0)