Category: develop

  • UIWebViewでloadHTMLStringするときの要点まとめ

    iOSアプリで適宜、UIの一部分をUIWebViewにしてHTMLで処理するようにすると開発効率が劇的に向上するということは間々あって、その中でもこのエントリではUIWebViewを使ってローカルでHTMLをloadHTMLStringするときの注意点のメモ。

    (more…)

  • Android Manifestのuses-sdkの要点だけ

    AndroidManifest.xmlの<uses-sdk>項目について調べた。
    • Androidにおいて、APIレベルでの複数デバイスへの互換性を確保するにはAndroidManifest.xmlの<uses-sdk>を使う。
    • この項目はデフォルトでは存在しない。追記は<manifest>の子要素。
    • android:minSdkVersion、android:maxSdkVersion、android:targetSdkVersionの3属性が設定できる。
    • 値は整数で、Android SDKごとに設定されるAPI Levelの値を指定する。(参照:Android API Levels
    • 特に重要なのはandroid:minSdkVersion。この設定より古いAPI Levelの端末にはインストールされない。これはデフォルトでは1なので、Android Platform 1.0までアプリがサポートしていることになってしまう。ちなみにdocomoが初めて発売したAndroid端末はHT-03Aで、これはAndroid 1.5=API Level 3。
    • android:targetSdkVersionは、システムにこのバージョンでテストしていることを示すもの。OSが様々な互換性のための設定を行うときに利用されるみたい。
    • android:maxSdkVersionというのは設定しないほうが良い。アプリケーションが特定のバージョンより新しいものにインストールされなくできる。

    たとえばXperia arcで開発していると、ListViewの中身がスクロール時に拡大されてしまう問題というのがあるのだけど、この<uses-sdk>項目の設定で解決するようだ。以下のMLだとminSdkVersionを指定してやると解決すると書いてあるけど、上のドキュメントを読んでandroid:targetSdkVersionだけ設定してあげても解決できたみたい。

    参照:http://groups.google.com/group/android-group-japan/browse_thread/thread/78e5b1b66237ee9f

  • Androidの明示的インテントと暗黙的インテントについて要点だけ

    Androidの明示的インテントと暗黙的インテントについて要点だけ

    • Androidアプリのインテントには「明示的インテント」と「暗黙的インテント」の2種類がある。
    • 明示的インテントは呼び出す側から「名指し」でアクティビティを起動する仕組み。
    • 暗黙的インテントは、呼び出す側はやりたい事だけを指定する。呼ばれるアクティビティ側が自分の処理できる内容を把握(宣言)している。
    • あるインテントを複数のアクティビティが処理できる場合、ユーザが選択できる。
  • AndroidでListViewの要素の高さを固定したいときの要点だけ

    AndroidのListViewで、要素(行)の高さを固定したいとき。
    例えば行がLinearLayoutだとして、

    <LinearLayout
      xmlns:android=“http://schemas.android.com/apk/res/android”
      android:layout_width=“fill_parent” android:layout_height=“100dp”>
    <!– SOME UI –></LinearLayout>

    みたいなheightの設定だけでは不十分で、

    <LinearLayout
      xmlns:android=“http://schemas.android.com/apk/res/android”
      android:layout_width=“fill_parent” android:layout_height=“100dp” 
      android:minHeight=“100dp”>
    <!– SOME UI –></LinearLayout>

    みたいにminHeight(最小の高さ)も設定する必要がある。

  • Androidアプリ主要な構成要素について要点だけ

    Androidのアプリにはいくつかの重要な構成要素があって、それぞれ大まかには以下のようにとらえれば良い。

    • アクティビティ:画面操作
    • サービス:バックグラウンド動作
    • ブロードキャストレシーバ:システム監視
    • コンテンツプロバイダ:データベース


    (more…)

  • Apple プッシュ通知とローカル通知の要点だけ

    Apple プッシュ通知とローカル通知の要点だけ

    Notificationとは
    Apple Push Notification(Push通知)とは、iOS上で非アクティブなアプリの状態をユーザに通知するための仕組み。アラート通知を通じてアプリはユーザにアプリの起動を促したり、バッジ(アプリアイコンに付与される数字)の表示、サウンド再生などを行う事ができる。

    Notificationの種類
    iOSで利用できる通知の仕組みは2種類。
    (1)Push Notification(プッシュ通知、リモート通知):サーバからユーザのデバイスに通知を行える。プロバイダ(Provider)と呼ばれるサーバ側の仕組みをサービス提供者が構築し、AppleのApple Push Notification Service(APNs)と通信する必要がある。

    providerとAPNsとの通信については別掲する。

    (2)Local Notification(ローカル通知):当該アプリが動作しているデバイスに限って通知を行える。

    必要iOSバージョン
    (1)Push Notification:iOS 3.0以降
    (2)Local Notification:iOS 4.0以降

    通知できるデータ
    (1)メッセージ
    (2)バッジ
    (3)サウンド:アプリに予め同梱されている必要があり、指定はファイル名で行う。
    (4)その他カスタムデータ:プッシュ通知が届くことは保証されていないので、重要なデータをここに乗せるべきではない。

    ただし、メッセージ、バッジ、サウンドはユーザ設定によってオフにできるので必ず通知されるわけではない。また、リモート通知で送信できるデータは256byte以内に制限されていることに注意。

    その他
    いずれも、通知を受けるためにアプリが起動している必要はない。アプリが起動しているときにも通知を受けたことを知る事は可能。通知を受けるときのパターンは以下の4パターン。それぞれ、内部的にコールされるメソッドとデータ、受取り方が異なるので注意。
    ・アプリが非アクティブで、ローカル通知を受ける
    ・アプリが非アクティブで、リモート通知を受ける
    ・アプリがアクティブで、ローカル通知を受ける
    ・アプリがアクティブで、リモート通知を受ける

    参照
    http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Introduction/Introduction.html%23//apple_ref/doc/uid/TP40008194-CH1-SW1

  • Info.plistから情報取得する方法の要点だけ

    Info.plistの特定の項目の値を参照する場合は:

  • Android ウィジェット開発の要点だけ

    (参照:http://developer.android.com/guide/topics/appwidgets/index.html)

    概要
    App Widgetとは、他のView(典型的にはHome画面)に埋め込まれる小さいアプリケーション。

    構成要素
    (1)AppWidgetProviderInfo:XMLで定義。レイアウトや更新頻度などを定義する
    (2)AppWidgetProvider:updated(onUpdate)/enabled(onEnabled)/disabled(onDisabled)/deleted(onDeleted)なとき、このクラスを介して処理を行う。このほかonReceiveメソッドも利用できるが通常不要。onUpdateはupdatePeriodMillis間隔で呼ばれる。
    (3)View layout:Widgetのレイアウトを定義する。使えるレイアウトやウィジェットに制限がある(RemoteViews)

    手順
    AndroidManifest.xmlにAppWidgetProviderのreceiverを定義する。このときintent-filterはandroid.appwidget.action.APPWIDGET_UPDATE。meta-data要素としてAppWidgetProviderInfoリソースのxmlを指定する。AppWidgetProviderInfoで指定できるのは幅(android:minWidth)高さ(android:minHeight)更新頻度(android:updatePeriodMillis)レイアウト(android:initialLayout)および設定用のActivity(android:configure)。

    App Widget Configuration Activity
    App Widget Configuration Activityは通常のActivityとして定義するが、intent-filterとしてandroid.appwidget.action.APPWIDGET_CONFIGUREを設定する。
    そのうえでこのActivityはAppWidgetProviderInfoリソースで宣言される。WidgetがConfigurationActivityを使うとき、このアクティビティはWidgetの状態/設定を更新する責任がある。これはAppWidgetManagerのupdateAppWidgetメソッドを介して行う。

  • Android Content Providerの要点だけ

    http://developer.android.com/intl/ja/guide/topics/providers/content-providers.html
    1.アプリ間でデータを受け渡す仕組み。これ以外には無い。
    2.android.providerパッケージで標準のContentProviderを見ることができる
    3.permissionを宣言しないといけないものもある
    4.独自のものを作ることも可能。その場合、ContentProviderをサブクラス化する。
    5.データモデルは1行1レコードのシンプルなデータベース
    6.データセットにはURIが対応する。CONTENT_URI定数をチェックすれば分る。
    7.典型的な形式はcontent://com.example.transportaionprovider/trains/122。
     - スキーム部分(content:は固定)
     - ドメイン部分はauthorityを示す。カスタムの場合、Manifestのandroid:authoritiesアトリビュートで宣言されるもの
     - パスの部分はデータ種別。0~複数セグメントがあり得る。
     - 末尾はレコードの_ID値

    以下のブログとかを見ると、Content URIはOSバージョンとかメーカーとかで違っているケースがありそうなので要注意。
    Android 2.2 のカレンダーContentProvier に対応http://d.hatena.ne.jp/rmiya/20100725/1280028729

  • Xcode 4 howto: フレームワークの追加

    Xcode 4で既存のフレームワークを追加する方法です。

    1.Project Navigatorを開く
    2.ターゲットのアイコンを選択
     そうするとSummary/Info/Build Settings/Buid Phases/Build Rulesというタブがエディタエリアに表示される。
    3.”Build Phases”を選択
    4.”Link Binary With Libraries”を選択
    5.”+”を選択
    6.ダイアログでフレームワークの一覧が表示される。ここから選択して”Add”
    7.Project Navigatorにフレームワークが追加されます。

    ちなみにAdd Files…でフレームワークのフォルダを直接指定しても追加されるみたい。