title: can't start intent startActivityForResult from class
body: <p>I will be very happy if someone can help me, because I'm new at object programming. My problem is: I'm writting some app with bluetooth communication. I wrote all methods and successfully connect and transfer data between devices in <em>MainActivity.class</em>. I have also one <em>SearchActivity.class</em> which shows all devices in range on List, so user can pick one. Device is then passed through Intent to <em>MainActivity</em>, where connection starts. But because of nature of my app I must created separate class, just for Bluetooth communication called <em>BluetoothService.class</em>. I moved all methods for Bluetooth and other stuff to <em>BluetoothService.class.</em>
   Now I even can't compile my project, because I get error at creating Intent for SearchActivity, I also get error startActivityForResult and onActivityResult methods.</p>
  
  <p>First error is: <em>The constructor Intent(BluetoothService, Class) is undefined</em></p>
  
  <p>Second error: <em>The method startActivityForResult(Intent, int) is undefined for the type BluetoothService</em></p>
  
  <pre><code>public void startConnection() {
      // Create an intent for SearchActivity 
      Intent intent = new Intent(this, SearchActivity.class);
      //start SearchActivity through intent and expect for result. 
      //The result is based on result code, which is REQUEST_DISCOVERY
      startActivityForResult(intent, REQUEST_DISCOVERY);              
  }  
  </code></pre>
  
  <p>When I was calling method <em>startConnection()</em> from MainActivity everything worked, but now I it doesn't. I think the problem is, that I can't create new Activity from non-activity class.</p>
  
  <p>Next error is in onActivityResult method: *RESULT_OK cannot be resolved to a variable*</p>
  
  <pre><code>//on ActivityResult method is called, when other activity returns result through intent!
  //when user selected device in SearchActivity, result is passed through intent with //requestCode, resultCode (intent data + requestCode + resultCode)
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (requestCode != REQUEST_DISCOVERY) {
      Log.d("Debug", "&gt;&gt;intent REQUEST_DISCOVERY failed!");
      return;
      }
      if (resultCode != RESULT_OK) {
      Log.d("Debug", "&gt;&gt;intent RESULT_OK failed!");
      return;
      }
      Log.d("Debug", "&gt;&gt;onActivityResult!");
      final BluetoothDevice device = data.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
  
      Log.d(device.getName(), "Name of Selected Bluetoothdevice");
  
  
      new Thread () {
          public void run() {
          //call connect function with device argument
          connect(device);
          };
      }.start();
      }
  </code></pre>
  
  <p>Please, tell me how can I solve this. If you need more info or code tell me. Thanks.</p>
  
  <pre><code>public class SearchActivity  extends ListActivity
  {
      //name of LxDevices, that will be shown on search
      private String nameOfLxDevice = "DEBUG";
  
      private Handler handler = new Handler();
      /* Get Default Adapter */
      private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
      /* Storage the BT devices */
      private List&lt;BluetoothDevice&gt; devices = new ArrayList&lt;BluetoothDevice&gt;();
      /* Discovery is Finished */
      private volatile boolean discoveryFinished;
  
  
      /* Start search device */ 
      private Runnable discoveryWorker = new Runnable() {
          public void run() 
          {
              //To start discovering devices, simply call startDiscovery(). The process is asynchronous and the method will 
              //immediately return with a boolean indicating whether discovery has successfully started.
              mBluetoothAdapter.startDiscovery();
              Log.d("debug", "&gt;&gt;Starting Discovery");
              for (;;) 
              {
                  if (discoveryFinished) 
                  {
                      Log.d("debug", "&gt;&gt;Finished");
                      break;
                  }
                  try 
                  {
                      Thread.sleep(100);
                  } 
                  catch (InterruptedException e){}
              }
          }
      }; 
  
      /* when discovery is finished, this will be called */
      //Your application must register a BroadcastReceiver for the ACTION_FOUND Intent in order to receive information about each device discovered.
      //For each device, the system will broadcast the ACTION_FOUND Intent. This Intent carries the extra fields EXTRA_DEVICE and EXTRA_CLASS,
      //containing a BluetoothDevice and a BluetoothClass, respectively
  
      private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
          public void onReceive(Context context, Intent intent) {
              /* get the search results */
              BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);               
                  //add it on List&lt;BluetoothDevice&gt;
                  devices.add(device);
                  //show found LxDevice on list
                  showDevices();
              }           
          }
      };
  
      private BroadcastReceiver discoveryReceiver = new BroadcastReceiver() {
          @Override
          public void onReceive(Context context, Intent intent)  
          {
              /* unRegister Receiver */
              Log.d("debug", "&gt;&gt;unregisterReceiver");
              unregisterReceiver(mBroadcastReceiver);
              unregisterReceiver(this);
              discoveryFinished = true;
          }
      };
  
      protected void onCreate(Bundle savedInstanceState)
      {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_search);
  
          /* BT isEnable */
          if (!mBluetoothAdapter.isEnabled())
          {
              Log.w("debug", "&gt;&gt;BT is disable!");
              finish();
              return;
          }
          /* Register Receiver*/
          IntentFilter discoveryFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
          registerReceiver(discoveryReceiver, discoveryFilter);
          IntentFilter foundFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
          registerReceiver(mBroadcastReceiver, foundFilter);
  
  
          /* show a dialog "Scanning..." */ 
          SamplesUtils.indeterminate(SearchActivity.this, handler, "Scanning for LX devices..", discoveryWorker, new OnDismissListener() {
              public void onDismiss(DialogInterface dialog)
              {
                  for (; mBluetoothAdapter.isDiscovering();) {
                      // Discovery is resource intensive.  Make sure it isn't going on when you attempt to connect and pass your message.
                      mBluetoothAdapter.cancelDiscovery();
                  }
                  discoveryFinished = true;
              }
          }, true); 
      }
  
      /* Show devices list */
      private void showDevices()
      {
          //Create a list of strings
          List&lt;String&gt; list = new ArrayList&lt;String&gt;();
          for (int i = 0, size = devices.size(); i &lt; size; ++i) {
              StringBuilder b = new StringBuilder();
              BluetoothDevice d = devices.get(i);
              b.append(d.getName());
              b.append('\n');
              b.append(d.getAddress());
              String s = b.toString();
              list.add(s);
          }
  
          Log.d("debug", "&gt;&gt;showDevices");
          final ArrayAdapter&lt;String&gt; adapter = new ArrayAdapter&lt;String&gt;(this, android.R.layout.simple_list_item_1, list);
          handler.post(new Runnable() {
              public void run()
              {
                  setListAdapter(adapter);
              }
          });
      }
  
      /* Select device */
      protected void onListItemClick(ListView l, View v, int position, long id) {
          Log.d("debug", "&gt;&gt;Click device");
          Intent result = new Intent();
          result.putExtra(BluetoothDevice.EXTRA_DEVICE, devices.get(position));
          setResult(RESULT_OK, result);
          finish();
      }
  
  }
  </code></pre>
  
  <p>In MainActivity I am doing: </p>
  
  <pre><code>// Initialize the BluetoothChatService to perform bluetooth connections
      mBluetoothService = new BluetoothService(this);
  </code></pre>
  
  <p>Constructor in BluetoothService is:</p>
  
  <pre><code> public BluetoothService(Context context) {
  
      }
  </code></pre>
  
  <p>connect method: </p>
  
  <pre><code>protected void connect(BluetoothDevice device) {
      try {
      //Create a Socket connection: need the server's UUID number of registered
      BluetoothSocket socket = null;
      socket = device.createRfcommSocketToServiceRecord(MY_UUID);         
      socket.connect();
          //Create temporary input and output stream
           InputStreamtmpIn=socket.getInputStream();                                                      
      OutputStream tmpOut = socket.getOutputStream();
  
      //for use purposes
      mmSocket = socket;
      mmOutStream = tmpOut;
      mmInStream = tmpIn;
  
      tmpOut.write("Device connected..".getBytes());
  
      //start Thread for receiving data over bluetooth
      //dataReceiveThread.start();
  
      } catch (IOException e) {
          Log.e("Colibri2BB BT", "", e);
      } 
  }
  </code></pre>