SSブログ
前の10件 | -

難読化 [難読化]

難読化は昔はちょっと面倒だったのですが、今はSDKにProGuardが統合されているので超楽です。

プロジェクト内のdefault.propertiesに

proguard.config=proguard.cfg

を一行追加するだけ。後は、普通にExport Signed Application Packageでファイルを生成してやれば良いだけです。エラーが出る場合は、それはまた別の話。

難読化にいかほどの意味があるのか分かりませんが、無いよりマシと言う程度で。


タグ:難読化

Androidのシステム情報 [その他]

http://developer.android.com/reference/android/os/Build.html

android.os.Buildから端末の情報が見れる。これで、この端末以外動作させないとかできます。

Log.d(TAG,"BOARD:" + Build.BOARD);
Log.d(TAG,"BOOTLOADER:" + Build.BOOTLOADER); 
Log.d(TAG,"BRAND:" + Build.BRAND);
Log.d(TAG,"CPU_ABI:" + Build.CPU_ABI);
Log.d(TAG,"CPU_ABI2:" + Build.CPU_ABI2); 
Log.d(TAG,"DEVICE:" + Build.DEVICE);
Log.d(TAG,"DISPLAY:" + Build.DISPLAY);
Log.d(TAG,"FINGERPRINT:" + Build.FINGERPRINT);
Log.d(TAG,"HARDWARE:" + Build.HARDWARE); 
Log.d(TAG,"HOST:" + Build.HOST);
Log.d(TAG,"ID:" + Build.ID);
Log.d(TAG,"MANUFACTURER:" + Build.MANUFACTURER);
Log.d(TAG,"MODEL:" + Build.MODEL);
Log.d(TAG,"PRODUCT:" + Build.PRODUCT);
Log.d(TAG,"RADIO:" + Build.RADIO);
Log.d(TAG,"SERIAL:" + Build.SERIAL); 
Log.d(TAG,"TAGS:" + Build.TAGS);
Log.d(TAG,"TIME:" + Build.TIME);
Log.d(TAG,"TYPE:" + Build.TYPE);
Log.d(TAG,"USER:" + Build.USER);





カメラから画像を取得する。 [カメラ]

本などを見ると、YUVからRGBに変換して、さらにBitmapに変えてごにょごにょ…ってのが多いけど、YUVから直接JPEGに変えられる。カメラの解像度は固定で、ファイルパスは適当だけど、以下がサンプル。

private Camera.PreviewCallback mPreviewListener = new Camera.PreviewCallback() {

    @Override
    public void onPreviewFrame(final byte[] data, final Camera camera) {
        if (data == null)
            return;
        camera.addCallbackBuffer(data);
    Camera.Parameters parameters = camera.getParameters();
    YuvImage image = new YuvImage(data, parameters.getPreviewFormat(),
            VIDEO_WIDTH, VIDEO_HEIGHT, null);
    File file = new File("/path");
    FileOutputStream out= new FileOutputStream(file);

    image.compressToJpeg(
                new Rect(0, 0, image.getWidth(), image.getHeight()), 40,
                out);
                 out.close();
        }
};
 



タグ:カメラ

intentで値を渡す [Intent]

//渡す方

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra(KEY, value);
startActivity(intent);




//受け取る方



onCreate内などに




Intent intent = getIntent();
String value= intent.getStringExtra(KEY);




タグ:Intent

layoutファイルで外部のファイルを使う [layout]

つまり、layoutファイルを分割して使う。

includeを使います。

まず、別にpaintimage.xml と言う名前のレイアウトファイルを作って、後でmain.xmlの中で呼ぶ場合。

<include android:layout_width="640dip" android:layout_height="800dip"
    android:layout_alignParentTop="true" android:layout_alignParentLeft="true"
    android:id="@+id/paintImage" layout="@layout/paintimage" />


上記の通り、paintimageで定義したものをlayout_widthのように上書きできる。




タグ:Layout

Canvasをクリア [ペイント]

ペイントソフトを作った時にCanvasをクリアしたいとき。

mCanvas.drawColor(0,Mode.CLEAR); 
invalidate();




【送料無料】ミドリノヘイワ


【送料無料】ミドリノヘイワ

  • ショップ: 楽天ブックス

タグ:Canvas

ダイアログにシークバーを付ける [Dialog]

//レイアウト seekdialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/dialog_root"
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <SeekBar
    android:id="@+id/seekbar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
</SeekBar>
</LinearLayout>




//Activity内



LayoutInflater inflater = LayoutInflater.from(this);
seekView = inflater.inflate(R.layout.seekdialog,
        (ViewGroup) findViewById(R.id.dialog_root));
seekbar = (SeekBar) seekView.findViewById(R.id.seekbar);
seekbar.setMax(100);
seekbar.setProgress(50);
seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

    public void onStopTrackingTouch(SeekBar seekBar) {
    }

    public void onStartTrackingTouch(SeekBar seekBar) {
    }

    public void onProgressChanged(SeekBar seekBar,
            int progress, boolean fromUser) {
        //progressにシークの値が来る

    }
});

Dialog dialog = new AlertDialog.Builder(this)
        .setTitle("seekbar")
        .setView(seekView)
        .setPositiveButton("OK",
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog,
                            int which) {

                    }
                }).create();
dialog.show();





タグ:Dialog seekbar

ColorPickerDialogを使う [Dialog]

標準に用意されていないので、APIDemoにあるcom.example.android.apis.graphics.ColorPickerDialog を使います。

まず、ColorPickerDialog.java を自分のプログラムの任意のパッケージにコピーしてから。

ColorPickerDialog colorPickerDialog = new ColorPickerDialog(
        MainActivity.this,
        new ColorPickerDialog.OnColorChangedListener() {

            @Override
            public void colorChanged(int color) {
                //colorが選択された色

            }
        }, Color.BLACK);

colorPickerDialog.show();




ギャラリーから画像を取得する [Intent]

//呼び出す時

private static final int REQUEST_CODE_GALLERY = 99;

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, REQUEST_CODE_GALLERY);


//受け取る時


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK)
        return;
    switch (requestCode) {
    case REQUEST_CODE_GALLERY:
        try {
            InputStream in = getContentResolver().openInputStream(
                    data.getData());
            Bitmap bitmap = BitmapFactory.decodeStream(in);
            in.close();
        } catch (Exception e) {

        }
        break;

    default:
        break;
    }
}





ソケット通信 [通信]

例えば、Bitmapのやり取りの場合。

//クライアント側

ByteArrayOutputStream os = new ByteArrayOutputStream();
bitmap.compress(format, quality, os);
byte[] bytedata =os.toByteArray();

 Socket socket = null;
 BufferedOutputStream out = null;
 try {
    socket = new Socket();
     socket.connect(new InetSocketAddress("192.168.0.10", 8888));
     out = new BufferedOutputStream(socket.getOutputStream());
    out.write(bytedata, 0, bytedata.length);

     if (out != null)
          out.close();
      if (socket != null)
          socket.close();
       } catch (Exception ex) {
            //TODO
 }




//サーバー側



ServerSocket servsock = null;
Socket sock = null;
BufferedInputStream in = null;
try {
    servsock = new ServerSocket(8888);
    while (true) {
        sock = servsock.accept();
        in = new BufferedInputStream(sock.getInputStream());
        bitmap = BitmapFactory.decodeStream(in);
        in.close();
        sock.close();
    }
} catch (IOException e) {
} finally {
    if (servsock != null) {
        try {
            servsock.close();
        } catch (IOException e) {
        }
    }
}




ただ、ソケットが張れない場合、クソ重くなってしまうので、そこは工夫が要る。






前の10件 | -

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。