Problem mit Bluetooth App

  • Antworten:1
Pulver Toastmann
  • Forum-Beiträge: 2

13.02.2012, 13:42:55 via Website

Hi,
bin neu im Java programmieren, komme aber von C, daher sind gewisse Grundlagen gegeben.
Ich möchte eine Bluetooth App für Android erstellen. Folgende Funktionen sollte die App beinhalten: Bluetooth einschalten, Bluetooth ausschalten, Gerät suchen und verbinden, und eine Steuerung (4 Pfeile). Die ersten 2 Funktionen habe ich bereits erfolgreich programmiert, jedoch klappt mit dem suchen und verbinden nicht.
Das Programm stürzt immer ab. Versuche mittlerweile schon seit 3 Stunden das Problem zu lösen, leider ohne Erfolg.
Das Ziel ist es, einmal Verbunden, mit den 4 Pfeilen jeweils den entsprechenden character zu senden; 'F' für Vorwärts, 'R' für Rückwärts, 'R' für Rechts, 'L' für Links. Das Problem ist, ich weiss nicht wie man etwas über Bluetooth vom Handy aus sendet und wie man ein Gerät paart.
Hoffe ihr könnt mir weiterhelfen.
Gruss

PS:
Developer.android.com hat mir leider nicht weitergeholfen. Und über Google finde ich nicht zu diesem Thema.

Bei Klick auf den entsprechenden Button:
1public void SearchDevices (View view)
2{
3 Intent enabler = new Intent(this, DeviceSearch.class);
4 startActivity(enabler);
5}

DeviceSearch:
1import java.util.ArrayList;
2import java.util.List;
3
4import test.iKing.SamplesUtils;
5
6import android.app.ListActivity;
7import android.bluetooth.BluetoothAdapter;
8import android.bluetooth.BluetoothDevice;
9import android.content.BroadcastReceiver;
10import android.content.Context;
11import android.content.DialogInterface;
12import android.content.Intent;
13import android.content.IntentFilter;
14import android.content.DialogInterface.OnDismissListener;
15import android.os.Bundle;
16import android.os.Handler;
17import android.util.Log;
18import android.view.View;
19import android.view.WindowManager;
20import android.widget.ArrayAdapter;
21import android.widget.ListView;
22
23
24public class DeviceSearch extends ListActivity
25{
26 private BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
27
28 private Handler handler = new Handler();
29
30 private List<BluetoothDevice> devices = new ArrayList<BluetoothDevice>();
31
32 private volatile boolean discoveryFinished;
33
34
35 private Runnable discoveryWorkder = new Runnable() {
36 public void run()
37 {
38 /* Start search device */
39 bluetooth.startDiscovery();
40 Log.d("EF-BTBee", ">>Starting Discovery");
41 for (;;)
42 {
43 if (discoveryFinished)
44 {
45 Log.d("EF-BTBee", ">>Finished");
46 break;
47 }
48 try
49 {
50 Thread.sleep(100);
51 }
52 catch (InterruptedException e){}
53 }
54 }
55 };
56
57 /**
58 * Receiver
59 * When the discovery finished be called.
60 */
61 private BroadcastReceiver foundReceiver = new BroadcastReceiver() {
62 public void onReceive(Context context, Intent intent) {
63 /* get the search results */
64 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
65 /* add to list */
66 devices.add(device);
67 /* show the devices list */
68 showDevices();
69 }
70 };
71
72 private BroadcastReceiver discoveryReceiver = new BroadcastReceiver() {
73
74 @Override
75 public void onReceive(Context context, Intent intent)
76 {
77 /* unRegister Receiver */
78 Log.d("EF-BTBee", ">>unregisterReceiver");
79 unregisterReceiver(foundReceiver);
80 unregisterReceiver(this);
81 discoveryFinished = true;
82 }
83 };
84
85 protected void onCreate(Bundle savedInstanceState)
86 {
87 super.onCreate(savedInstanceState);
88 getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
89 setContentView(R.layout.discovery);
90
91 /* BT isEnable */
92 if (!bluetooth.isEnabled())
93 {
94 Log.w("EF-BTBee", ">>BTBee is disable!");
95 finish();
96 return;
97 }
98 /* Register Receiver*/
99 IntentFilter discoveryFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
100 registerReceiver(discoveryReceiver, discoveryFilter);
101 IntentFilter foundFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
102 registerReceiver(foundReceiver, foundFilter);
103
104 /* show a dialog "Scanning..." */
105 SamplesUtils.indeterminate(DeviceSearch.this, handler, "Scanning...", discoveryWorkder, new OnDismissListener() {
106 public void onDismiss(DialogInterface dialog)
107 {
108
109 for (; bluetooth.isDiscovering();)
110 {
111
112 bluetooth.cancelDiscovery();
113 }
114
115 discoveryFinished = true;
116 }
117 }, true);
118 }
119
120
121 /* Show devices list */
122 protected void showDevices()
123 {
124 List<String> list = new ArrayList<String>();
125 if(devices.size() > 0)
126 {
127 for (int i = 0, size = devices.size(); i < size; ++i)
128 {
129 StringBuilder b = new StringBuilder();
130 BluetoothDevice d = devices.get(i);
131 b.append(d.getAddress());
132 b.append('\n');
133 b.append(d.getName());
134 String s = b.toString();
135 list.add(s);
136 }
137 }
138 else
139 list.add("Keine verfügbaren Geräte gefunden!");
140 Log.d("EF-BTBee", ">>showDevices");
141 final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
142 handler.post(new Runnable() {
143 public void run()
144 {
145 setListAdapter(adapter);
146 }
147 });
148 }
149
150 /* Select device */
151 protected void onListItemClick(ListView l, View v, int position, long id)
152 {
153 Log.d("EF-BTBee", ">>Click device");
154 Intent result = new Intent();
155 result.putExtra(BluetoothDevice.EXTRA_DEVICE, devices.get(position));
156 setResult(RESULT_OK, result);
157 finish();
158 }
159}

SamplesUtils:
1import android.app.ProgressDialog;
2import android.content.Context;
3import android.content.DialogInterface.OnDismissListener;
4import android.os.Handler;
5
6abstract class SamplesUtils
7{
8 public static void indeterminate(Context context, Handler handler, String message, final Runnable runnable, OnDismissListener dismissListener)
9 {
10 try
11 {
12
13 indeterminateInternal(context, handler, message, runnable, dismissListener, true);
14 }
15 catch (Exception e)
16 {
17
18 ; // nop.
19 }
20 }
21
22
23 public static void indeterminate(Context context, Handler handler, String message, final Runnable runnable, OnDismissListener dismissListener,
24 boolean cancelable)
25 {
26
27 try
28 {
29
30 indeterminateInternal(context, handler, message, runnable, dismissListener, cancelable);
31 }
32 catch (Exception e)
33 {
34
35 ; // nop.
36 }
37 }
38
39 private static ProgressDialog createProgressDialog(Context context, String message)
40 {
41
42 ProgressDialog dialog = new ProgressDialog(context);
43 dialog.setIndeterminate(false);
44 dialog.setMessage(message);
45
46 return dialog;
47 }
48
49
50 private static void indeterminateInternal(Context context, final Handler handler, String message, final Runnable runnable,
51 OnDismissListener dismissListener, boolean cancelable)
52 {
53
54 final ProgressDialog dialog = createProgressDialog(context, message);
55 dialog.setCancelable(cancelable);
56
57 if (dismissListener != null)
58 {
59
60 dialog.setOnDismissListener(dismissListener);
61 }
62
63 dialog.show();
64
65 new Thread() {
66
67 @Override
68 public void run()
69 {
70 runnable.run();
71
72 handler.post(new Runnable() {
73
74 public void run()
75 {
76
77 try
78 {
79
80 dialog.dismiss();
81 }
82 catch (Exception e)
83 {
84
85 ; // nop.
86 }
87
88 }
89 });
90 };
91 }.start();
92 }
93}

— geändert am 13.02.2012, 16:00:30

Antworten