サポートライブラリの PrintHelper を利用した印刷

Android 4.4 (KitKat) 以降ではプリンティング・フレームワークが導入されました。

サポートライブラリでも印刷に関わる実装を容易にするためのメソッドが追加されています。

ここでは PrintHelper を利用して画像を印刷する方法を紹介します。

ちなみにプログラムの基本構成は 「基本的な画像の印刷」と同一です。 ほぼ同一のプログラムが PrintHelper を利用すると次のようにかけます。

package com.example.printtest3;

import java.io.File;

import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore.Images.Media;
import android.support.v4.print.PrintHelper;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity
  implements OnClickListener {

  Button pickButton;
  int RESULT_PICK_FILENAME = 1;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    pickButton = (Button)findViewById(R.id.pickButton);
    pickButton.setOnClickListener(this);
  }

  public void onClick(View v) {
    switch(v.getId()){
    case R.id.pickButton:
      pickFilenameFromGallery();
      break;
    }
  }

  private void pickFilenameFromGallery() {

    if(!PrintHelper.systemSupportsPrint()){
      Toast.makeText(
        getBaseContext(),
        "Print Service Not Supported :(",
        Toast.LENGTH_SHORT).show();
      return;
    }
    Intent i = new Intent(
      Intent.ACTION_PICK,
      Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(i, RESULT_PICK_FILENAME);
  }

  @Override
  protected void onActivityResult(
    int requestCode,
    int resultCode,
    Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_PICK_FILENAME
      && resultCode == RESULT_OK
      && null != data) {
      Uri selectedImage = data.getData();
      String[] filePathColumn = { Media.DATA };

      Cursor cursor = getContentResolver().query(
      selectedImage,
      filePathColumn, null, null, null);
      cursor.moveToFirst();

      int columnIndex
        = cursor.getColumnIndex(filePathColumn[0]);
      String picturePath = cursor.getString(columnIndex);
      cursor.close();

      // 印刷
      printImage(picturePath);
    }
  }

  protected void printImage(String path){
    PrintHelper printer = new PrintHelper(getBaseContext());
    printer.setScaleMode(PrintHelper.SCALE_MODE_FIT);
    Bitmap bitmap = BitmapFactory.decodeFile(path);
    printer.printBitmap(path, bitmap);
  }

}

ポイントはまず PrintHelper.systemSupportsPrint() メソッドでプリンティングがサポートされているかどうかチェックしているところです。

Android 4.4 以降でプリンティング・フレームワークがサポートされたので、それ以前の環境だと PrintHelper は使えません。これで使えることを調べてから利用します。

次に上で作った printImage メソッド内で印刷しています。Bitmap オブジェクトを作り、PrintHelper の printBitmap メソッドでそれを印刷しています。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Android 開発入門