ラベル tutorial の投稿を表示しています。 すべての投稿を表示
ラベル tutorial の投稿を表示しています。 すべての投稿を表示

2014年7月22日火曜日

UnityでEclipse用にエクスポートしたプロジェクトのアップデート方法

UnityでコーディングしてEclipseでAPK作成の方法は前回書いたとおりだが、今回は、修正点をフィックスしたり機能追加したりでアップデートするときにはどうしたらいいのか、というお話。

また一からインポートしたりするとせっかく修正したAndroidManifest.xmlが元に戻るので手で修正しないといけない。
でも毎回修正した点を漏れなく修正するのってめんどくさいし、漏れそう。

というわけで、どうするかというと、エクスポートしてできたフォルダのassets/binの直下にあるDataという名前のフォルダを入れ替えればOK。

念のため古いDataフォルダはどこかに退避させてassets/binの下には何もない状態にしておいて、新しいDataフォルダをコピーするのが一番安全。

2014年7月20日日曜日

UnityでコーディングしてからEclipseでAPK作成する際にやったこと

Unityで作ったものをAndroid用にエクスポート(方法はググってください)できますが、
そのエクスポートされたものをそのままEclipseにインポートしても、
そのままだとエラーが出て動かなかったので、その対処方法を紹介します。

ビルドはできますが実機やエミュレーターで動かそうとしたら、
下のようなExceptionが吐かれます。
java.lang.RuntimeException: Unable to start activity ComponentInfo{*.*.*/com.unity3d.player.UnityPlayerProxyActivity}: android.content.ActivityNotFoundException: Unable to find explicit activity class {*.*.*/com.unity3d.player.UnityPlayerNativeActivity}; have you declared this activity in your AndroidManifest.xml?
(注)「*.*.*」はアプリのパッケージ名です。
要するに、Activityが見つからないけどAndroidManifest.xmlに書いとるんけ、というエラーです。

そんなとき、AndroidManifest.xmlの
<activity android:label="@string/app_name" android:screenOrientation="portrait" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale" android:name="*.*.*.UnityPlayerNativeActivity">
(注)「*.*.*」はアプリのパッケージ名です。
の赤文字の部分を
<activity android:label="@string/app_name" android:screenOrientation="portrait" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale" android:name="com.unity3d.player.UnityPlayerNativeActivity">
に変えたらOKです。

となると、指定のパッケージの直下にUnityPlayerNativeクラスができているけど、
これは意味ないってことですな。

ホンマかいな。

2013年8月18日日曜日

AndroidアプリにParse.comのプッシュ通知機能を実装する方法+送信する方法

「グロースハック(growth hack)」とかいう流行りつつある単語に乗せられて、プッシュ通知(Push Notification)を使ってみようと思い立ち、この間Facebookに買収されたBaaS(Backend as a Service)のParse.comが提供するプッシュ通知機能を、自作クソゲー「ギリジャン!」に乗せてみたのでそのメモ。
というか、https://parse.com/tutorials/android-push-notificationsの必要部分を抜粋しての和訳。

なお、既にParse.comにアプリの登録をしてることを前提としています。

【実装編】

■AndroidManifest.xml

1.サービス
<service android:name="com.parse.PushService" />
<receiver android:name="com.parse.ParseBroadcastReceiver">
  <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
    <action android:name="android.intent.action.USER_PRESENT" />
  </intent-filter>
</receiver>

2.パーミッション
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />

■Activityクラス

1.初期化
onCreateメソッドに
Parse.initialize(this, "アプリID", "クライアントキー");
アプリIDもクライアントキーもParse.comの画面(下の画像)に表示されているものを使う。



2.通知を受信する部分の実装
onCreateメソッドに
PushService.setDefaultPushCallback(this, ほにゃららActivity.class);
ParseInstallation.getCurrentInstallation().saveInBackground();
「ほにゃららActivity.class」には、端末上に表示された通知をクリックしたときに表示させたいActivityクラスを書く。
インストール時に、アプリ名(言語によってアプリ名が違う場合はその言語に応じたアプリ名)とかアプリのバージョンとかタイムゾーンがParse.comに送信されるけど、それ以外にも情報がほしければ実装可能。
今回は試しに実装しただけなので省略。

3.トラッキングの実装
onCreateメソッドに
ParseAnalytics.trackAppOpened(getIntent());
通知からアプリが開かれたかどうかをトラッキングしたければ書く。
(普通はトラッキングしたいはず。)

【送信編】

あとはParse.comの管理画面から通知をするだけ。

まず、通知するページにアクセスして、Send a pushボタンをクリック


次に、通知する内容を登録して、Send Notificationボタンをクリック。


実装も送信もめっちゃ簡単。

ただし、何に使うねんと言われてもよく分かりまへん。

2013年5月14日火曜日

PhoneGapのWebIntentプラグインを2.7.0に対応させてみた。

PhoneGapのプラグインはたくさんあっていいけど、PhoneGap本体の頻繁なアップデートに追随していないものもいっぱいあってイマイチ。

ちょっとしたアップデートならいいけど、プラグインのアーキテクチャがゴロッと変わったりしてるのに放置されたりするのさすがにどうかと思うわ。

それはさておき、これまでPhoneGap2.3.0を使っていたのを現時点(2013/05/14)で最新の2.7.0にしたのを機に、今使っているプラグインをそれに対応させたので、せっかくなので公開しておきます。 

まずはWebIntentプラグイン。 その名のとおりIntentを発行するプラグインで、僕はアプリからブラウザを起動するのに使ってます。

https://github.com/kyosuke25/phonegap-plugins/tree/master/Android/WebIntent

どうぞご自由にお使いください。

2012年3月10日土曜日

Facebook SDK for Android を使って、ダイアログを使わずにウォールにポストするコード例

Facebook SDK for Android に同梱されているサンプルには、ウォールにポストする方法としてダイアログを一旦表示させてそこにポスト内容を書かせてから投稿、というパターンしか見つかりませんでした。

でも、「ねちゃったー」みたいに何かしらの動作により裏で自動的にポストがしたい場合には、そのサンプルだと実現できません。

なので調べましたが、どんぴしゃのものが見つかりませんでした。

というわけで、いろんなサンプルを見ながら試行錯誤しているうちに動いたので、備忘録および共有のために書きました。

要は、SDKのAsyncFacebookRunner#requestというメソッドを叩けばいいのですが、ちゃんとした説明がない!
検索して見つけたサンプルも前のバージョンでパラメーターの数が違ったりとか。

お好きなようにお使いください。

なお、SDKのバージョンナンバーが見当たらないのですが、2012/3/10 時点で最新のバージョンを使ってます。


public class ReturnActivity extends Activity {

    Facebook facebook = new Facebook(Constants.FACEBOOK_APP_ID);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.thanks);

        FacebookSessionStore.restore(facebook, this); 

        AsyncFacebookRunner runner = new AsyncFacebookRunner(facebook);
        Bundle params = new Bundle();
        params.putString("message", "Activityからポストするテスト");
        params.putString("access_token", facebook.getAccessToken());
        runner.request("me/feed", params, "POST", new RequestListener() {

          @Override
            public void onMalformedURLException(MalformedURLException e, Object state) {
                e.printStackTrace();
            }

            @Override
            public void onIOException(IOException e, Object state) {
                e.printStackTrace();
            }

            @Override
            public void onFileNotFoundException(FileNotFoundException e, Object state) {
                e.printStackTrace();
            }

            @Override
            public void onFacebookError(FacebookError e, Object state) {
                e.printStackTrace();
            }

            @Override
            public void onComplete(String response, Object state) {
                // do nothing.
            }
        }, null);
    }

2012年2月24日金曜日

Android標準ブラウザ+Ajax Upload(fileuploader.js)でファイルアップロード

Androidの標準ブラウザは <input type="file" .... ファイルアップロードができるとかできないとか、色々情報があったのでとりあえず残しておくことにしました。

結論としては、できます。
(Androidのバージョンによるっぽく、エミュレーターでは2.2以上でOKでした。)

で、それじゃしょーもないので、Ajax Uploadを使ってみようと。
Ajax Uploadは <input type="file" .... を使ったファイルアップロードをajaxを使って非同期で実行できるライブラリです。

結論としては、そのままじゃ無理。

どうも、fileSizeとかsizeでファイルのサイズが取れないらしく(サイズが0とみなされる)、ファイルサイズチェックの部分でエラー判定されます。

なので、多分そのエラーチェックが呼ばれる場合に本当にサイズが0のファイルを扱うことになるのはレアケースでしょうから、無理やりサイズを入れる変数に適当な数字を入れました。
そしたら動きました。

以上です。

追記(2012/3/10)
2.2の方でもできない場合があり、ブラウザを変える(標準ブラウザ→Dolphin)とOKという報告もありました。

2012年1月11日水曜日

アプリから管理者名でFacebookページに投稿するための超簡単なaccess token取得方法

アプリからFacebookページに投稿する方法は、個人名での投稿でも管理者名での投稿でも方法は同じですし、調べたらそれなりの適解がいっぱい出ているので省略。

ここで書くのは、FacebookページにそのFacebookページの管理者名で投稿するための準備としての、access tokenを取得する超簡単な方法です。


検索して出てくる多くの記事では、

  • これをするためだけのコードを書く。
  • サーバーにアップする。
  • 動かす。
  • 表示されたページのURLのパラメータにあるaccess_tokenの部分をコピー

ってやるけど、めんどくさくないですかね。


一度、やっとこさ見つけたどこかのページを参考にしてやったものの、久々にその作業が必要になったときにその方法が思い出せず、さらにそのとき参考にしたページが見つからず、長時間ハマりまくったので備忘録として残すことにしました。

以下、その手順です。
(注)先にアプリを作っておいてください。(このやり方も省略)

  1. Facebookの「Graph API Explorer」にアクセスします。
  2. 画面右上のプルダウンから予め作っておいたアプリを選択します。
  3. 2のプルダウンのちょっと下にある「アクセストークンを取得する」ボタンを押します。
  4. ダイアログが開くので、そこの「Extended Permissions」を押して、「manage_pages」と「offline_access」と「publish_stream」のチェックを入れて、「Get Access Token」ボタンを押します。
  5. ダイアログが閉じて別のウインドウが開くので、そこの「許可する」ボタンを押します。 (※1)
  6. ウインドウが閉じたら、元のウインドウに戻って、3のボタンのちょっと下にある「accounts」というリンクを押します。(※2)
  7. 入力欄の下にAPIからの返り値として、自分が管理しているすべてのFacebookページのページ名とかページIDとかがズラズラっと表示されるので、そこの中からアプリを使って管理者名で投稿したいFacebookページを探して、そのaccess_tokenの値をコピーします。

※1 ブラウザの設定で、ポップアップウィンドウを許可してないとダメかも。
※2 「送信」ボタンの左にある入力欄に最初から表示されているURLの末尾に、「/accounts」を追記して「送信」ボタンを押してもOK。

おしまい。

2011年12月18日日曜日

Twitter4j-2.2.xを使ったツイートのコーディング例

以前、こちらのエントリーでTwitter4jの使い方を説明しましたが、2.1系から2.2系で使い方が変わったので、内容を修正しました。

Twitter4j-2.2.xを使ったOAuth認証のコーディング例の続き・・・

■開発環境
・JDK 6

・Android SDK Tools, Revision 13(前のエントリーは6でした。)
・Twitter4j-2.2.4(前のエントリーは2.1.3でした。)


■コーディング例
(移行する場合もあると思うので、2.1系は紫色にして、コメントアウトしています。
初めて実装する場合は、青字と赤字だけでOKです。)

Twitter4j-2.2.xを使ったOAuth認証のコーディング例

【セルフPR】
・KOTOO(http://kotoo.in
という写真のまとめサイトを始めました。見てくれると嬉しいです。

---

以前、こちらのエントリーでTwitter4jの使い方を説明しましたが、2.1系から2.2系で使い方が変わったので、内容を修正しました。

Twitterクライアントを作るに当たって、ラクしてxAuthなんて使わずにちゃんとOAuthを使いましょう、という内容です。

でもいざ探すと、Twitter4jとSignpostの併用なんていう気持ち悪いコーディングや、返ってきたaccess_tokenをユーザーにメモらせたり、JavaScriptで解析したりするコーディング等、もうちょっと工夫しようよ的なサンプルばっかりで使い物にならなかったので、Twitter4jのみを使ってグチャグチャながらも自分で作りました。
(このコードも気持ち悪いんですが。)

■開発環境
・JDK 6
・Android SDK Tools, Revision 13(前のエントリーは6でした。)
・Twitter4j-2.2.4(前のエントリーは2.1.3でした。)

■前提
1.アプリケーション登録が完了している。(※)
※OAuthを使う場合、クライアントアプリであっても、
「ブラウザアプリケーション」として登録する。
2.Twitterに飛ぶためのボタン1つだけのActivity(以下、Activity1)と、
Twitterの認証画面を表示するActivity(以下、Activity2)の構成(※)。
※Activity2用に、WebViewを使ったレイアウトをあらかじめ作成しておく。
このレイアウトに設定したWebViewは、WebView01というIDにしています。

■注意点
1.CALLBACK URLには適当な文字列を設定しておく。
Twitterのアプリ登録で指定したCALLBACK URLとは別にしておいた方が混乱しない。
2.下記コードの中で「oauth_verifier」という文字列が出てくるが、
これはaccess_tokenとaccess_token_secretを付与してもらうためのキー。
3.例外処理は簡略化のために省いています。

■コーディング例
(移行する場合もあると思うので、2.1系は紫色にして、コメントアウトしています。
初めて実装する場合は、青字と赤字だけでOKです。)

2011年7月31日日曜日

Facebookアプリのアクセス許可ダイアログの表示方法

最初から言い訳しますが、Facebookアプリと言ってますが正しい用語が分からないです。
Facebookページに追加するアプリのことです。
Canvas Pageとも呼ぶんですかね。
親切な人、教えてくださいな。

Facebookアプリを使うときに、そのアプリに対してアクセス許可をしていなければダイアログが出ますが、
1.新しいウインドウが開いて、そこに承認画面が表示されるタイプ
2.ページ内にダイアログのレイヤー(lightbox的なカンジ)が表示されて、そこに承認画面が表示されるタイプ
の2種類あります。

言葉で説明するのは難しいので、実際に見てください。
1は、画面左にあるメニューの「承認方法テスト(別ウインドウに表示版)」から、
2は、「承認方法テスト(ページ内に表示版)」から試してください。
このブログのFacebookページ

1はポップアップブロックに引っ掛かってしまうという大弱点がありますし、
Facebook公式アプリの認証が2なので、できれば2にしたいと思い、
調べたけどなかなか分からないので試行錯誤を重ねまして、その成功したコードを紹介します。
(Javascript SDKを使いました。)

1のコード:
<div id="fb-root"></div>
<script src="http://connect.facebook.net/ja_JP/all.js"></script>
<script type="text/javascript">
  FB.init({
    appId  : 'アプリのApp ID',
    status : true,
    cookie : true,
    xfbml  : true
  });
  FB.getLoginStatus(function(response) {
    if (response.session) {
      // 許可済みの時の挙動
    } else {
      FB.ui({
        method: 'permissions.request', // 
        display: 'popup'
      },
      function (response) {
        if(response.session){
          // 許可されたときの挙動
        }else{
          // 許可されなかったときの挙動
        }
      });
    }
  });
</script>
2のコード:
<div id="fb-root"></div>
<script src="http://connect.facebook.net/ja_JP/all.js"></script>
<script type="text/javascript">
  FB.init({
    appId  : 'アプリのApp ID',
    status : true,
    cookie : true,
    xfbml  : true
  });
  FB.getLoginStatus(function(response) {
    if (response.session) {
      // 許可済みの時の挙動
    } else {
      FB.ui({
        method: 'auth.login',
        display: 'iframe' // pageでもOK。違いはよく分からんw
      },
      function (response) {
        if(response.session){
          // 許可されたときの挙動
        }else{
          // 許可されなかったときの挙動
        }
      });
    }
  });
</script>

違うのは赤字の部分です。
<script></script>の部分は、<head>内に入れてもOKですが、
離れてるのもイヤなんで<body>に置いてます。
</body>の直前に入れるのが描画上良いんでしたっけね。
まあ細かいことは置いておきます。

で、普通考えればdisplayだけ変えればいいような気がしますが、違ったんです。
auth.loginは使われなくなって、permissions.requestを代わりに使えという話もあるんですが、
permissions.requestはバグのせいか何かでdisplayがpopupしか使えないみたいです。
なので、auth.loginを使っています。(いずれpermissons.requestが使えるんでしょうかね。)

リファレンスが公式にも少なくて手探り過ぎて笑えます。
これ、仕事でやってる人は大変そう。

2011年7月4日月曜日

freelancer.comの使い方(発注先決定・支払編)

freelancer.comの使い方の後半です。
前回の「freelancer.comの使い方(発注先選定編)」はこちらから

案件の公開、発注先の選定に比べると用語が独特で分かりにくかったです。

では発注先の決定から支払の手順です。

1.
入札者の精査をして、発注しようという人を見つけたら、
「AWARD PROJECT」ボタン(画像の赤丸部分)を押します。
ちなみに、複数人に発注できるようです。
当然その分費用は掛かりますが。


2.
すると、入札者リストの上部に下の画像のような表示が出てきます。
ここで、まず「Create Milestone」(画像の赤丸①)をクリックします。
すると、その下に画像の赤丸②のような表示が出てきます。
ここに、フリーランサーが指定している「Milestone」の金額(※)を入力して、
その横にある「CREATE MILESTONE」ボタンを押します。
※「Milestone」は入札額の下に表示されています。
 下の画像の場合では「Fully paid」となっていますが、
 これは「Milestone」を支払済であることを示しています。

なお、「Milestone」とは前払金を意味する用語で、
発注者が成果物だけ受け取って逃げる事故と、
フリーランサーがお金だけ受け取って逃げる事故を避ける仕組みです。
一旦、「Milestone」を発注者からfreelancer.comが預かり、
案件終了後に発注者からの指示でフリーランサーに渡される、という流れです。
「Milestone」の金額は人によってまちまちで、
フリーランサーごとに入札額の下(画像の赤丸③)に表示されています。
表示されていない場合は「Milestone」は不要、という意味です。
一般的なmilestoneとは意味が違うのでご注意を。

「Milestone」の支払がないと案件に着手してくれないので、
発注したら早々に支払ったほうが良いと思います。


3.
案件がスタートしたら、後は直接案件の進捗や成果物についてやり取りをします。
今回はロゴの作成を依頼したのですが、
コンセプトの伝達から微修正含めて10往復くらいやり取りしました。

で、成果物に納得ができれば費用の支払をします。
「Transfer Funds」(画像の赤丸①)をクリックします。
すると、その下に画像の赤丸②のような表示が出てきます。
ここに入札金額と同じ金額を入力して、その横にある「TRANSFER FUNDS」ボタンを押します。

「Milestone」で全部充当できればそのまま支払は完了します。
足りない場合は別途Paypal等で入金した上で支払います。


4.
支払が完了すると案件終了となり、案件公開時に支払った5ドルが返金されます。

これがfreelancer.comのおおまかな使い方です。
もし使うことがあれば、その時は参考にしてもらえれば幸いです。

2011年6月30日木曜日

freelancer.comの使い方(発注先選定編)

先日、ひょんなことから「freelancer.com」を使うことがあり、
freelancer.com用語がよく分からずしょーもないことで時間を食ったので備忘録。
freelancer.comの日本語での使い方解説記事が見当たらなかったので、
「発注先選定編」「発注先決定・支払編」の2部構成でまとめます。
(ですが、ユーザー登録や入金等、別に困らなさそうなところは端折ります。)

まずはfreelancer.comの使い方前半の発注先選定から。
(後半の「freelancer.comの使い方(発注先決定・支払編)」はこちらから。)

0.
freelancer.comは簡単に言うと、案件を公開して世界中のフリーランスに入札してもらい、
誰に発注するかをプロジェクトの完了と費用の決済まで面倒を見てくれるサービスです。

1.
まずログイン。facebookのアカウントでログインできます。


2.
次に案件の登録。
「Post Project」をクリックします。見にくいですが下の画像の赤丸の場所です。


3.
案件の概要を英語で入力します。
詳しく書くに越したことはありませんが、
「この画像をレタッチして」とか「このサービスの営業して」みたいに、
かなり適当に書いてるものが多くあるので、
それほど詳細に書かなくても大丈夫っぽいです。
他には
・案件対応に必要なスキル
 Category(画像の赤丸①)を選ぶと、必要なスキル(画像の赤丸②)が自動的に選択されます。
 プロジェクトの内容に応じてスキルを追加したり削除したりできます。
・予算
 最低30ドルからで範囲指定もできるし、ピンポイントで指定もできます。
・入札期間
 デフォルトが5日です。
・その他オプション
 目立たせたり、誰が入札してるのかを他の人から見えなくしたりできます。
 追加費用が掛かるし、試してませんので詳細不明。


4.
入力内容を確認します。
この内容で良ければ「POST PROJECT NOW」を押します。
ただ、プロジェクトを公開するにはデポジットとして5ドル必要です。
これはプロジェクトが完了したタイミングで戻ってきます。
画面右上の「Balance」に表示されている金額が5ドルに満たなければ入金画面に遷移します。
(入金にはPaypalが使えるので、説明は省略します。)


5.
あとは入札(bid)を待つのみです。
入札の一覧は「Dashboad」→「My project」で開く画面に表示される、
プロジェクト名のリンク(画像の赤丸部分)をクリックすれば確認できます。
(画像では「Past Project」タブにプロジェクトが表示されていますが、
 公開中のプロジェクトは「Open for Bidding」に表示されます。)


6.
プロジェクトに対する入札一覧は下の画像のような画面に表示されます。
各入札の内容を見たり、入札をしてきた人にメッセージを出したりできます。
また、気に入らなければ「Hide Bid」を押すと消えます。(厳密には「Hidden Bids」タブに移動します。)


7.
プロジェクトの公開時に設定した期限まで入札内容を吟味します。
(気に入った人が見つかれば期限前に決定することも可能です。)
なお、設定した期限までに発注先を決めないと、
デポジットの5ドルは没収されますのでご注意を。

発注先選定はこれまです。
発注先決定・支払編に続きます。

2011年1月24日月曜日

いわゆる、魔法の五行(2011年1月24日改訂版)

ちなみに今はもう古いかもしれませんのでご注意を。

なんか、魔法の五行のエントリーが急に増えたこともあり、
5行じゃなくなった魔法の五行について、備忘録代わりに記事化。

ro.ril.oem.ecclist=110,118,119
ro.ril.enable.a52=0
ro.ril.enable.a53=1
ro.ril.hsdpa.category=8
ro.ril.hsupa.category=5
ro.ril.hsxpa=2
ro.ril.fast.dormancy.timeout=3
ro.ril.enable.sbm.feature=1
ro.ril.disable.fd.plmn.prefix=23402,23410,23411
ro.ril.enable.sdr=0
ro.ril.oem.mosms.mode=1
ro.telephony.default_network=2
ro.ril.def.agps.mode=2
ro.ril.def.agps.feature=2
ro.ril.disable.power.collapse=1

以上です。

2010年9月21日火曜日

AppWidgetの背景色に透過率(アルファ値)を設定する方法

Androidアプリ開発でAppWidgetに限らないけど、色の透過率を設定する方法です。

色の設定はRGBで#ffffffという書き方で設定しますが、
#の直後に0x00~0xff(0(透明)~255(不透明))で透過率を設定します。
例えば、#80ffffffという具合。

あまりに常識的すぎるのか、全然説明が見つからなくて数時間ハマりました。

同じような人が出ないように、自分の無知を恥じながら残しておきます。

2010年9月13日月曜日

ListViewにCheckBoxがあると行選択できなくなる問題の最速解決方法

【セルフPR】
・ねこぱβ(http://cat.picparks.com
・いぬぱβ(http://dog.picparks.com
も見てくれると嬉しいです。

---

レイアウトに追加したCheckBoxのfocusable属性の値をfalseにするだけ。
本当にそれだけで解決します。

下記記事を書かれたトム・スミスさんに大感謝です。
参考記事:ListView についての覚書

2010年8月31日火曜日

Froyo以前でも動作するアプリをa2sd対応する方法

【セルフPR】
・ねこぱβ(http://cat.picparks.com
・いぬぱβ(http://dog.picparks.com
も見てくれると嬉しいです。

---

この方法を使えば、わざわざOSのバージョンごとに、
設定を変えたアプリを用意する必要はありません。

Eclipseで開発をしていることを前提としています。

Androidアプリを作っていて、
1.6や2.1にも対応させながら、
2.2にも対応させたい場合は多々あるし、
今後も当分はそのニーズは消えないでしょう。

かといって、ビルドのターゲットを1.6にしていては、
AndroidManifest.xmlにinstallLocationが書けないので、
a2sdに対応できない。

今後ますます2.2が普及していく過程で、
それはとてもカッコ悪い。

なので、1.6、2.1対応させながら、a2sd対応させる方法を紹介します。

2010年8月30日月曜日

いわゆる、魔法の五行

五行じゃなくなった魔法の五行について、
あらためてこちらのエントリーに書きました。


/system/build.propに、
以下の5行を追加するとバッテリーの持ちを良くなるとか。
ro.ril.oem.ecclist=110,118,119
ro.ril.enable.a52=0
ro.ril.enable.a53=1
ro.ril.fast.dormancy.timeout=3
ro.ril.enable.sbm.feature=1

ちなみに、既にbuild.propに記載されているものもある(※)ので、
その辺り確認しながら追記した方が良いです。

※OpenDesireでは2番目と3番目が既に記載あり。

2010年8月23日月曜日

X06HTのルート化手順における、きっとハマる4つの注意点

【セルフPR】
・ねこぱβ(http://cat.picparks.com
・いぬぱβ(http://dog.picparks.com
も見てくれると嬉しいです。

---

1.r6-desire-root-alt.zipにrecovery-windows.batがない!
ないんです。
なので、代わりにr5-desire-root-alt.zipを使うと良いです。
見つからないかもしれないので、手っ取り早くダウンロードできるよう、
ここ(Google Docsにつながります。)に置きましたので、
ご自由に。

2.r6-desire-root-alt.zipが見つからない!
ファイルが置いているダウンロードサービスの制限で、
ダウンロードができないことがよくあります。
その場合は、下から落としてください。
ここ(Google Docsにつながります。)

3.Android SDKにusb_driverがない!
ないんです。
なので探してください。
見つからないかもしれないので、手っ取り早くダウンロードできるよう、
ここ(Google Docsにつながります。)に置きましたので、
ご自由に。

4.デバイスマネージャでAndroid Phoneが認識されない!
実はどこにでも書いてますが、久々にやると忘れます。
下記の記述を、usb_driverフォルダにあるandroid_winusb.infに追記。
場所はよく似た記述がある場所です。
; HTC Desire
%SingleAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87
%CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87&MI_01

2010年8月17日火曜日

Twitter4j-2.1.xを使ったツイートのコーディング例

【セルフPR】
・ねこぱβ(http://cat.picparks.com
・いぬぱβ(http://dog.picparks.com
も見てくれると嬉しいです。

---

Twitter4jは2.1系から2.2系で使い方が変わったので、2.2系をお使いになる場合は、こちらの記事をご覧ください。

Twitter4jを使ったOAuth認証のコーディング例
もしくは、Twitter4jを使ったxAuth実装のコーディング例の続き・・・

OAuthにせよxAuthにせよ、requset_tokenとrequset_token_secretを取得すれば、
ツイートする部分については違いがないです。

今見たら冗長っぽい記述がありますが、そのままを載せます。

■開発環境
・JDK 6
・Android SDK Tools, Revision 6
・Twitter4j-2.1.3

■コーディング例

Twitter4j-2.1.xを使ったOAuth認証のコーディング例

【セルフPR】
・ねこぱβ(http://cat.picparks.com
・いぬぱβ(http://dog.picparks.com
も見てくれると嬉しいです。

---

Twitter4jは2.1系から2.2系で使い方が変わったので、2.2系をお使いになる場合は、こちらの記事をご覧ください。

Twitterクライアントを作るに当たって必要な認証方法として、
前のエントリで書いたように、よりセキュアな認証方法であるOAuth。

Twitter4jとSignpostの併用とか訳の分からないコーディングや、
返ってきたaccess_tokenをユーザーにメモらせたり、
JavaScriptで解析させたりするコーディング等、
クライアントアプリケーションだけで処理が閉じた、
まともなコーディング例が見つからずハマりまくったので、
僕のレベルで考えうるベストのコーディング例を紹介します。

説明が超ヘタクソなので、実際のソースを
TwitterLogin.java
TwitterSetting.java
に置いておきます。
ご自由にどうぞ。
※Dropboxにリンクしています。
ご覧になれない方がいらっしゃるようなので、
欲しい方はTwitter(@ky25_android)でメッセージください。

また、この実装を利用したアプリのソースを丸ごと公開しておりますので、
こちら
からダウンロードしてみてください。

■開発環境
・JDK 6
・Android SDK Tools, Revision 6
・Twitter4j-2.1.3

■前提
1.アプリケーション登録が完了している。(※)
※OAuthを使う場合、クライアントアプリであっても、
「ブラウザアプリケーション」として登録する。
2.Twitterに飛ぶためのボタン1つだけのActivity(以下、Activity1)と、
Twitterの認証画面を表示するActivity(以下、Activity2)の構成(※)。
※Activity2用に、WebViewを使ったレイアウトをあらかじめ作成しておく。
このレイアウトに設定したWebViewは、WebView01というIDにしています。

■注意点
1.CALLBACK URLには適当な文字列を設定しておく。
Twitterのアプリ登録で指定したCALLBACK URLとは別にしておいた方が混乱しない。
2.下記コードの中で「oauth_verifier」という概念が出てくるが、
これはaccess_tokenとaccess_token_secretを付与してもらうためのキー。

■コーディング例