カテゴリー ‘ Android

Androidでカメラアプリを作る場合の注意点


 

Androidでカメラアプリを作る場合、「Camera.autoFocus」又は、「Camera.takePicture」を使うと思うのですが、

その時に気を付けないとエラーを吐いてしまいます。

その気を付けないと行けない点は、排他処理です。

シャッターボタンを押下した時に走る、onClick処理が排他制御しないと画像取得のプロセスが2重に動作してしまい落ちてしまいます。

で作成した処理ですが、

    /**
     * シャッター押下時の処理
     * @param view
     */
    public void onShutter(View view) {
    	// 多重撮影禁止
    	synchronized (mObj) {
        	if (mIsStart == false) onAutoFocus(view);
		}
    }

    /**
     * オートフォースでの画像撮影処理
     * @param view
     */
    public void onAutoFocus(View view) {
		mIsStart = true;
    	mCamera.autoFocus(new AutoFocusCallback() {
			@Override
			public void onAutoFocus(boolean success, Camera camera) {
				camera.takePicture(null, null, new Camera.PictureCallback() {
					@Override
					public void onPictureTaken(byte[] data, Camera camera) {
						try {
							saveSD(data);
							camera.startPreview();
							mIsStart = false;
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				});
			}
		});
    }

こんな感じで、排他処理を行うようにしました。

みなさんも気をつけてください。

AndroidのFaceDetectorの精度について


 

Androidでデフォルトで付いている顔認識のAPI

「FaceDetector」

が使えるのかなと思い検証してみました。

■検証結果

顔が、はっきり写っている写真に対してなら使用可能
遠目の集合写真のような顔がはっきりしていいないものは、認識出来にくい。

このような結果がでました。

 

■結論

なので、近くの距離で数人で使って盛り上がるようなアプリでは使えるが、

集合写真のようなものに加工を加えるようなアプリでは使うのは難しいかなと思います。

Androidでインストール済みのアプリ一覧の取得方法


 

Androidでインストール済みのアプリ一覧の取得方法を調べました。

よくある、Webにあるインストール済みのアプリ一覧の取得方法ですが、

『Androidでのランチャーから起動出来るアプリの一覧の取得』

public class ListLuncherActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // リスト作成
        ArrayList<String> appList = new ArrayList<String>();
        // パッケージマネージャーの作成
        PackageManager packageManager = getPackageManager();
        // ランチャーから起動出来るアプリケーションの一覧
        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        List<ResolveInfo> appInfo = packageManager.queryIntentActivities(intent, 0);
        // アプリケーション名の取得
        if (appInfo != null) {
        	for (ResolveInfo info : appInfo) {
        		appList.add( (String)info.loadLabel(packageManager));
        	}
        }
        // リスト表示設定
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, appList);
        setListAdapter(adapter);
    }
}

これがやりたいことでは無い…、インストールしている全てのアプリケーションの情報が取得したい。

で、色々と調べてわかった事は以下のような方法があった。

『Androidでのインストールしているアプリケーションの一覧の取得』

public class ListInstallActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // リスト作成
        ArrayList<String> appList = new ArrayList<String>();
        // パッケージマネージャーの作成
        PackageManager packageManager = getPackageManager();
        // インストール済みのアプリケーション一覧の取得
        List<ApplicationInfo> applicationInfo = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
        for (ApplicationInfo info : applicationInfo) {
        	appList.add((String)packageManager.getApplicationLabel(info));
        }
        // リスト表示設定
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, appList);
        setListAdapter(adapter);
    }
}

これで、本当のインストール済みアプリの一覧の取得が出来るようになりました。

ですが、プリインストールアプリがあるので、スゴイ邪魔なので次の1行を追加

if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM) continue;

起動しているアプリ自体が一覧に表示されるのでそれも、表示させないようにしたい場合は、

if (info.packageName.equals(this.getPackageName())) continue;

これで自分自身も含まれないように出来ます。

これで、インストール済みアプリの一覧の取得が出来るようになりました。

Androidアプリ開発中に簡単にアプリをアンインストールしたい


Androidアプリ開発していて、インストールとアンインストールを繰り返していると

とてもめんどくさい…。

 

これをどうにかしたいので開発に使う為のアンインストーラーを作ろうかと思っています。

そこで、調べないと行けない事をメモ

  • インストール済みのアプリの一覧の取得方法
  • プリインストールかどうかの判断方法
  • ウィジェットの仕組み
  • アンインストールの方法
アプリのイメージはウィジェットで、ワンクリックでアンイストールする事が出来るアプリを目指す!

return top