【Android源码 栏目提醒】:网学会员在Android源码 频道为大家收集整理了“BluetoothChat.java android源代码 - 编程语言“提供大家参考,希望对大家有所帮助!
BluetoothChat.java android源代码 / Copyright C 2009 The Android Open Source Project Licensed under the Apache License Version 2.0 the License you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing software distributed under the License is distributed on an AS IS BASIS WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND either express or implied. See the License for the specific language governing permissions and limitations under the License. / package com.example.android.BluetoothChat import android.app.Activity import android.bluetooth.BluetoothAdapter import android.bluetooth.BluetoothDevice import android.content.Intent import android.os.Bundle import android.os.Handler import android.os.Message import android.util.Log import android.view.KeyEvent import android.view.Menu import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.Window import android.view.View.OnClickListener import android.view.inputmethod.EditorInfo import android.widget.ArrayAdapter import android.widget.Button import android.widget.EditText import android.widget.ListView import android.widget.TextView import android.widget.Toast / This is the main Activity that displays the current chat session. / public class BluetoothChat extends Activity // Debugging private static final String TAG BluetoothChat private static final boolean D true // Message types sent from the BluetoothChatService Handler public static final int MESSAGE_STATE_CHANGE 1 public static final int MESSAGE_READ 2 public static final int MESSAGE_WRITE 3 public static final int MESSAGE_DEVICE_NAME 4 public static final int MESSAGE_TOAST 5 // Key names received from the BluetoothChatService Handler public static final String DEVICE_NAME device_name public static final String TOAST toast // Intent request codes private static final int REQUEST_CONNECT_DEVICE 1 private static final int REQUEST_ENABLE_BT 2 // Layout Views private TextView mTitle private ListView mConversationView private EditText mOutEditText private Button mSendButton // Name of the connected device private String mConnectedDeviceName null // Array adapter for the conversation thread private ArrayAdapter mConversationArrayAdapter // String buffer for outgoing messages private StringBuffer mOutStringBuffer // Local Bluetooth adapter private BluetoothAdapter mBluetoothAdapter null // Member object for the chat services private BluetoothChatService mChatService null Override public void onCreateBundle savedInstanceState super.onCreatesavedInstanceState ifD Log.eTAG ON CREATE // Set up the window layout requestWindowFeatureWindow.FEATURE_CUSTOM_TITLE setContentViewR.layout.main getWindow.setFeatureIntWindow.FEATURE_CUSTOM_TITLE R.layout.custom_title // Set up the custom title mTitle TextView findViewByIdR.id.title_left_text mTitle.setTextR.string.app_name mTitle TextView findViewByIdR.id.title_right_text // Get local Bluetooth adapter mBluetoothAdapter BluetoothAdapter.getDefaultAdapter // If the adapter is null then Bluetooth is not supported if mBluetoothAdapter null Toast.makeTextthis Bluetooth is not available Toast.LENGTH_LONG.show finish return Override public void onStart super.onStart ifD Log.eTAG ON START // If BT is not on request that it be enabled. // setupChat will then be called during onActivityResult if mBluetoothAdapter.isEnabled Intent enableIntent new IntentBluetoothAdapter.ACTION_REQUEST_ENABLE startActivityForResultenableIntent REQUEST_ENABLE_BT // Otherwise setup the chat session else if mChatService null setupChat Override public synchronized void onResume super.onResume ifD Log.eTAG ON RESUME // Performing this check in onResume covers the case in which BT was // not enabled during onStart so we were paused to enable it... // onResume will be called when ACTION_REQUEST_ENABLE activity returns. if mChatService null // Only if the state is STATE_NONE do we know that we havent started already if mChatService.getState BluetoothChatService.STATE_NONE // Start the Bluetooth chat services mChatService.start private void setupChat Log.dTAG setupChat // Initialize the array adapter for the conversation thread mConversationArrayAdapter new ArrayAdapterthis R.layout.message mConversationView ListView findViewByIdR.id.in mConversationView.setAdaptermConversationArrayAdapter // Initialize the compose field with a listener for the return key mOutEditText EditText findViewByIdR.id.edit_text_out mOutEditText.setOnEditorActionListenermWriteListener // Initialize the send button with a listener that for click events mSendButton Button findViewByIdR.id.button_send mSendButton.setOnClickListenernew OnClickListener public void onClickView v // Send a message using content of the edit text widget TextView view TextView findViewByIdR.id.edit_text_out String message view.getText.toString sendMessagemessage // Initialize the BluetoothChatService to perform bluetooth connections mChatService new BluetoothChatServicethis mHandler // Initialize the buffer for outgoing messages mOutStringBuffer new StringBuffer Override public synchronized void onPause super.onPause ifD Log.eTAG - ON PAUSE - Override public void onStop super.onStop ifD Log.eTAG -- ON STOP -- Override public void onDestroy super.onDestroy // Stop the Bluetooth chat services if mChatService null mChatService.stop ifD Log.eTAG --- ON DESTROY --- private void ensureDiscoverable ifD Log.dTAG ensure discoverable if mBluetoothAdapter.getScanMode BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE Intent discoverableIntent new IntentBluetoothAdapter.ACTION_REQUEST_DISCOVERABLE discoverableIntent.putExtraBluetoothAdapter.EXTRA_DISCOVERABLE_DURATION 300 startActivitydiscoverableIntent / Sends a message. param message A string of text to send. / private void sendMessageString message // Check that were actually connected before trying anything if mChatService.getState BluetoothChatService.STATE_CONNECTED Toast.makeTextthis R.string.not_connected Toast.LENGTH_SHORT.show return // Check that theres actually something to send if message.length 0 // Get the message bytes and tell the BluetoothChatService to write byte send message.getBytes mChatService.writesend // Reset out string buffer to zero and clear the edit text field mOutStringBuffer.setLength0 mOutEditText.setTextmOutStringBuffer // The action listener for the EditText widget to listen for the return key private TextView.OnEditorActionListener mWriteListener new TextView.OnEditorActionListener public boolean onEditorActionTextView view int actionId KeyEvent event // If the action is a key-up event on the return key send the message if actionId EditorInfo.IME_NULL event.getAction KeyEvent.ACTION_UP String message view.getText.toString sendMessagemessage ifD Log.iTAG END onEditorAction return true // The Handler that gets information back from the BluetoothChatService private final Handler mHandler new Handler Override public void handleMessageMessage msg switch msg.what case MESSAGE_STATE_CHANGE: ifD Log.iTAG MESSAGE_STATE_CHANGE: msg.arg1 switch msg.arg1 case BluetoothChatService.STATE_CONNECTED: mTitle.setTextR.string.title_connected_to mTitle.appendmConnectedDeviceName mConversationArrayAdapter.clear break case BluetoothChatService.STATE_CONNECTING: mTitle.setTextR.string.title_connecting break case BluetoothChatService.STATE_LISTEN: case BluetoothChatService.STATE_NONE: mTitle.setTextR.string.title_not_connected break break case MESSAGE_WRITE: byte writeBuf byte msg.obj // construct a string from the buffer String writeMessage new StringwriteBuf mConversationArrayAdapter.addMe: writeMessage break case MESSAGE_READ: byte readBuf byte msg.obj // construct a string from the valid bytes in the buffer String readMessage new StringreadBuf 0 msg.arg1 mConversationArrayAdapter.addmConnectedDeviceName: readMessage break case MESSAGE_DEVICE_NAME: // save the connected devices name mConnectedDeviceName msg.getData.getStringDEVICE_NAME Toast.makeTextgetApplicationContext Connected to mConnectedDeviceName Toast.LENGTH_SHORT.show break case MESSAGE_TOAST: Toast.makeTextgetApplicationContext msg.getData.getStringTOAST Toast.LENGTH_SHORT.show break public void onActivityResultint requestCode int resultCode Intent data ifD Log.dTAG onActivityResult resultCode switch requestCode case REQUEST_CONNECT_DEVICE: // When DeviceListActivity returns with a device to connect if resultCode Activity.RESULT_OK // Get the device MAC address String address data.getExtras .getStringDeviceListActivity.EXTRA_DEVICE_ADDRESS // Get the BLuetoothDevice object BluetoothDevice device mBluetoothAdapter.getRemoteDeviceaddress // Attempt to connect to the device mChatService.connectdevice break case REQUEST_ENABLE_BT: // When the request to enable Bluetooth returns if resultCode Activity.RESULT_OK // Bluetooth is now enabled so set up a chat session setupChat else // User did not enable Bluetooth or an error occured Log.dTAG BT not enabled Toast.makeTextthis R.string.bt_not_enabled_leaving Toast.LENGTH_SHORT.show finish Override public boolean onCreateOptionsMenuMenu menu MenuInflater inflater getMenuInflater inflater.inflateR.menu.option_menu menu return true Override public boolean onOptionsItemSelectedMenuItem item switch item.getItemId case R.id.scan: // Launch the DeviceListActivity to see devices and do scan Intent serverIntent new Intentthis DeviceListActivity.class startActivityForResultserverIntent REQUEST_CONNECT_DEVICE return true case R.id.discoverable: // Ensure this device is discoverable by others ensureDiscoverable return true return false