TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String number = telephonyManager.getLine1Number();
String iccid = telephonyManager.getSimSerialNumber();
Log.d(getClass().getSimpleName(), "TelephoneNumber " + number);
Log.d(getClass().getSimpleName(), "ICCID " + iccid);
//R.string.tel_formatの中身は+%1$s %2$s-%3$s-%4$s
String internationalTelephoneNumber =
getString(R.string.tel_format,
iccid.substring(2, 4),
number.substring(1, 3),
number.substring(3, 7),
number.substring(7, 11));
Log.d(getClass().getSimpleName(), "InternationalTelephoneNumber " + internationalTelephoneNumber);
良い感じに取得できた。
2013年2月8日金曜日
Androidで国番号の取得
仕事でSimの電話番号と国コード(よく見る+81とか)を取得する必要があって
そこそこ悩んだのでメモ。
2012年12月19日水曜日
Facebook graph Apiで写真URLつき投稿
Facebookへの写真URLつき投稿。
自分のFeedに流れるやつです。
写真をクリックすると写真が貼ってある外部ページに飛びます。
link要素を付与するとシェア扱い。
pictureを無効にすると普通のFeedに。
この内容だと写真が外部にあるものになりますが、Facebook上のアルバムにUPするためには別途画像データをバイナリで渡す必要があります。
getContentsByGet部分は省略しました。内容はHttpClientでPostしているだけです。
自分のFeedに流れるやつです。
写真をクリックすると写真が貼ってある外部ページに飛びます。
link要素を付与するとシェア扱い。
pictureを無効にすると普通のFeedに。
この内容だと写真が外部にあるものになりますが、Facebook上のアルバムにUPするためには別途画像データをバイナリで渡す必要があります。
Builder urlBuilder = new Builder();
urlBuilder.scheme("https");
urlBuilder.authority("graph.facebook.com");
urlBuilder.path("/me/feed");
urlBuilder.appendQueryParameter("format", "json");
urlBuilder.appendQueryParameter("method", "POST");
urlBuilder.appendQueryParameter("message", message);
urlBuilder.appendQueryParameter("link", params.url);
urlBuilder.appendQueryParameter("picture", imageUrl);
urlBuilder.appendQueryParameter("access_token", facebookToken);
String url = urlBuilder.toString();
String contents = getContentsByGet(url);
getContentsByGet部分は省略しました。内容はHttpClientでPostしているだけです。
Android4.0でタッチフォーカス(マニュアルフォーカス)実装
Androidのカメラアプリでのオートフォーカス実装は何度もやったけど
マニュアルフォーカス(MF)は未経験でした。
デフォルトカメラアプリには往々にしてMFがありますが マーケットアプリにはほとんどない現状。
カメラアプリを貪っていると唯一lgcameraが実装してました(他にもいっぱいあると思うんですが見つけられなかった。。。)
でも2.XシリーズだとMFが動かずICSだとMFが効く。
ということはネイティブでMFやるにはICSが必要ということか。
勉強不足を実感しました。。。
調べたところCAMERAクラスのsetFocusAreasを利用することでcamera#autofocusのfocusのエリアを変えられる模様。
touchイベントからとったview座標をプレビューの座標に変換。
デフォルトカメラアプリには往々にしてMFがありますが マーケットアプリにはほとんどない現状。
カメラアプリを貪っていると唯一lgcameraが実装してました(他にもいっぱいあると思うんですが見つけられなかった。。。)
でも2.XシリーズだとMFが動かずICSだとMFが効く。
ということはネイティブでMFやるにはICSが必要ということか。
勉強不足を実感しました。。。
調べたところCAMERAクラスのsetFocusAreasを利用することでcamera#autofocusのfocusのエリアを変えられる模様。
touchイベントからとったview座標をプレビューの座標に変換。
座標をRectに変換。
weight(よく分からないけど1000で良い感じになった)と一緒にList<Camera.Area>型でCamera.ParametersのsetFocusAreasに渡してやればフォーカスエリアの変更完了。
Viewには何の変化もないけど、同じタイミングでautofocus(null)を呼んであげると
フォーカスエリアが変化していることが分かり易いはず。
ただし、端末のカメラが対応していないと落ちるので
Camera#getParameters().getMaxNumFocusAreas()>0
のときだけ使うようにしましょう。
ちなみに同じ方法で測光を行うsetMeteringAreasも使えます。
2012年11月20日火曜日
AndroidからInstagramへの連携2
先日のInstagramへの連携が非公式過ぎるので考えなおしました。
あんざいさんの http://y-anz-m.blogspot.jp/2010/03/android-action.html を参考に暗黙的Intentで呼ばれるアプリ一覧を取得し そこからパッケージ名、クラス名を取得してInstagramを起動しています。
あんざいさんの http://y-anz-m.blogspot.jp/2010/03/android-action.html を参考に暗黙的Intentで呼ばれるアプリ一覧を取得し そこからパッケージ名、クラス名を取得してInstagramを起動しています。
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setData(imageUri);
intent.setType("image/jpg");
intent.addCategory(Intent.CATEGORY_DEFAULT);
PackageManager pm = getPackageManager();
List resolveInfos = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
String className = null;
String packegeName = null;
for(ResolveInfo info :resolveInfos){
if("Instagram".equals(info.loadLabel(pm)) || "instagram".equals(info.loadLabel(pm))){
className = info.activityInfo.name;
packegeName = info.activityInfo.packageName;
break;
}
}
if(className != null && packegeName != null){
intent.setClassName(packegeName, className);
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/jpg");
intent.putExtra(Intent.EXTRA_STREAM, imageUri);
startActivity(intent);
}else{
//Instagramがない場合の処理
}
これなら堂々と使えるかな。
2012年11月16日金曜日
AndroidからInstagramへの連携
InstagramにOauth認証して写真をアップロードするアプリを作ろうとしたんですが
Instagram DeveloperによるとアップロードのAPIは
提供されていない模様。
(見つけてないだけ?知っている方いれば教えてください)
やむなく暗黙的Intentで投げるしかなくなったわけですが、Intent.ACTION_SENDでstartActivityしたら 出るわ出るわ違うアプリがww
2〜3個ならまだしもスクロールしないとInstagramが出てこないのは問題なのでいろいろと試したところ
でInstagramを直接起動して画像をUriで渡せました。
ただし、トリミングから始まります。
これしかないのか。。。非公式だからいつ使えなくなるかも分かりません。。。
iOSだとURLスキーマで良い感じに呼べるんですが、InstagramさんAndroidもお願いします。
(見つけてないだけ?知っている方いれば教えてください)
やむなく暗黙的Intentで投げるしかなくなったわけですが、Intent.ACTION_SENDでstartActivityしたら 出るわ出るわ違うアプリがww
2〜3個ならまだしもスクロールしないとInstagramが出てこないのは問題なのでいろいろと試したところ
Intent intent = new Intent();
intent.setClassName("com.instagram.android", "com.instagram.android.activity.MainTabActivity");
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/jpg");
intent.putExtra(Intent.EXTRA_STREAM, imageUri);
//例外処理は省略してます
startActivity(intent);
でInstagramを直接起動して画像をUriで渡せました。
ただし、トリミングから始まります。
これしかないのか。。。非公式だからいつ使えなくなるかも分かりません。。。
iOSだとURLスキーマで良い感じに呼べるんですが、InstagramさんAndroidもお願いします。
2012年11月14日水曜日
getIntent()で取得する値を更新する
AのActivityに留まったままAlarmManagerからAへの新しいIntentを複数回
投げたところ、getIntet()で取得するIntentがActivity起動時のものから変わらない。
という事象が発生した。
BroadcastReceiverからはFLAG_ACTIVITY_NEW_TASKでstartIntent()しているので 更新すると思っていたが出来ないようだ。
PendingIntentはPendingIntent.FLAG_CANCEL_CURRENTで作成しているので BroadcastReceiverの段階では更新されたIntentが来ているのは確認済み。
GoogleのドキュメントによるとgetIntent()はActivity起動時の値を取得するためのもの であり、そのまま使用しても都度更新されるような作りではないよう。
困り果てたとき、onNewIntet()なるActivityクラスのメソッドを発見。
onNewIntent()はFLAG_ACTIVITY_NEW_TASKでActivityを起動した際に onResume()の前に実行されるもののよう。
onCreate()からライフサイクルが始まる際には呼ばれない。
このonNewIntentにはActivity起動時のIntentじゃなく更新されたIntentが 入ってくるのでsetIntent()にそれを引数に渡すことでgetIntent()の値を更新できる。
という事象が発生した。
BroadcastReceiverからはFLAG_ACTIVITY_NEW_TASKでstartIntent()しているので 更新すると思っていたが出来ないようだ。
PendingIntentはPendingIntent.FLAG_CANCEL_CURRENTで作成しているので BroadcastReceiverの段階では更新されたIntentが来ているのは確認済み。
GoogleのドキュメントによるとgetIntent()はActivity起動時の値を取得するためのもの であり、そのまま使用しても都度更新されるような作りではないよう。
困り果てたとき、onNewIntet()なるActivityクラスのメソッドを発見。
onNewIntent()はFLAG_ACTIVITY_NEW_TASKでActivityを起動した際に onResume()の前に実行されるもののよう。
onCreate()からライフサイクルが始まる際には呼ばれない。
このonNewIntentにはActivity起動時のIntentじゃなく更新されたIntentが 入ってくるのでsetIntent()にそれを引数に渡すことでgetIntent()の値を更新できる。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//画面表示時に再度起動された際にgetIntent()を更新する。
setIntent(intent);
}
登録:
投稿 (Atom)