酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

開発-Android

Android Studio 3.0にしてからエミュレータでのアプリ実行ができなくなった[解決済み]

Android Studio 3.0にしてからエミュレータでのアプリ実行ができなる自体に陥りました。過去の設定ファイル等が悪影響を及ぼしているのではないかと疑って試行錯誤していました。 本件は既に解決しております。 結論から書くと、プロジェクトの設定の「Deplo…

AndroidでSensorManagerを使って磁気センサー(コンパス)の方位を取得する

コンパスのように磁気センサーを使って磁北を指したい。 LocationServiceはユーザーの利用許諾が必要だったけれど、磁気センサーは特にユーザーに許可を得なくても利用できるようです。 sensorManager = (SensorManager) getActivity().getSystemService(Act…

AndroidでLocationManagerを使って位置情報を取得する

AndroidでLocationManagerを使って位置情報を取得する方法を紹介します。現在、minSdkVersionが19で開発しています。 事前情報 API 19ではFragment#requestPermissionsとFragment#onRequestPermissionsResultが使えない*1ので、一旦パーミッションの許可をFr…

Realm Javaを使って複数の条件でソート(並べ替え)する

本記事ではRealm Javaを使って複数条件でソートする方法を紹介します。 Realm Swiftでの複数条件のソートしたい場合、「Realm Swiftを使って複数の条件でソート(並べ替え)する - 酢ろぐ!」の記事をご覧ください。 並び替えをする String[] names = { "onlin…

Realm JavaでnullableなInt配列のjsonファイルを読み込む

メモ。あとで書き足す(予定)。 問題 Realm Javaではjsonファイルを読み込んでそのままRealmのオブジェクトをすることができます。しかし、intやstringといったプリミティブ型配列の場合にはそのままダイレクトにRealmに格納することができません。 JSON API…

AndroidでObjectAnimatorを使ってViewをアニメーションさせる

久しぶりにAndroidアプリでアニメーションしています。 説明はあとで書きます。 アニメーションさせる imageViewのアルファ値を1秒(1,000ミリ秒)かけて0(透明)するアニメーションです。 ObjectAnimator.ofFloat(imageView, "alpha", 0).setDuration(1000).st…

AndroidアプリをJava 8に対応した

あとで書き足すかもしれない。メモ代わり。 projectの方のbuild.gradle buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.0' classpath 'me.tatarka:gradle-retrolambda:2.5.0' } } appの方のbuild.…

Androidで公式YouTubeアプリを起動させる

AndroidアプリからYouTubeアプリを起動さてみましょう。自分のアプリからアオリちゃんの「トキメキ☆ボムラッシュ」のソロPVを起動させます。ブラウザで見る場合は下記のURLから見られます。 www.youtube.com この動画の場合、URLのhttps://www.youtube.com/w…

Androidアプリのビルドで「Unsupported major.minor version 52.0」のビルドエラーが発生する

弊社ではJenkinsを使ってアプリのCIをおこなっています。ここ2ヶ月間は、少し毛色の違うプロジェクトをやっていたこともあって、ビルドサーバーのジョブは増えていませんでした。……というか Androidアプリのビルド時に謎のエラーが発生した! 久しぶりにAndr…

Androidデバイスに入っている楽曲データを取得する

Androidデバイスに入っている楽曲データ一覧からアーティスト情報やタイトル情報を取得します。 private static final String[] projection = { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.TITLE, MediaStore.Audio.…

Androidでセルの並び替えをおこなえるライブラリ「ListViewAnimations」を導入する

iOSのUITableViewのスワイプやセルの並び替えみたいな挙動をAndroidで実現するための「ListViewAnimations」というライブラリがあります。 下記のリポジトリに、ListViewAnimationsのDynamicListViewを実装したものを公開しておきました。GitHubの実装がその…

AndroidでNumberPickerの表示項目数を変更する前にはsetDisplayedValues(null)で初期化する

ここ最近Androidアプリネタが続いていますが、この土日悩んだアプリがクラッシュしてしまう件についてメモしておきます。 日付ごとに異なった時刻を設定できるNumberPickerがありました。イメージがわきにくいと思うので、別の例で……都道府県がいくつか並ん…

Realm Javaのv0.80.3からv0.90.0にアップデートしたらビルドが通らなくなった

久しぶりにRealm Javaを使ったアプリをアップデートすることになり色々と手を入れている最中なのですが、使用しているライブラリのひとつの「Realm Java」も古いバージョンのものを使っていたのでこの機会にアップデートさせようとしました。 この記事ではv0…

Android StudioでKotlinを使ってボタンをタップするたびにカウントが増えていくコードを書く

前回作成したスケルトンプロジェクトを少しだけ弄って、よくあるボタンを押す度にカウントが上がっていくようにしましょう。 content_main.xmlより変更点を抜粋。 layout.xmlにボタンを配置します。ベースがreLayoutなのでViewが被ってしまうのでInearLayout…

Android StudioでKotlinのプロジェクトを作成する

kotlinのスケルトンプロジェクトを作るのは、一旦Javaのプロジェクトを作ってからKotlinのコードにコンバートするのが楽なようです。 Android Studioを起動して、[Start a new Android Studio project]を選択します。 アプリケーション名は適当に「Kotlintes…

Android StudioにKotlinプラグインをインストールする

Kotlinのバージョンがv1.0になったみたいですね。 日本語で書かれた記事はこちらが詳しいです。 そういえば、AndroidでSwiftが使える「RemObjects Silver」がありましたが、アンテナが低いのかあまり話を聞きませんね。 最近、仕事でScalaを使っているのでAn…

Macのhostsの設定をGenymotionへ転送して同期させる

Androidの場合、Genymotionを使って開発をしています。本記事では、MacのhostsをGenymotionでも使う方法を紹介します。 data.example.comに接続するIPアドレスを手動で変えたいときがあります。 例えば、サーバーを開発用と本番用で分けていて、それぞれのサ…

Android(303SH)で音楽を聴く

僕自身あんまり音楽を聴く習慣がないのでAndroidで音楽を聴く方法をしりませんでした。今日、必要になったのでAndroidに音楽を入れてみました。 まず、PC(Mac)とAndroid(303SH)をUSBケーブルで接続しました。USBケーブルでの接続のモードには3つありました。…

Androidで文字列の日付をDate型にパースする(ISO 8601、RFC 1123)

Androidアプリで日時を扱うことが多くなってきました。少し前に「AndroidでHTTPレスポンスヘッダのLast-Modifiedの値を取得する」という記事を書きました。 RFC 2616ではHTTPレスポンスヘッダーに含まれているDateやLast-Modifiedの日付はRFC 1123フォーマッ…

AndroidでChromecast対応アプリを作る

先日のGoogleの新製品イベントでChromecast 2とChromecast audioが発表されました。Chromecast 2はドングル型からペンダント型へのデザイン変更と次の動画を先読みするFast Play機能対応や5GHz対応がメインでしたね。過去モデルとは基本的にあまり変わらなさ…

Androidでヘッドセット(イヤホン)の接続状態の変化を検出する

Androidでヘッドセット(イヤホン)の接続状態が変わったイベントを取得する必要がでてきました。ヘッドセットの状態変更関係を検出する用途では2つのIntentが存在しています。 Intent.ACTION_HEADSET_PLUGとAudioManager.ACTION_AUDIO_BECOMING_NOISYです。 I…

Androidでネットワーク接続状態が変わったイベントを取得する(接続状態の変化を検出する)

ACCESS_NETWORK_STATEの権限が必要なのでマニフェスト(AndroidManifest.xml)でパーミッションの追加をおこないます。 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 次にマニフェストにレシーバーの設定をおこないます。android.net.conn.CONNECTIVITY_CHANGEを拾えるようにします。 <receiver android:name=".ConnectivityReceiver" > <intent-filter> </intent-filter></receiver></uses-permission>

Android Studioを使ってAndroidアプリの新規プロジェクトを作成する

Android Studioのv1.3.2を使って解説します。 Application nameには任意の名前をつけます。ここでは FragmentSample にしました。 Androidアプリのパッケージ名は、jp.ch3cooh.app_nameのように逆ドメイン記法で表します。次のCompany Domainを入力すると、…

【2015/8/31まで】Windows Phoneアプリ開発者は無料でXamarinのライセンスがもらえるよ!

C#でiOSやAndroidのアプリを開発できる「Xamarin」のライセンスを無料で入手できるキャンペーンをやっているようです。 Xamarinの代理店エクセルソフトの田淵さんのブログによると…… 2015/8/17 以前に公開された Windows Phone アプリ個人開発者に無料の Xam…

AndroidでHttpURLConnectionの自動リダイレクトを抑止する

管理が面倒になったのでch3cooh.jpで書いていたコンテンツをこのブログ(はてなブログ)に移動させていっています。移動させるのと同時にリダイレクトするように設定しています。 リダイレクトというのは、旧コンテンツのアドレスhttp://ch3cooh.jp/category/a…

Androidで通知(Notification)が表示されないので調べてみたらSmallIconを設定するのを忘れていた

少しハマった。Androidで通知(Notification)が表示されないので調べてみたらどうもSmallIconを設定しておかないといけないみたい。 仮のものでも使ったら良かったんだろうけど、適当なアイコンがなかったので何も設定していなかったら通知が表示されませんで…

SAMSUNG Galaxy S6 edgeが届いた

先週の日曜日の夕方にパンツからGalaxy S6 edgeが届きました。パッケージはあんまり手がかかってないシンプルなものです。Lumia 800あたりが一番高級感あったように思える(個人の感想です)。 フタを開けたら本体が出てきます。色はゴールドプラチナ!!ウェ…

AndroidでHTTPレスポンスヘッダのLast-Modifiedの値を取得する

アプリケーションで使用する画像ファイルやデータをサーバーに置いて必要に応じてダウンロードすることはよくあります。ただ毎回ダウンロードする必要がないものもあります。そのような場合にはHTTPレスポンスヘッダの最終更新日時Last-Modifiedの値を参照し…

JenkinsでGradleを使ってAndroidアプリをビルドしたときの失敗と対処方法

初めてJenkinsを使ってAndroidアプリをビルドするにあたって発生したエラーとその対処方法をメモしておきます。Android Studioで開くとIDE側でよしなにしてくれるんだけど、コマンドラインからだと自分でエラーに対処しないといけない。自分が引っかかった内…

Xamarin.Androidでアラート(AlertDialog)を使ってメッセージを表示する

Xamarin.Androidでアラートを表示します。 var alertDialog = new AlertDialog.Builder(this); alertDialog.SetTitle("title"); alertDialog.SetMessage("Message"); alertDialog.SetPositiveButton("Positive", (sender, args) => { // Positiveボタンをタ…