カテゴリーアーカイブ OS

村上 著者:村上

【Cordova】Android端末でアプリのパーミッションを確認するプラグイン「cordova-plugin-android-permissions」

昨日の記事で名前だけ紹介したプラグイン「cordova-plugin-android-permissions」についてご紹介します。
名前のとおり、Android 端末のパーミッションチェックしか行えませんが、使い方が分かりやすいのでこちらもおすすめです。

GitHub – NeoLSN/cordova-plugin-android-permissions: This plugin is designed for supporting Android new permissions checking mechanism.
https://github.com/NeoLSN/cordova-plugin-android-permissions

 

インストールのためのコマンドは下記のとおりです。

cordova plugin add cordova-plugin-android-permissions

使用例は下記のとおりです。

const permissions = cordova.plugins.permissions;
permissions.requestPermission(permissions.CAMERA, function(status) {
    if (status.hasPermission) {
        // 許可された
    } else {
        // 許可されなかった
    }
}, function(error) {
    // 許可されなかった
    console.log(error)
});

なお、上記ではカメラパーミッションをリクエストしています。
許可されていない場合は、パーミッションダイアログが表示されます。

単にパーミッションを確認するだけの場合は、下記を使用します。

permissions.checkPermission(permission, successCallback, errorCallback);

上記を実行した場合、指定したパーミッションが許可されていない時でもダイアログは表示されません。

カメラ以外のパーミッションを確認する場合は、下記の Manifest.permission を参考にしてください。

Manifest.permission|Android Developers
https://developer.android.com/reference/android/Manifest.permission.html?hl=zh-tw

 

以上、Android 端末でアプリのパーミッションを確認するためのプラグイン「cordova-plugin-android-permissions」のご紹介でした。
昨日紹介した「cordova-diagnostic-plugin」とは違い、第一引数を変更すれば同一の処理でパーミッションを確認できるのは良いですね。
個人的にはこういった書き方の方が好みです。
需要に合えば、是非ご活用ください。

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

【Cordova】アプリのパーミッションを確認するプラグイン「cordova-diagnostic-plugin」

アプリのパーミッションを確認する必要があったため、プラグインをインストールしました。
Android なら、cordova-plugin-android-permissions というプラグインがあったのですが、名前のとおり、Android のみしか対応していなかったため、iOS でのチェックを行うためにこちらもインストールしました。
しかし、こちらは Android にも対応しているため、cordova-plugin-android-permissions の方をアンインストールして、これのみでチェックしようかと思っています。

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

GitHub – dpa99c/cordova-diagnostic-plugin: Cordova/Phonegap plugin to manage device settings
https://github.com/dpa99c/cordova-diagnostic-plugin

 

使い方ですが、例えばカメラのパーミッションを確認する場合は下記のように記述します。

cordova.plugins.diagnostic.getCameraAuthorizationStatus(
    function(status) {
        // チェック成功
        if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED) {
            // カメラが使用が許可されている
            ......
        } else {
            // カメラが使用が許可されていない
            ......
        }
    }, function(error) {
        // チェック失敗
        console.error("The following error occurred: "+error);
    }, false
);

カメラの使用が許可されている場合は、上記のようにステータスで GRANTED の値が返却されます。
なので、返却値によって適宜処理を変更してください。

なお、上記のコードでは、パーミッションを確認するだけなので、もしなかった場合でも許可/拒否のダイアログの表示はしません。
パーミッションをリクエストしたい場合には、requestCameraAuthorization() を使用してください。
使用例は下記の通りです。

cordova.plugins.diagnostic.requestCameraAuthorization(
    function(status) {
        if (status === cordova.plugins.diagnostic.permissionStatus.GRANTED) {
            // カメラ使用が許可された場合
            ......
        } else {
            // カメラ使用が許可された場合
            ......
        }
    }, function(error) {
        console.error("The following error occurred: "+error);
    }, false
);

使い方としてはこんな感じです。
他にも、位置情報や Bluetooth、プッシュ通知、マイクなど、色々チェックできます。

ただし、位置情報など一部のパーミッションによっては、戻り値のステータスの値が Android と iOS で違っていたりするので、そこだけはご注意ください。

 

以上、アプリのパーミッションをチェックするためのプラグイン「cordova-diagnostic-plugin」のご紹介でした。
戻り値に注意して、便利にお使いください。

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

Windows 10 の新しいスクリーンショットがなかなか使いやすい件

Windowsのスクリーンショットを撮影する際、今まではキーボードの”Print Screen”キーか、Windowsに標準で入っている”Snipping Tool”のいずれかを使う方法が用意されていました。

実は、Windows 10 Creators Update(ビルド1703)から、もう一つスクリーンショットの撮影方法が追加されていたことをご存知でしょうか。

この新しいスクリーンショットは、”Windows + Shift + S”キーを同時に押すことで起動します。

デフォルトは距形選択モードになっていて、選択した部分が四角く切り取られた形でキャプチャすることができます。

また、フリーフォーム グリップを選択すると…

このように円形に近い形で切り取ることができます。

ちなみに3つ目は全画面キャプチャです。

snipping toolは毎回起動する必要がありましたが、この新しいスクリーンキャプチャはショートカットキーを押すだけで起動するので便利です。

ちなみに、

「Snipping Tool」は廃止へ ~「Windows 10 RS5」でスクショの取り方はこうなる! – 窓の杜

従来のSnipping Toolは廃止される予定とのことです。

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

【Android】「Android resource linking failed」エラーの対処法

今回は、Android Studio でアプリをビルド中に遭遇したエラーについて。
タイトルにも書きましたが、「Android resource linking failed」というエラーです。
直訳すると、Androidリソースのリンクに失敗しました とのことですが…つまりどういう意味?

 

ということで検索してみたところ、下記の記事がヒットしました。

[Android]「Android resource linking failed」というメッセージでビルドエラーになる場合の対処法 – みんなのプログラミング
https://minpro.net/android-resource-linking-failed

エラーの全文も載っていたので、私の環境で発生しているものと照らし合わせて確認しました。
どうやら同一のエラーのようです。

で、このエラーの対処法としては、アプリレベルの build.gradle ファイルの compileSdkVersionbuildToolsVersion と合わせればと良いとのこと。
私の環境では、buildToolsVersion は 28 だったので、build.gradle の compileSdkVersion も 28 に変更しました。

android {
    ...
    compileSdkVersion 28
    buildToolsVersion "28.0.3"
    defaultConfig {
        ...
        targetSdkVersion 28
    }
}

なお、このとき一緒に targetSdkVersion も 28 に変更しましょう。

修正するのはこれだけです。
あとは、Sync Now を行ってから、通常通り、ビルド・実行を行ってください。
私の環境では、問題なく実行できました。

 

以上、Android Studio で「Android resource linking failed」エラーが発生した時の対処法でした。
分かりにくいエラーだったので最初は焦りましたが、参考になるサイトがヒットしたので良かったです。
参考になれば幸いです。

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

結局ストア版でないSlackをインストールしたら自動起動しない不具合が治った話

チェックしてもSlackアプリを再起動するとチェックが外れていて、PCを再起動しても自動で起動しない…

Windowsストアアプリ版のSlackで、自動起動にチェックを入れておいても、アプリ再起動後にチェックが外れて、PC起動時に自動起動してくれなくなる不具合への対処法を
[Windows小技]Slackが自動起動しなくなった時の対策方法
で紹介しましたが、Slackアプリがストアによってアップデートされた際、スタートアップからショートカットを削除されてしまう現象を確認しました。

いい加減にしてくれと頭を抱えそうになったところであることを思い出しました。

実はWindows版Slackって、2種類あるんです。

片方は今まで使っていたストア版のSlackアプリなのですが、もう一つ、通常インストール版のSlackクライアントも公開されています。

LINEと同じですね。

よく考えればストアアプリだけにしてしまうと、Windows 7以下のOSでSlackが使えなくなってしまうので、「そりゃあそうか」というところではありますが…

とりあえず、物は試しと一旦ストアアプリ版Slackを削除して、通常版のSlackをインストールして、自動起動を有効にしてみました。すると…

おおおちゃんとチェックボックスが入ってる!!!
Windowsを再起動してもちゃんと自動でSlackが立ち上がってくれるようになりました!!!

ストアアプリ版と違いライブタイルは利用できませんが、ライブタイルでSlackを見ることはあまりないので正直通常盤でも事足ります。

ということで、Slackが自動で立ち上がらない不具合にお悩みの方は、通常版のSlackアプリに一旦移行されることを考えた方がよいかもしれません。

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

【Android】WebViewでURLで指定された画像が表示されないときの対処法

タイトル通り、Android の WebView にて、画像URLで指定された画像が表示できない時の対処法です。
私が普段使っている端末が Android 7.0 で、この環境では問題なかったのですが、Android 9.0 で発生しました。

で、Chrome のデバックモードで確認したところ、「Failed to load resource: net::ERR_CLEARTEXT_NOT_PERMITTED」というエラーが発生していました。
検索したところ、下記の記事がヒットしました。

Android – [Android] WebViewでサーバー上のhtmlを読み込めない|teratail
https://teratail.com/questions/94253

 

こちらによると、画像URLが https:// ではなく、セキュアではない http:// から読み込まれようとしているため、WebView がブロックしていることが原因のようです。
確認したところ、読み込もうとしている画像 URL は確かに URL は http:// ですね…。

で、対応策としては、AndroidManifest.xmlapplication タグに、下記を追加するとのこと。

<application ... android:usesCleartextTraffic="true">
    ...
</application>

上記の android:usesCleartextTraffic="true" を AndroidManifest.xml に設定することでも全ての通信に対して、暗号化されていない、HTTP 通信を許可することができます。
上記を追加して実行したところ、無事に画像が表示されました!

しかし、何故か PC にAndroid 端末を繋いで直接インストールする方法の時は画像が表示されるという謎な動きをしたので、DeployGate を挟んでインストールを行いました。
この現象については要注意ですね!

 

以上、Android の WebView で、画像URLで指定された画像が表示されない時の対処法でした。
…本当は、画像 URL もセキュアな通信で取得するようにするのが一番良いんですけどね…。
でも、すぐには難しいと思うので、この方法でしのぎましょう。

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

【android】Could not resolve all files for configuration ‘:app:debugCompileClasspath’の解消法

タイトルの通りですが、クラスパスがないのでビルドできません的なエラーです。原因は’com.android.tools.build:gradle:●.●.●’の

●●の部分がグレイドルのバージョンと合っていなかったりandroid support libraryをインストールしていなかったりと多岐に渡りますが、

自分の場合はただ一行追加するだけでおとなしくなってくれました。それがこちらです。

 

<pre>repositories {
    google()←これをjcenter()の上に追加するだけ
    jcenter()
}</pre>

 

build.gradleにあるallprojectsスコープとrepositoriesスコープ内にgoogle()を追加してください。

 

android support libraryを使っているならこれを必ず追加しろということだと思います。順番は先頭にしないと警告が出るので

とりあえず一番先頭においておけば間違いはないはず。

自分の場合はこちらで解決しましたが、中にはsdkmanagerのsdktoolをアンインストールして再度インストールしないと消えない

ケースもあったので(スタックオーバーフロー参照)これが参考になるか分からないですが

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

【Cordova】cordova-plugin-firebaseを導入した際にAndroid Studioでエラーが発生する

タイトル通り、Cordova アプリに cordova-plugin-firebase プラグインを導入した際、Android Studio でアプリをビルドしようとするとエラーが発生しました。
エラーログを確認したところ、どうやら Java ファイルでエラーが発生しているようでした。
GitHub の Issues でも同じエラーと思われる投稿がありました。

その投稿については下記からご確認できます。

New error on android build since 06-05-2019 · Issue #1057 · arnesson/cordova-plugin-firebase · GitHub
https://github.com/arnesson/cordova-plugin-firebase/issues/1057

 

で、寄せられた投稿を確認したところ、解決策らしきものを発見!
その方法は、build.gradle に記載されている、Firebase 関連の依存関係のバージョンを下記のとおりに下げるというものでした。

compile "com.google.firebase:firebase-core:16.0.8"
compile "com.google.firebase:firebase-messaging:17.5.0"
compile "com.google.firebase:firebase-config:16.4.1"
compile "com.google.firebase:firebase-perf:16.2.4"

恐らく、プラグインをインストールしただけですと、バージョンが + という表記になっているかと思います。
それらを上記のバージョンに変更します。
変更後は、Sync Now を実行します。
私の環境では、こちらの方法でエラーが解消できました!
その後、通常通りにビルド・実行も行いましたが、何かエラーが発生したり、アプリが途中でクラッシュしたりすることもなく、問題なく実行できました。

最初エラーに遭遇した際、エラーログに表示されているエラー箇所そのものをデバッグしようとしましたが、どうしても修正方法が調べられない箇所があったので、プラグイン導入自体を諦めなければならないのかと危惧しましたが、無事実装できてよかったです。

 

以上、cordova-plugin-firebase 導入時に、Android Studio でエラーが発生する時の対処法でした。
誰かの参考になれば幸いです。

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

【androidstudio】遅くなったandroid studioの速度を改善する方法

タイトルの通りです。先週まで普通に開発に使っていたandroid studioが突然重くなりました。というかビルドの終わる時間が遅く

なりました。困った時のとりあえずクリーンビルドをしてみても変わらず。開いていた重そうなファイルを全部閉じて再起動しても

のろのろビルドのまま・・・。グレイドルのアップデートに必要なパッケージをたくさんインストールしたからでしょうか。

いずれにしろこのままでは気分が悪いので公式をのぞいたら答えが見つかりました。

どうやらdexというツールを使って変更したソースや再コンパイルの必要があるソースだけを再コンパイルすることで開発中のコンパイル

時間を短縮できるみたいです。といっても難しい処理は必要なくgradle.propertiesファイル内に以下のコードを記述するだけで改善できる

みたいです。

</pre>
<pre class=""><span class="pln">org</span><span class="pun">.</span><span class="pln">gradle</span><span class="pun">.</span><span class="pln">jvmargs </span><span class="pun">=</span> <span class="pun">-</span><span class="typ">Xmx2048m</span></pre>
<pre>

 

自分も試しに入れてみたところ期待した通り、一分くらいかかっていたビルドがいらいらを感じない程度には早くなりました。

(推定半分くらいかな?)早くなったのはいいけど偶にビルドできないのはなんででしょう。んー、これ解決と言えるか微妙なところですね・・・。

使っていて気分が悪いままだったら別の解決法を考えます。

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

【AndroidStudio】「Gradle DSL method not found: ‘implementation()’」エラーの対処法

今回は、Android Studio で発生したエラーについて。
以前開発していたアプリを開いたところ、「ERROR: Gradle DSL method not found: ‘implementation()’」というエラーに遭遇しました。
Android Studio のバージョンを上げたような気もするし…それが原因かな。

で、エラーを検索したところ、下記の投稿がヒットしました。

android – Gradle DSL method not found: ‘implementation()’ – Stack Overflow
https://stackoverflow.com/questions/45838173/gradle-dsl-method-not-found-implementation

 

投稿によると、implementation() を利用するには、

  1. gradle plugin を Android 3.0.0 以上に更新
  2. gradle のバージョンを 3.4 以降に

上記が必要とのことでした。

そのため、まず build.gradle を下記の記述のように変更します。

buildscript {
    repositories {
        ...
        // 下記を追加
        google()
    }

    dependencies {
        // ここのバージョンを 3.0.0-beta1 に変更
        classpath 'com.android.tools.build:gradle:3.0.0-beta1'
    }
}

次に、gradle-wrapper.properties を開き、下記を追加します。

distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-rc-1-all.zip

もし既に違うバージョンのファイルが指定されている場合は、コメントアウトなどをしてください。
消しても問題ないとは思いますがが、私は念のためコメントアウトで対応しました。

あとは、Sync now をクリックして実行すればOKです。
なお、私の環境では、この後さらにバージョンアップを促されたので、それも実行しました。
作業は以上です。
他のエラーが発生していなければ、問題なくビルドが実行できると思います。

 

以上、「ERROR: Gradle DSL method not found: ‘implementation()’」エラーの対処法でした。
Stack Overflow には大分お世話になっていますので、今後も困ったらこちらをのぞいてみたいと思います。

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