おあそび ぷろぐらみんぐ 日記

プログラミング初心者のおあそびと勉強の記録です。

【JJUG CCC 2017】JAVAのコミュニティイベントに行ってきた。

一昨日、JJUG CCC 2017という、JAVAのコミュニティイベントに行ってきました。

jjug.doorkeeper.jp

 

JJUG=Japan JAVA User Groupの略で「じーじゃぐ」って読むんですって。

単純に、JAVA界隈ってどんな感じなんだろってのが知りたかったのと、

こういうガチでやってる人達の話を、初心者+αくらいの自分でどれくらいわかるのかなーってのが知りたくて参加しました。

 

続きを読む

【マストドン】IoTボタンをぽちぽちして、マストドンにTootする。【IoT_MESH】

マストドンブーム、火がついてから一ヶ月くらい?

とりあえず一段落したんですかねー。

私はというと、すっかりtwitterよりmastodon派ですね。

mstdn.jpに参加してるんですが、なんかtwitterよりこっちの空気の方が落ち着く。。

 

せっかく継続してマストドン使っているので、私もなにかいじってみたいなーということで、やってみました。

 

  • 1)やりたいこと
  • 2)開発環境
  • 3)[事前準備]認証情報の取得
  • 4)作った構成
    • 4-1)MESH部分
    • 4-2)トゥート部分
  • 5)完成品

 

続きを読む

【MESH】開封〜twitterでつぶやくまで【IoT】

前回の記事で、MESHからボタン入力で自由につぶやくというネタをやりました。

こういう感じですね。

f:id:beethovenmendelssohn:20170504022727j:plain

プログラムの中身は前回書いたので、

今回はMESHを開封してからチュートリアル的な部分までの話と、MESHの感想を。

  • ・注文〜開封の儀
  • twitterでつぶやいてみる
  • ・つぶやくのに地味にはまったこと。
  • ・MESHの個人的感想 
続きを読む

Android Contentproviderを使ってみる。

androidアプリの勉強中です。

今回はアンドロイドの4大要素のうち1つらしい、ContentProviderを使ってみました。

 ※ContentProviderのわかりやすい解説は他に十分あるので、自分の作業メモ的な感じで書きます。 

 

ContentProviderとは。

データベースにデータを保存/取得できるクラス。
他のアプリとデータを受け渡す際に使うらしい。 

ContentProvider | Android Developers

 

よく使う項目として、CommonDataKindsっていうクラスが用意されているそう。

連絡先データとかですね。

ContactsContract.CommonDataKinds | Android Developers

 

4大要素の1つというだけあって、

Content Provider自体なんてAPI Level 1だし、CommonDataKindsもAPI Level 5でAndroid2.0から対応なので、確かにAndroid初期からある仕組みとデータベースみたい。

  

うーん、でも自作アプリ作るとして、実際に使う機会あるかなぁ。
自分の作ったアプリから他のアプリにデータ受け渡すって多分ない。その場合、受け側のアプリも自分で作るしかないし。

他アプリとかデフォルトで定義されたデータベースを参照するのに使うことはある・・・かな?

 あまり使うイメージわかないなぁ。

 

・連絡先データを取得してみる

 とりあえず、連絡先データを参照するだけのアプリを作ってみることに。

 

・permissionの追加

適当な空のプロジェクトを作って、manifestにpermissionを追加します。

今回の連絡先参照だけなら上だけ。書き込みもするならWRITEもつけると。

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>

 

・連絡先データを取得する。 

まずは書いたコードそのものを載せます。

今回は、単純にcreateされた時にlogに「id数」「カラム数」「カラム名」を吐くだけのアプリにしました。

public class MainActivity extends AppCompatActivity {
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //ContentResolverを設定
        ContentResolver resolver = getContentResolver();

        //クエリ(データを取り出すための操作)を作る。(ここで全データ取得してる)
        final Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        //カーソルを移動(レコードの先頭に)
        cursor.moveToFirst();

        final int id = cursor.getCount();
        final int column_max = cursor.getColumnCount();
        Log.d("TAG", "レコード数は==" +id);
     Log.d("TAG", "カラム数は==" +column_max);
 
   //全部のカラム名を取得するためにforで回す
        for(int i = 0; i<column_max-1;i++){
   //カラム名を端から表示
            Log.d("TAG","colum_number"+i+"=="+cursor.getColumnName(i));
     //カーソルをひとつ先へ動かす
    cursor.moveToNext();
        }
  }
}

 

ポイントは2つですかね。

ContentProviderでデータを参照するために、ContentResolverというのを使ってます。ContentProviderとのデータのやりとり(参照/変更/更新)は全てContentResolverでおこないます。

 

その下、ContentResolver.queryメソッドでデータ自体を取得してます。

引数が5つありますが、最初の1個目でURIを指定します。

今回は、連絡先を取得したいので、ContactsContract.Contacts.CONTENT_URI

2〜5個目の引数は、データ取得の条件(フィルタ的な感じ)を指定できるそうですが、全データ取得したいので、nullにしました。

戻り値はCursorオブジェクトになるので、Cursorオブジェクトcursorに渡します。

 

後は、cursorを動かしながらデータを取得していくだけですね。 

操作はSQLみたいな感じですね。

 

・取得したデータを確認する

 上記の書いた内容で、自分の手元にあった、2台の端末でカラム名を取得してみました。

column_name

GalaxtS7edge_SVC33

Android 7.0

HTC J buttrfly HTL23

Android 5.0.2

androiddevelopers
sort_key 0 0 -
link 1 - -
photo_uri 2 1
send_to_voicemail 3 2
contact_status 4 5
contact_status_label 5 4
pinned 6 3
link_type1 7 - -
display_name 8 6
sec_custom_alert 9 - -
display_name_reverse 10 - -
phonebook_label_alt 11 7 -
sec_custom_vibration 12 - -
phonebook_bucket 13 8
contact_status_res_package 14 9
photo_id 15 11
in_default_directory 16 12
_id 17 13
custom_ringtone 18 14
times_contacted 19 15
link_count 20 - -
phonebook_label 21 16 -
lookup 22 17
display_name_alt 23 18 -
phonetic_name 24 19
has_email 25 - -
sec_led 26 - -
last_time_contacted 27 20
contact_last_updated_timestamp 28 21
has_phone_number 29 22
in_visible_group 30 23
display_name_source 31 26
photo_file_id 32 25 -
is_user_profile 33 24
contact_status_ts 34 27 -
phonebook_bucket_alt 35 28 -
sort_key_alt 36 29 -
contact_presence 37 30
starred 38 31
photo_thumb_uri 39 32
contact_status_icon 40 33
contact_chat_capability 41 34
is_private 42 - -
dirty_contact 43 - -
phonetic_name_style 44 - -
custom_ledlight - 10 -
name_raw_contact_id - 35
カラム数 44個 37個 -

column_name:取得できたカラム名

各端末の列に数字:column名の取得順番(ーはカラムなし)

android developer:AndroidDevelopersのContactsContract.Contactsのページ周辺で記載があったもの。(探し足りないだけで、他の場所に記載あるのかも。)

 

こうして比べてみると、この2台、端末差分なのか、Androidのver差分なのか、結構カラムが違いますね。

ここらへんってメーカの実装に任されてるんですかね。

 

余談ですが、、

SVC33の方で実機でテストした時、パーミッションに記載してるのに「パーミション書けバカ!」ってエラーがでて「え?」ってなったんですが、Android6.0以降は端末側でもアプリに権限許可する操作が必須になったんですって。

そういえば、新しいアプリ入れると権限許可求めるToast出てきますね。

そんな作り作るのも面倒そうだったんで、設定画面⇛アプリから、連絡先へのアクセスを許可して無事事なきを得ました。

 

・感想

なんかデータ構造ごちゃごちゃしててあんまり整理されてない印象だったけど、どうなんですかね。

実際に上で取得した項目、自分の連絡帳でデータの中身見てみても、全部nullで使ってなさそうな項目もあるし。

それとも、全てに深い意味があるけど、私のレベルが足りずに理解できてないだけなのかしらん。

 

ContentProvider周辺の作りがふわっと理解できたので今回はここまで。

ContentProviderでのデータ更新は削除は、やる機会なさそうなので割愛で。

まぁ同じような感じで出来そうだし。

 

Androidの機能関係は、いつか自由にアプリ開発できるようになることを目指して、今後も少しずつ勉強していく予定です。

今回はこのへんで!

【IoT】ガラケー的ブラインドタッチでtwitterでつぶやけるようにしてみた。【MESH】

流行ってますね、IoT。

IoT関連の製品も最近たくさんでてますね。

色々なアイデアや記事を見るうちに、私もIoT的な何かを作りたくなりまして。

Amazon Dash Buttonをハックして遊んでいたのですが(こちら参照)、物足りなくなったので、SONYのMESHというデバイスを使って、twitterへブラインドタッチで文字入力・投稿までできるようにしてみました。

 

  • 1)やりたいこと
  • 2)MESHとは
  • 3)作った構成とプログラム
    • 3-1)入力部分の設計
    • 3-2)入力部分の実装
    • 3-3)受渡部分
    • 3-4)出力部分
  • 4)完成品

 

続きを読む

Amazon Dash Buttonをいじってみてわかったこと

前回までの記事でAmazon Dash ButtonAmazonで買い物できるようにした(笑)わけなんですけど、その過程でわかったこと。

 

できることが少ない!!

Dash Buttonいじってネットワークと接続するボタンとして使うなんて記事は、検索すると沢山でてきます。

で、私もそれを見ていじってみたわけなんですが、、超単純な使い方しかできないんですね。

 

続きを読む

Amazon Dash ButtonでAmazon Dash Buttonを買えるようにしてみた。 詳細②〜ブラウザ操作編

前回の記事で、Dash Buttonからの入力を受け付けるところまで書きました。

今回は、Dash Buttonの押下をきっかけに、ブラウザを操作してDash Buttonを買うところまで。

 

・使用した開発環境(おさらい)

 ・MAX OS Sierra 10.12.4 

 ・JavaScript  

 ・Wireshark 2.2.5

 ・nodejs 7.8.0    

 ・Dash Button for Node

 ・nightmarejs 2.10.0  ←今回説明!!

 

nightmarejsってやつを使うと、こんな感じでブラウザ操作できます。

f:id:beethovenmendelssohn:20170417230806g:plain

続きを読む