Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从phonegap javascript调用此android蓝牙打印程序?_Java_Javascript_Android_Cordova_Android Ndk - Fatal编程技术网

如何从phonegap javascript调用此android蓝牙打印程序?

如何从phonegap javascript调用此android蓝牙打印程序?,java,javascript,android,cordova,android-ndk,Java,Javascript,Android,Cordova,Android Ndk,我制作了一个蓝牙打印机应用程序(基于android),用于使用datecs DPP-350打印机设备打印一些文本。该程序使用一个datecs外部库,如bluetoohconnector和RFComm包。它工作得很好,下面是代码: package com.myapp.MobilePrinter1; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.dja

我制作了一个蓝牙打印机应用程序(基于android),用于使用datecs DPP-350打印机设备打印一些文本。该程序使用一个datecs外部库,如bluetoohconnector和RFComm包。它工作得很好,下面是代码:

package com.myapp.MobilePrinter1;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import com.djarum.MobilePrinter1.BluetoothConnector;
import com.datecs.api.card.FinancialCard;
import com.datecs.api.printer.Printer;
import com.datecs.api.printer.PrinterInformation;
import com.datecs.api.printer.ProtocolAdapter;
import com.datecs.api.printer.ProtocolAdapter.Channel;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MobilePrinter1Activity extends Activity {

    public static final String CONNECTION_STRING = "connection_string";

    private final Handler mHandler = new Handler();

    private final Thread mConnectThread = new Thread() {
        @Override
        public void run() {
            String connectionString = "bth://00:01:90:E6:40:52";

            showProgress("Connecting");

            if (connectionString.startsWith("bth://")) {
                String address = connectionString.substring(6);
                connectBth(address);
            } else {
                throw new IllegalArgumentException("Unsupported connection string");
            }

            dismissProgress();
        }   

        void connectBth(String address) {
            //setPrinterInfo(R.drawable.help, address);            

            try {
                mBthConnector = BluetoothConnector.getConnector(MobilePrinter1Activity.this);
                mBthConnector.connect(address);
                mPrinter = getPrinter(
                        mBthConnector.getInputStream(), 
                        mBthConnector.getOutputStream());               
            } catch (IOException e) {
                //error(R.drawable.bluetooth, e.getMessage());              
                return;
            }                       

            mPrinterInfo = getPrinterInfo();            
        }

        Printer getPrinter(InputStream in, OutputStream out) throws IOException {
            ProtocolAdapter adapter = new ProtocolAdapter(in, out);
            Printer printer = null;

            if (adapter.isProtocolEnabled()) {
                Channel channel = adapter.getChannel(ProtocolAdapter.CHANNEL_PRINTER);
                InputStream newIn = channel.getInputStream();
                OutputStream newOut = channel.getOutputStream();
                printer = new Printer(newIn, newOut);
            } else {
                printer = new Printer(in, out);
            }

            return printer;
        }

        PrinterInformation getPrinterInfo() {
            PrinterInformation pi = null;

            try {
                pi = mPrinter.getInformation();
                //setPrinterInfo(R.drawable.printer, pi.getName());                
            } catch (IOException e) {
                e.printStackTrace();                                
            }

            return pi;
        }
    };

    private BluetoothConnector mBthConnector;
    private Printer mPrinter;
    private PrinterInformation mPrinterInfo;
    private ProgressDialog mProgressDialog;
    private BluetoothConnector mConnector;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try {
            mConnector = BluetoothConnector.getConnector(this);
        } catch (IOException e) {
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT);
            finish();           
        }

        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                printText();                
            }           
        });

        findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                printBarcode();                 
            }           
        });  

        findViewById(R.id.button3).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                printImage();               
            }           
        });
    }

    public void printText() {
        new Thread() {                  
            @Override
            public void run() {
                //showProgress(R.string.printing_text);
                doPrintText2();
                dismissProgress();
            }
        }.start();                              
    } 

    public void printBarcode() {
        new Thread() {                  
            @Override
            public void run() {
                //showProgress(R.string.printing_text);
                doPrintBarcode();
                dismissProgress();
            }
        }.start();                              
    } 

    public void printImage() {
        new Thread() {                  
            @Override
            public void run() {
                //showProgress(R.string.printing_text);
                doPrintImage();
                dismissProgress();
            }
        }.start();                              
    } 

    @Override
    protected void onStart() {
        super.onStart();
        mConnectThread.start();        
    }   

    @Override
    protected void onStop() {
        super.onStop();

        if (mBthConnector != null) {
            try {
                mBthConnector.close();
            } catch (IOException e) {
                e.printStackTrace();
            }           
        }       
    }   

    private void showProgress(final String text) {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                mProgressDialog = ProgressDialog.show(
                        MobilePrinter1Activity.this,
                        "Please wait", 
                        text,
                        true);                            
            }           
        });             
    }

    private void showProgress(int resId) {
        showProgress(getString(resId));
    }

    private void dismissProgress() {
        mHandler.post(new Runnable() {
            @Override
            public void run() {                
                mProgressDialog.dismiss();             
            }           
        });     
    }            

    private void doPrintSelfTest() {
        try {           
            mPrinter.printSelfTest();                       
        } catch (IOException e) {
            //error(R.drawable.selftest, getString(R.string.failed_print_self_test) + ". " + 
                    //e.getMessage());
        }
    }

    private void doPrintText2() {
        EditText EditText1;
        EditText1=(EditText)findViewById(R.id.editText1);
        String temp;
        try {           
            mPrinter.reset();  
            mPrinter.printTaggedText(EditText1.getText().toString());   
            //mPrinter.printTaggedText("Testing Testing!!"); 
            mPrinter.feedPaper(110);
        } catch (IOException e) {
            //error(R.drawable.text, getString(R.string.failed_print_text) + ". " + 
                    //e.getMessage());          
        }
    }

    private void doPrintBarcode() {
        EditText EditText1;
        EditText1=(EditText)findViewById(R.id.editText1);
        try {           
            mPrinter.reset();

            mPrinter.setBarcode(Printer.ALIGN_CENTER, false, 2, Printer.HRI_BOTH, 100);
            mPrinter.printBarcode(Printer.BARCODE_CODE128, EditText1.getText().toString());
            mPrinter.feedPaper(38);

            mPrinter.feedPaper(110);
        } catch (IOException e) {
            //error(R.drawable.barcode, getString(R.string.failed_print_barcode) + ". " +
                    //e.getMessage());          
        }
    }
    private void doPrintImage() {
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo_djarum);
        final int width = bitmap.getWidth();
        final int height = bitmap.getHeight();
        final int[] argb = new int[width * height];     
        bitmap.getPixels(argb, 0, width, 0, 0, width, height);              

        try {
            mPrinter.reset();            
            mPrinter.printImage(argb, width, height, Printer.ALIGN_LEFT, true);
            mPrinter.feedPaper(110);            
        } catch (IOException e) {
            Toast.makeText(MobilePrinter1Activity.this, e.getMessage(), 1).show();
        }
    }

    private void dialog(final int id, final String title, final String msg) {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                AlertDialog dlg = new AlertDialog.Builder(MobilePrinter1Activity.this)
                .setTitle(title)
                .setMessage(msg)               
                .create();  
                dlg.setIcon(id);
                dlg.show();             
            }           
        });             
    }

    private void error(final int resIconId, final String message) {
        mHandler.post(new Runnable() {
            @Override
            public void run() {             
                AlertDialog dlg = new AlertDialog.Builder(MobilePrinter1Activity.this)
                .setTitle("Error")
                .setMessage(message)               
                .create();
                dlg.setIcon(resIconId);
                dlg.setOnDismissListener(new OnDismissListener() {
                    @Override
                    public void onDismiss(DialogInterface dialog) {
                        MobilePrinter1Activity.this.finish();
                    }                   
                });
                dlg.show();             
            }           
        });             
    }

    private void setPrinterInfo(final int resIconId, final String text) {
        mHandler.post(new Runnable() {          
            @Override
            public void run() {
                //((ImageView)findViewById(R.id.icon)).setImageResource(resIconId);
                //((TextView)findViewById(R.id.name)).setText(text);
            }
        });
    }
}

现在的主要问题是如何从phonegap调用此程序?我尝试过使用droidGap,但在启动打印机线程时会出现错误。有人知道如何解决这个问题吗??非常感谢。

我不认为您可以从标准android浏览器调用太多API(除了一些类似location、contacts n all的API),但可以通过其他方式在本机应用程序中嵌入webview(可以是您上面提到的线程代码)使用android平台的Javascript接口API从Javascript事件调用此代码(非常简单)。

我同意您的观点,但在这个项目中,我必须使用phonegap来创建该程序,并且必须使用datecs dpp-350来打印。。还有其他解决办法吗?谢谢,我目前还没有。但是,如果你用这种方式工作,请在这里更新。这是否可能在android中创建蓝牙打印机API而不使用外部库。?