📄 printimageclient.java
字号:
/* * @(#)ObexDemoMIDlet.java 1.7 04/01/30 * * Copyright (c) 2004 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms */package example.bluetooth.demo;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Form;import javax.microedition.lcdui.Gauge;import javax.microedition.lcdui.List;import javax.microedition.midlet.MIDlet;import javax.bluetooth.BluetoothStateException;import javax.bluetooth.DeviceClass;import javax.bluetooth.DiscoveryAgent;import javax.bluetooth.DiscoveryListener;import javax.bluetooth.LocalDevice;import javax.bluetooth.RemoteDevice;import javax.bluetooth.ServiceRecord;import javax.bluetooth.UUID;import java.util.Enumeration;import java.util.Hashtable;import java.util.Vector;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.io.IOException;import java.io.OutputStream;import javax.microedition.io.Connector;import javax.microedition.io.StreamConnection;/** * @version 1.7 */public final class PrintImageClient extends MIDlet implements CommandListener { /** Soft button for exiting the demo. */ private final Command exitCmd = new Command("Exit", Command.EXIT, 1); /** Soft button for stopping download and returning to the mane screen. */ private final Command stopCmd = new Command("Stop", Command.BACK, 1); /** Soft button for stopping download and returning to the mane screen. */ private final Command backCmd = new Command("Back", Command.BACK, 1); /** Soft button make choise of printed picture. */ private final Command selectCmd = new Command("Select", Command.ITEM, 1); /** A menu list instance */ private final List pictureList = new List("Print Image Bluetooth Demo", List.IMPLICIT); /** A menu list instance */ private final List printerList = new List("Print Image Bluetooth Demo", List.IMPLICIT); /** Form to show current state of seding a pictire */ private final Form senderForm = new Form("Send Image"); /** Gauge to indicate progress of downloading process */ private final Gauge sendingItem = new Gauge("", false, 256, 0); /** Shows that demo was paused */ private boolean isPaused; /** Container of images file names */ private Vector pictureNames = new Vector(); /** Container of printers bluetooth addresses */ private Vector printerRecords= new Vector(); /** Class to found available printers*/ private PrinterFinder finder = null; /** Class to send image file to printer*/ private BTSPPImageSender sender = null; public PrintImageClient() { pictureList.setCommandListener(this); pictureList.addCommand(exitCmd); pictureList.addCommand(selectCmd); initPictureList(); printerList.setCommandListener(this); printerList.addCommand(backCmd); printerList.addCommand(selectCmd); senderForm.append(sendingItem); senderForm.addCommand(stopCmd); senderForm.setCommandListener(this); finder = new PrinterFinder(this); sender = new BTSPPImageSender(this); } public boolean isPaused() { return isPaused; } public void startApp() { isPaused = false; showPictureList(); } public void pauseApp() { isPaused = true; } public void destroyApp(boolean unconditional) { stop(); } public void commandAction(Command c, Displayable s) { if (c == exitCmd) { destroyApp(true); notifyDestroyed(); } else if (c == backCmd) { stop(); showPictureList(); } else if (c == stopCmd) { stop(); showPictureList(); } else if ((c == selectCmd) || (c == List.SELECT_COMMAND)) { if (Display.getDisplay(this).getCurrent() == pictureList) { initPrinterList(); } else { uploadPicture(); } } } /** * Shows list with image names to select one for printing */ void showPictureList() { Display.getDisplay(this).setCurrent(pictureList); } /** Create list of available image */ private void initPictureList() { for (int n = 1; n < 100; n++) { String nthImage = "ImageName-" + n; String image = getAppProperty(nthImage); if (image == null || image.length() == 0) { break; } String nthTitle = "ImageTitle-" + n; String title = getAppProperty(nthTitle); if (title == null || title.length() == 0) { title = image; } pictureNames.addElement(image); pictureList.append(title, null); } } /** * Shows list with found printer services */ void showPrinterList() { synchronized (printerRecords) { printerList.deleteAll(); printerRecords.removeAllElements(); } Display.getDisplay(this).setCurrent(printerList); //initPrinterList(); } void updatePrinterList(ServiceRecord serviceRecord) { RemoteDevice dev = serviceRecord.getHostDevice(); String btAddress = dev.getBluetoothAddress(); synchronized (printerRecords) { printerRecords.addElement(serviceRecord); printerList.append(btAddress, null); } } /** Create list of available printers */ private void initPrinterList() { finder.start(); } /** * Shows progress of image uploading */ void showProgress(String label, int maxValue) { sendingItem.setLabel(label); sendingItem.setValue(0); sendingItem.setMaxValue(maxValue); Display.getDisplay(this).setCurrent(senderForm); } /** * Update progress of image uploading */ void updateProgress(int value) { sendingItem.setValue(value); } private void uploadPicture() { int index = pictureList.getSelectedIndex(); String pictureName = (String) pictureNames.elementAt(index); ServiceRecord printerRecord; synchronized (printerRecords) { index = printerList.getSelectedIndex(); if(index == -1) { return; } printerRecord = (ServiceRecord) printerRecords.elementAt(index); } finder.stopDiscover(); sender.start(pictureName, printerRecord); } private void stop() { finder.stopDiscover(); sender.stop(); }}final class PrinterFinder implements DiscoveryListener { private static final UUID PICTURE_PRINT_UUID = new UUID("53756E57544B495053164704B78CE5D1", false); /** Reference to GUI part of sender */ private PrintImageClient gui = null; /** Agent to start and stop discover */ private DiscoveryAgent da = null; private Object initLock = new Object(); private boolean initStarted = false; private boolean devDisStarted = false; private Hashtable foundDevs = null; private Hashtable startedReqs = null; PrinterFinder(PrintImageClient gui) { this.gui = gui; } void start() { try { gui.showPrinterList(); findServices(); } catch (BluetoothStateException bse) { // FIXME: bse.printStackTrace(); gui.showPictureList(); } } void stopDiscover() { Enumeration en; Hashtable reqs; synchronized (initLock) { if (!initStarted) { return; } reqs = startedReqs; } da.cancelInquiry(this); synchronized (reqs) { en = reqs.keys();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -