2011年6月30日木曜日

[Android] 自分の電話番号を知るコード

知っているようで案外知らない。Android端末での自局番号取得方法。

String mNumber = null;
TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

// 取得
mNumber = telManager.getLine1Number();

たったこれだけのコードでとれます。

ありがちですが、テキストボックスに入力してもらった電話番号と比べてみて判断してみたりする。

     EditText inputNumberText; 
     inputNumberText = (EditText) findViewById(R.id.inputText1);
     String inputNumber = inputNumberText.getText().toString();
     if(mNumber.equals(inputNumber)) {
      // とおるがいい
      Toast.makeText(this, "とおるがいい", Toast.LENGTH_SHORT).show();
      Intent intent = new Intent(this,FourthActivity.class);
      startActivity(intent);
      finish();
      
     } else {
      // 帰れ!!
      Toast.makeText(this, "まーちがーえたーねー。じゃ☆", Toast.LENGTH_SHORT).show();
      finish();
     }

Android端末ってそんなに通話しないからなぁ・・・。
というわけで案外電話番号が設定からみれることは知られてなかったりする。

2011年6月27日月曜日

[Android] 端末のSIMの状況を取得する

先日、上司に向けてアプリをつくったのですが、
かるーくスルーされたので「きー!!(怒)」となっています。

ま、そんな愚痴はともかく、
今日はSIMの有無を確認するコードを。

SIMの状況を取得するにはTelephonyManagerを使用します。
getSystemServiceでシステムの状況を取得すれば、判定することができます。

まずは取得。

int mStatus = 0;

TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mStatus = telManager.getSimState();

これでInt型で取得することができるので、あとは状況に応じて処理をふっていきます。

switch(mStatus) {
 case TelephonyManager.SIM_STATE_UNKNOWN: // SIM不明
     Toast.makeText(this, "まぁ、許す", Toast.LENGTH_SHORT).show();
     break;
 case TelephonyManager.SIM_STATE_ABSENT: // SIMなし
        Toast.makeText(this, "ゆるさない", Toast.LENGTH_SHORT).show();
        break;
 case TelephonyManager.SIM_STATE_PIN_REQUIRED: // PIN待ち
        Toast.makeText(this, "まぁ、いいか", Toast.LENGTH_SHORT).show();
        break;
 case TelephonyManager.SIM_STATE_PUK_REQUIRED: // PUK待ち
        Toast.makeText(this, "うーん、悩む", Toast.LENGTH_SHORT).show();
        break;
 case TelephonyManager.SIM_STATE_NETWORK_LOCKED:  // ロック
     Toast.makeText(this, "エクセレント!!", Toast.LENGTH_SHORT).show();
        break;
 case TelephonyManager.SIM_STATE_READY:  // 在り
        Toast.makeText(this, "とおるがいい", Toast.LENGTH_SHORT).show();
        break;
 default:
     Toast.makeText(this, "わかんないから許す", Toast.LENGTH_SHORT).show();
        break;
         
}

たったこれだけです。
まぁ、一応例外処理としてdefaultをいれております。
上のコードではSIMがある場合のみ次の処理へいくように・・・というためにかいたのですが、
分かりやすくするためにToastでメッセージを表示するだけにしておきました。

特にpermissionの設定もいらないので
適当にごにょごにょするには良いのではないかと思います。
設定値を勝手に変更すれば、エアな感じにもできるんじゃないのかな?と勝手に憶測。

といっても、現物SIMがないと結局は通信なんぞできないはず(なのかな?)なので
あんまり使うことはないかもですけど。

2011年6月22日水曜日

[Android] バックライトを常時ONにしてみる(ただしアプリ起動中のみ)

いつのまにか設定からバックライトの常時Onがきえているので
なんとなくアプリで実装してみる。

本当はずーっととどめておきたかったのですが、アプリのみでしか
できないので「あーうー」となっています。

というわけで本日のコード。

Window windows = getWindow();     
     String timeout = Settings.System.getString(this.getContentResolver(), "screen_off_timeout");

     if(timeout.equals("-1")) {
      // 常時
      
      // その他に変更
      windows.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
      
      
     } else {
      // その他
      
      // 常時に変更
      windows.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
     }

View単位でやるならこっち。

View LayoutView = (LinearLayout) findViewById(R.id.LayoutView);
     
     if(LayoutView.getKeepScreenOn()) {
      // 常時
      
      // その他に変更
      LayoutView.setKeepScreenOn(false);
     } else {
      // その他
      
      // 常時に変更
      LayoutView.setKeepScreenOn(true);
     }

解説したいですが、なんだか「がー」な気分なのでまた。

[Android] 端末のUSBDriverのまとめ

まとめてみる。

REGZA Phone(T-01C)
T-01C USBドライバ

MEDIAS(N-04C)
ADB用USBドライバー(アンドロイド開発者向け)

Xperia
端末の中にあるDriver.zip

LYNX 3D(SH-03C)
ドコモスマートフォン LYNX 3D(SH-03C)


USBドライバ(ADB)

※両方必要

Galaxy S
SAMSUNG Kies,PC Sync


とりあえずここまで。

[Android] MEDIAS(N-04C)の充電方法について

先日MEDIAS(N-04C)を使用しているとき、
付属でないUSBケーブルを使用したら充電ができませんでした。

どうやら付属のUSBケーブルじゃないと充電できないみたい。
相性問題なのでしょうか。

検証してくれているページはこちら。
MEDIAS お前もか・・・

いやー、もうどうにかしてほしいですね。

2011年6月17日金曜日

[Android] 縦書きを実装したったー(といってもまだ1行)

青空文庫とかをみていておもったのですが、まー、横文字の小説は読みづらい。
というわけなので、さくっとつくってみました。
(といいながら、案外時間がかかってしまった)
「縦書き」の実装です。

こんな感じになります。
























ありがちな発想としては
1.縦長のテキストビューを1つ作る
2.1文字ごとに改行をいれる。
というものなんですが、そんなアホなことをしてしまっては日本語本来の味が失われるということで、
あえて別の実装をしてみました。

どういう実装なのかというのを書きます。

1.文字数を取得
2.画面を半分に割る
3.縦幅を文字数で割る

こうするとわりと均等な感じで文字が配置できます。
文字がふえてくるとまた実装もかわってくるのですが、
今回は固定文字サイズと固定行数(1行)で行きたいとおもいます。

さ、まずは

0.ステータスバーとタイトルバーを消しさる。
・・・いきなり0番。

// タイトルバーの削除  
requestWindowFeature(Window.FEATURE_NO_TITLE);  
        
// ステータスバー削除  
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

0.1.画面を用意する
前準備多いですな。
今回はViewを手作りします。

class CharDrawView extends View {
  
 public CharDrawView(Context context) {
  super(context);
  setFocusable(true);
  this.context = context;
   
 }
}

コンストラクタあたりまでかいてみた。

さて、次はonDrawの実装です。
protected void onDraw(Canvas canvas) {
 super.onDraw(canvas);

 // 1.文字数を取得する
 int length = mMessage.length();
         
 // 2.画面を縦に割る
 int height = canvas.getHeight() - 40;
 int width = canvas.getWidth() / 2 - 20;
 
 // 背景色
 canvas.drawColor(Color.WHITE);
         
 // 文字色
 Paint paint = new Paint();
 paint.setAntiAlias(true);
 
 paint.setColor(Color.BLUE);
 paint.setTextSize(40);
 
 // 描画領域外(ここからスタート)
 int oneHeight = 40; 
         
 // 3.1文字の高さを取得する
 int charSize = charHeight(length,height);
         
 for(int i= 0;i < length;i++) {
  String oneChar = getOneMessage(i);
          
     canvas.drawText(oneChar, width, oneHeight + oneCharHeight(charSize,40), paint);
          
     // 一文字の高さを足す
         oneHeight += charSize;

     }
         
         
}
  
/*
 * 1文字の高さ(余白なし)
 */
public int charHeight(int length,int height) {
 return height / length;
}

/*
 * 中心点から描く
 */
public int oneCharHeight(int one,int charSize) {
 return (one / 2) + (charSize /2);
}
  
/*
 * 1文字取得
 */
public String getOneMessage(int index) {
 return String.valueOf(mMessage.charAt(index));
}

まとめちゃった。 だいたいこんな感じで。 最後にViewをはめこんで終了です。
View drawView = new CharDrawView(this);
setContentView(drawView);

えっと、なんでこういう実装にしたかというと、
本来日本語(漢字のほうがただしいかな?)って縦書き文化なんですよ。
升目に分けて整列して書くものなので、
Viewを四画にわって配置していくのが適切じゃないかな、と。

もちろん、文字数が増えたり、行数が増えたらまたかわってくるのですが、
それはまたの機会にでも。

2011年6月5日日曜日

[Scala] UIっぽいものをつくってみたんだぜ。

ScalaはJavaのものが使えるので
GUIプログラミングにはSwingかしら?とおもって
使ったことも無いSwingにチャレンジしてみた。
って、会社にScalaの本をわすれた・・・。
ので、今日はとってもJavaチックになるはず。

Swingについては基本的にはこのページを元に。
Swingを使ってみよう

で、今回は
チェックボックス3つとボタン1つ。
まー、フォームをつくるのが理想なんですが、
とりあえずUIを。

構造としては、
1.まずはフレームを作る。

    val frame = new JFrame()
    frame setSize new Dimension (640, 480)
    frame setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

もうなんかJavaっぽい。

2.つづいて、フレームからパネルを取得する

   val contentpane =  frame getContentPane();

3.パネルをつくる

   val panel = new JPanel()

4.部品をつくってパネルに追加していく
    val hogeCheck1 = new JCheckBox("ほげ1",true)
    val hogeCheck2 = new JCheckBox("ほげ2",false)
    val hogeCheck3 = new JCheckBox("ほげ3",false)
    panel add(hogeCheck1)
    panel add(hogeCheck2)
    panel add(hogeCheck3)
    
    val button = new JButton("実行")
    button setPreferredSize(new Dimension(200, 100))
    panel add(button)

5.つくったパネルをフレームにいれて表示
    contentpane add(panel, BorderLayout.CENTER);
 
    frame setVisible true

これで実行すると
チェックボックスが3つとボタンが1つ表示されます。

書き方がとってもJavaっぽいんだけど、まー、いいか。