2016年12月25日日曜日

[Android]How to print and share image

さて、久々のプログラミングネタです。
今回はAndroidアプリにおいて、Pocket Noteの様に画像を印刷したり、他のアプリに画像を連携したりする方法についてご説明します。
I write method of programming after a long time.
I explain how to print image and share image with other applications on Android application like Pocket Note this time.






環境(Environment):Android Studio 2.2.1 、API 21

1. 印刷(Print)
Androidでは4.4(API 19)から印刷機能がサポートされています。
Androidアプリから印刷を実行するにはPrintHelper(android.support.v4. print.PrintHelper)を使用します。
Android supports print function from Version 4.4(API 19).
Use PrintHelper(android.support.v4. print.PrintHelper) to print image from an Android application.


private void execPrint(Bitmap bmpPrint){
    
    if (PrintHelper.systemSupportsPrint()) {
           PrintHelper printHelper = new PrintHelper(this);
           printHelper.setColorMode(PrintHelper.COLOR_MODE_COLOR);
           printHelper.setScaleMode(PrintHelper.SCALE_MODE_FIT);
           printHelper.printBitmap("Image Title", bmpPrint);
    }
}

2.他アプリとの連携
Android上にインストールされているTwitter,Facebook,Google+等のアプリに画像を連携するにはIntent(android.content.Intent)を使用します。
Use Intent(android.content.Intent) to share image with other applications,for example,Twitter,Facebook and Google+ on Android.

また事前に画像をキャッシュ領域にファイルとして保存してから連携しています。
And save image as file into cache directory before using Intent.


private void execPrint(Bitmap bmpPrint,int applicationType){
    
    if (applicationType == 3 || applicationType == 4){
       Uri saveFileUri = saveTemp2(bmpPrint);
    }else{
       String saveFileName = saveTemp(bmpPrint);
    }

    switch (applicationType){ 
    case 1:
        //Twitter
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.setPackage("com.twitter.android");
        intent.setType("image/jpg");
        File sendFile = new File(saveFileName);
        intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(sendFile));
        startActivity(intent);
        break;
    case 2:
        //facebook
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.setPackage("com.facebook.katana");
        intent.setType("image/jpg");
        File sendFile = new File(saveFileName);
        intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(sendFile));
        startActivity(intent);
        break;
    case 3:
        //Google+
        Intent shareIntent = new PlusShare.Builder(this)
                .addStream(saveFileUri)
                .setType("image/jpg")
                .getIntent();

        startActivityForResult(shareIntent, 0);
        break;
    case 3:
        //Other Applications        Intent share = new Intent(Intent.ACTION_SEND);
        share.setType("image/jpg");
        share.putExtra(Intent.EXTRA_STREAM, saveFileUri);
        startActivity(Intent.createChooser(share, "Share applications"));
        break;
     }
}

//Save image as file and return file's name
private String saveTemp(Bitmap bmpPrint){
    String rtnValue = "";
    File internalCachedir = getExternalCacheDir();

    String path = internalCachedir.getPath() + "/Temp.jpg";
    File saveFile = new File(path);
    FileOutputStream out = new FileOutputStream(path);
    bmpPrint.compress(Bitmap.CompressFormat.JPEG,100,out);
    out.flush();
    out.close();
    return path;
}

//Save image as file and return file's Uri
private Uri saveTemp2(Bitmap bmpPrint){
    File internalCachedir = getExternalCacheDir();

    String path = internalCachedir.getPath() + "/Temp.jpg";
    File saveFile = new File(path);
    FileOutputStream out = new FileOutputStream(path);
    bmpPrint.compress(Bitmap.CompressFormat.JPEG,100,out);
    out.flush();
    out.close();
    
    return Uri.fromFile(saveFile);
}

[関連記事(Articles)]
[iOS]How to print and share image

にほんブログ村 ライフスタイルブログ クリエイティブライフへ
にほんブログ村

クリエイティブライフ ブログランキングへ

0 件のコメント:

コメントを投稿