2010年11月13日土曜日

android: 他のアプリを起動させる(CreateProcessの意味)

アンドロイドのアプリで他のアプリを起動させるのはintentを使ったらOKです。
例のコード:
  あるアプリがtien.helloのpackageにあり、マインのアクティビティはhelloであれば呼び方は下通りです。
String clazz = "tien.hello.hello";
            Intent intent = new Intent(Intent.ACTION_MAIN);

            int idx = clazz.lastIndexOf('.');
            String pkg = clazz.substring(0, idx);

            intent.setClassName(pkg, clazz);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);

2010年11月4日木曜日

Android: Add custom button on title bar(ボタンをタイトルバーに貼る)

今回、僕はボタンをタイトルに貼るアプリを作ったけど、ちょっと問題があった。コードは以下通りです。
※layoutのbuttontitlebar.xmlファイルのコード:

<#RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/screen"
    android:layout_width="wrap_content"
    android:layout_height="50dip"
    android:orientation="vertical">
    <#TextView android:id="@+id/titletext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="@string/levelname" />
    <#Button android:id="@+id/titlebutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="@string/btnname" />


※アクティビティのコード:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int i;
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.buttontitlebar);
}

しかし、ボタンのサイズが調整できないため、半分だけ表示されているんです。
ボタンのサイズはどのように調整できますか。ご存知の方がいらしゃったら教えて頂きます。

2010年10月31日日曜日

Android: bitwise shift operator (シフト演算子)

 僕はAndroidとJavaには初心者ですから、困ることがたくさんあった。今回はAndroidアプリ開発でシフト演算子を使ってバイト配列の2バイトからcharに変更したいですけど、なんで結果は思ったとおりではありません。
 コードは:char wCode = (char)((buf[0]<<8)+buf[1]);//byte[] buf;
 間違いはどちらですか分かりませんですけど。でも下どおり直したら解決できます。
 char wCode = (char)(((buf[0]<<8)&0xFF00)|(buf[1]&0xFF));
どなたがご存知だったら、教えていただきます。

2010年10月27日水曜日

Android: JNI interface

JNIインターフェイスには経験がありませんですけど、開発中にちょっと怪しい事があった。僕はアンドロイドアプリ開発でアプリは複数のアクティビティが同じJNIインターフェイスを呼ぶ事ができないと分かります。なぜなら、JNIインターフェイスがアクティビティ名を確定だから他のアクティビティが呼べないでしょうね。
 そして、同じ処理ですけど、アクティビティ毎にJNIインターフェイスを作らないといけないです。
例:
JNIEXPORT jint JNICALL Java_android_testgame_activity1_init
(JNIEnv *, jobject, jbyteArray);
JNIEXPORT jint JNICALL Java_android_testgame_activity2_init
(JNIEnv *, jobject, jbyteArray);

他の方法があるかもしれないですけど、まだ分かりません。
どなたがご存知でしたら教えて頂きたいと思っております。

Android: Title bar and Status bar

 ビューについて描画する時、スクリーンサイズを取得し、ステータスバーとタイトルバーの高さを引かないと表示することがずれてしまうですね。でも、タイトルバーとステータスバーの高さはどうやって取得できますかと分かりませんですね。いろいろ探していい方法ではありませんが解決できるんです。
まず、ステータスバーはスクリーン密度に依存します。
※ 24px <=> LDPI
※ 32px <=> MDPI
※ 48px <=> HDPI
タイトルバーもステータスバーと同じ高さぐらいから
下記のコードで解決できます。
DisplayMetrics metrics = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch (metrics.densityDpi) {
case DisplayMetrics.DENSITY_HIGH:
m_screenSize.y = display.getHeight() - 2*48;
break;
case DisplayMetrics.DENSITY_LOW:
m_screenSize.y = display.getHeight() - 2*32;
break;
case DisplayMetrics.DENSITY_MEDIUM:
m_screenSize.y = display.getHeight() - 2*24;
break;
default:
break;
}


2010年10月24日日曜日

Add the market to android emulator1.5

Android マーケットをエミュレーターに追加の仕方は

1.イメージのZIPファイルをダウンロードする。(このリンクにある http://content.modaco.net/dropzone/update-cm-3.6.5-signed.system.img.zip)
2.ZIPファイルを解凍する。
3..android\avd\AVD1.5名にコピーする。
4.AVD1.5を起動する。

完了です。

エミュレーター2.0はこちらです。
http://chuancun.sakura.ne.jp/mt/mt-search.cgi?blog_id=2&tag=Running%20Android%20Market%20on%20Emulator&limit=20

Android 外部設定ファイルread write

Androidアプリ開発には外部設定ファイルも必要がある。それで下のコードは外部設定ファイルを読み込むと書き込む方法を記述します。しかし、外部設定ファイルを置く場所は/data/data/packagename/filesです。この場所は実機で動けるかどうかまだ確認していませんです。どなたが確認したと教えていただきたいと思います。

public void getparameter(){
byte[] buffer = new byte[8];
try{
InputStream inputStream = openFileInput("option.txt");
inputStream.read(buffer, 0, 1);
inputStream.close();
}catch (IOException e) { }
}

public void setparameter(){
  byte[] buffer = new byte[8];
  buffer[0] = 0x32;
  OutputStream output = null;
try{
 output = openFileOutput("option.txt", MODE_WORLD_READABLE);
 output.write(buffer);
 output.flush();
 output.close();
}catch (IOException e) { }
}