【发布时间】:2017-08-09 08:53:05
【问题描述】:
我正在尝试使用输入输出流在 android 上与 USB 通信,因为我在活动中使用处理程序,它工作正常,但如果在每个活动中单独使用处理程序,它就不能正常工作,所以我希望一个共同的活动并在活动中作为所有活动的中介进行交流,我尝试了类似
public class BasicAccessoryDemo extends Activity implements View.OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button mycontrol, close_command;
mycontrol = (Button) findViewById(R.id.send_command);
mycontrol.setOnClickListener(this);
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onResume() {
super.onResume();
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.send_command:
byte[] commandPacket = new byte[2];
commandPacket[0] =0x12;
commandPacket[1] =0x34;
Usb_Communciation.Send_message(commandPacket);
break;
}
}
}
另一个持有处理程序的类是
public class Usb_Communciation extends Activity{
public final static int USBAccessoryWhat = 0;
public int firmwareProtocol = 0;
public static USBAccessoryManager accessoryManager;
public static String TAG = "MICROCHIP";
public static final int APP_CONNECT = (int)0xAE;
public boolean deviceAttached = false;
public void onCreate(Bundle savedInstanceState) {
accessoryManager = new USBAccessoryManager(handler, USBAccessoryWhat);
//accessoryManager.enable(this, getIntent());
}
public static void Send_message(byte[] data) {
try{
accessoryManager.write(data);
}catch (Exception e){
Log.d(TAG,
"USBAccessoryManager:write():IOException: arasu "
+ e.toString());
e.printStackTrace();
}
}
public Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
byte[] commandPacket = new byte[64];
byte[] WriteValue = new byte[2];
switch(msg.what)
{
case USBAccessoryWhat:
boolean StopReading = true;
int count = 0;
switch(((USBAccessoryManagerMessage)msg.obj).type)
{
case READ:
if(accessoryManager.isConnected() == false) {
return;
}
while(true) {
if (accessoryManager.available() < 2) {
break;
}
}
break;
case READY:
String version = ((USBAccessoryManagerMessage)msg.obj).accessory.getVersion();
firmwareProtocol = getFirmwareProtocol(version);
switch(firmwareProtocol){
case 1:
deviceAttached = true;
break;
case 2:
deviceAttached = true;
commandPacket[0] = (byte) APP_CONNECT;
commandPacket[1] = 0;
accessoryManager.write(commandPacket);
Log.d(TAG,"connect message sent.");
break;
}
break;
}
break;
} //switch
} //handleMessage
}; //handler
public int getFirmwareProtocol(String version) {
String major = "0";
int positionOfDot;
positionOfDot = version.indexOf('.');
if(positionOfDot != -1) {
major = version.substring(0, positionOfDot);
}
return new Integer(major).intValue();
}
}
【问题讨论】:
-
我认为你应该把它设为单例。为什么它是一个 Activity 有什么原因吗?
-
没有理由我只是把它作为一个活动来尝试,只是为了添加 oncreate
-
是的,那么我会使用单例模式。把你所有的逻辑放在那里,你可以从任何地方访问它。这是一个example 如何在 Java 中创建一个
-
谢谢,我会试试
标签: java android inputstream handler outputstream