Screen Short : Screen « Hardware « Android






Screen Short

   

/* 
 *    
 *    dodol android screenshot capture and share library v1.0 (1. 30. 2011)
 *    
 *    homepage:
 *     http://dodol.kr
 *    source:
 *     http://code.google.com/p/dodol-android-screenshot-capture/
 *     
 *    Copyright (C) 2011  dodol [dodol.kr@gmail.com]
 *
 *    This program is free software: you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation, either version 3 of the License, or
 *    any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 */

//package lib.dodol.screenshot;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Bitmap.Config;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

public class DodolScreenshot {

  private Activity mActivity;
  private Bitmap mImageBitmap;
  private String mAppId;
  private String mMessage;
  private String mResultMessage;

  // constructor
  
  public DodolScreenshot(Activity activity) {
    this.mActivity = activity;
  }
  
  // public method
  
  public Bitmap setCaptureSource(View view) {
    mImageBitmap = makeBitmapImage(view);
    return mImageBitmap;
  }
  
  public Bitmap setCaptureSource(Bitmap bitmap) {
    mImageBitmap = bitmap;
    return mImageBitmap;
  }

  public void setAppId(String mAppId) {
    this.mAppId = mAppId; 
    
  }

  public void setUserMessage(String msg) {
    this.mMessage = msg;
  }
  
  public String getUserMessage() {
    // TODO Auto-generated method stub
    return mMessage;
  }

  public String upload() {
    if(mImageBitmap == null) {
      Log.e("dodol-screenshot", "screenshot source has not been set");
      return "no screenshot source";
    }
    mResultMessage = processUploadRequest(); 
    return mResultMessage;
  }
  
  public boolean isSuccess() {
    return mResultMessage != null && mResultMessage.contains("http");
  }
  
  public String getUrl() {
    return isSuccess() ? mResultMessage : null; 
  }
  
  public Intent getSendIntent(String userMessage) {
    if(isSuccess()) {
      Intent intent = new Intent(Intent.ACTION_SEND);
      // "Screenshot: " is 12 character 
      // url length is less than 50 character
      intent.putExtra(Intent.EXTRA_TEXT, userMessage + "Screenshot: " + mResultMessage);
      intent.setType("text/plain");
      return intent;
    } else {
      return null;
    }
  }
  
  // private methods
  
  private Bitmap makeBitmapImage(View mMainLayout) { 
    Bitmap bitmap;
    
    try {
      bitmap = Bitmap.createBitmap(mMainLayout.getWidth(), mMainLayout.getHeight(), Config.ARGB_8888);
      Canvas canvas = new Canvas();
      canvas.setBitmap(bitmap);
      mMainLayout.draw(canvas);
    } catch (Exception e) {
      Log.e("dodol-screenshot", "not enough memory");
      Toast.makeText(mActivity, "dodol-screenshot: not enough memory", Toast.LENGTH_LONG).show();
      return null;
    }
    return bitmap;
  }
  
  private String processUploadRequest() {
    
    HttpURLConnection conn = null;
    DataOutputStream dos = null;

       try {

         String lineEnd = "\r\n";
            String twoHyphens = "--";
            String boundary = "*****";

            String urlString = "http://dodol-screenshot.appspot.com/post";
            URL url = new URL(urlString);
            conn = (HttpURLConnection) url.openConnection();

            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            
            conn.setRequestMethod("POST");
           
            conn.setRequestProperty("Charset", "utf-8");
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);

            dos = new DataOutputStream( conn.getOutputStream() );

            // additional field and data
      ArrayList<String> data = new ArrayList<String>();
      data.add("package");
      data.add(mActivity.getPackageName());

      data.add("appid");
      data.add(mAppId);
      
      data.add("title");
      data.add(mMessage);
      
      data.add("language");
      data.add(mActivity.getResources().getConfiguration().locale.getISO3Language());
      
      for(int i = 0; i < data.size(); i += 2) {
        dos.writeBytes(twoHyphens + boundary + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"" + data.get(i)+ "\"" + "\r\n" + lineEnd);
        dos.write(data.get(i + 1).getBytes("utf-8"));
        dos.writeBytes(lineEnd);
      }
           dos.writeBytes(twoHyphens + boundary + lineEnd);
           
           // upload image file 
           dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"screenshot\"" + lineEnd);
           dos.writeBytes(lineEnd);
           
           ByteArrayOutputStream  byteArray = new ByteArrayOutputStream();
           mImageBitmap.compress(CompressFormat.JPEG, 90, byteArray);
           
           byte[] byteImageData = byteArray.toByteArray();
           dos.write(byteImageData, 0, byteImageData.length);

           dos.writeBytes(lineEnd);
           dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

           dos.flush();
           dos.close();

           // receive result from server
           InputStream is = conn.getInputStream();  

           BufferedReader reader = new BufferedReader(new InputStreamReader(is));
           urlString = reader.readLine();
      
           conn.disconnect();
           return urlString;
           
       } catch (Exception e) {
        e.printStackTrace();
        Log.e("dodol-screenshot", "Sorry, screenshot upload failed. See logcat exception message");
        Toast.makeText(mActivity, "Sorry, screenshot upload failed.", Toast.LENGTH_LONG).show();
       }
    return null;
    }

}

   
    
    
  








Related examples in the same category

1.Multiscreen size
2.Nested PreferenceScreen
3.Get the size of Default Display Screen
4.Screen Orientation
5.Rows have different number of columns and content doesn't fit on screen: column 4 of row 2 shrinks all of the other columns
6.Demonstrates the Tab scrolling when too many tabs are displayed to fit in the screen.
7.Using PreferenceScreen
8.Splash Screen
9.Get the optimal preview size for the given screen size.
10.Methods for converting between the physics world coordinates and the screen coordinates.
11.Get screen Orientation
12.add Home Screen Shortcut
13.Return the supported picture size that best fits on the device screen.
14.Set full screen mode