●Activityの回転時の再生成への対応
①再起動させなければいいので、onConfigurationChanged() メソッドをオーバーライド
②Activityのマニフェストに android:configChanges="orientation|keyboardHidden"
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
(Softbank 005SHでは、keyboardHiddenが必要だった。)
●Eclipseの入力補完(オートコンプリート)が遅い件
バージョン3.62にすれば問題ないらしい
●アップデート後など、eclipseが起動しなくなった場合
eclipse\configuration\jp.sourceforge.mergedoc.pleiades フォルダを削除したらOKだった
●Android アプリ開発時、有料・無料の2種プロジェクトを作るTips
(ソースを2プロジェクトで共有する方法)
上記URLで書いてあった方法は、部分的に、自分のアプリでは対応できない部分があったので、自分のやった方法で、全体名流れを補足。
- まず2つプロジェクトを普通に作る。(基本app-freeと派生app-paid)
com.appli.free
com.appli.paid
など、最後の1段落のみ変えたりするとわかりやすいかも。
プロジェクト名は、ここでは「app-free」「app-paid」としてみる。
- 派生プロジェクトpaidでは、src、assets、resディレクトリを、
リンクしたディレクトリとする。
- 派生プロジェクトapp-paidでは、基本プロジェクトapp-free内の自動生成ファイルR.javaが必要になる。
手動で毎回やるのは酷なので、派生プロジェクトapp-paidビルド時に毎回app-free側のR.javaが自動でコピーされるよう、バッチファイルを作成、プロジェクトのプロパティ、ビルダー、で、ビルド時に毎回実行されるようにする。初回はプロジェクトのクリーンを実行で、×マーク消える。
${build_project}\rcopy.bat
${build_project}
上記サイトを参考にさせていただきました。
rcopy.bat
::--------------------------------
@echo off
SET PARENT_PROJECT=app-free
SET CURRENT_PROJECT=app-paid
REM 定義ファイルをコピーする
cd ..\%PARENT_PROJECT%\
REM genフォルダをコピーする
xcopy /s /e /y .\gen ..\%CURRENT_PROJECT%\gen
cd ..\CURRENT_PROJECT\
::--------------------------------
- リソースを共有するので、有料版、無料版をそれぞれリソースに含めるので、容量はダブって損となる。気にする人は気にするかも?でも自分は利便性を取りました。
@string/app_name
@string/app_name_paid
@drawable/icon
@drawable/icon_paid
- AndroidManufest.xmlは、アプリそれぞれに設定する。
(パッケージ名、label )
アクティビティ名を、省略名ではなく、<activity android:name="light.diary.plus.EditWindow"
などにする必要があるかも
これらの結果、
- app-freeプロジェクト、はほかの通常のプロジェクトとなんら変わりない
- app-paidプロジェクトは、res, asset, srcがリンクフォルダであり、src内パッケージは「com.appli.free」がある状態。
- ×印が消えない場合は、プロジェクトのクリーン&eclipseの再起動、F5キーによるリフレッシュなどをトライ。
- (必要に応じて、import light.diary.plus.R; ?)
- 有料・無料の処理切り分けは、getPackageName()で行う。
●プログレスダイアログProgress Dialog
既に動いているサンプルをそのまま使うのが吉。
スレッド以外でGUI操作するとメモリエラーとなる。
引用
ProgressDialog progressDialog;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
progressDialog = new ProgressDialog(this);
/*progressDialog.setTitle("処理中");
progressDialog.setMessage("処理を実行中です");
progressDialog.setIndeterminate(false); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();*/
Thread thread = new Thread(this);
thread.start();
}
public void run() {
// 時間のかかる処理をここに記述。
try {
progressDialog.setTitle("処理中");
progressDialog.setMessage("処理を実行中です");
progressDialog.setIndeterminate(false); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
handler.post(new Runnable() {
@Override
public void run() {
progressDialog.show();
}
});
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
handler.sendEmptyMessage(0);
}
private Handler handler = new Handler() {
public void handleMessage(Messa
最終更新:2012年05月07日 13:13