2016-03-16 61 views
0

我想通過使用Intent的putExtra(String str, Bundle bundle)方法將我的BluetoothAdapter BA傳遞給另一個活動,但是我的Android工作室的編譯器顯示了一個錯誤。當我將鼠標懸停在該方法下會出現一個紅色的曲線,它顯示我無法通過意圖的putExtra方法傳遞BluetoothAdapter對象

Can't resolve method 'putExtra(java.lang.String, android.bluetooth.BluetoothAdapter)' 

enter image description here 這就是我講的

如果我理解正確的話,捆綁基本上是任何對象,因此不應該有任何問題通過putExtra將BluetoothAdapter傳遞給其他活動。

這是我MainActivity.java

package vertex2016.mvjce.edu.bluealert; 

import android.bluetooth.BluetoothAdapter; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Gravity; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Toast; 

import static java.lang.Thread.sleep; 

public class MainActivity extends AppCompatActivity { 

    public BluetoothAdapter BA = BluetoothAdapter.getDefaultAdapter(); 
    private int REQ_CODE = 1; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    public void connect(View v) 
    { 
     if(BA == null) 
      Toast.makeText(MainActivity.this, "System Doesn't Support Bluetooth", Toast.LENGTH_SHORT).show(); 

     else if(!BA.isEnabled()) 
     { 
      Intent enableBT = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
      startActivityForResult(enableBT, REQ_CODE); 
     } 
     else { 
      Toast.makeText(MainActivity.this, "ALREADY ON!!", Toast.LENGTH_SHORT).show(); 
      searchBTDevices(); 
     } 
    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(resultCode!=RESULT_CANCELED) { 
      Toast.makeText(MainActivity.this, "TURNED ON!", Toast.LENGTH_SHORT).show(); 
      searchBTDevices(); 
     } 
     else 
      Toast.makeText(MainActivity.this,"FAILED TO ENABLE BLUETOOTH", Toast.LENGTH_LONG).show(); 
    } 




    public void searchBTDevices() 
    { 
     Thread searchThread = new Thread() { 
      @Override 
      public void run() { 
       Intent searchBT = new Intent(getApplicationContext(), SearchBTDevice.class); 
       searchBT.putExtra("BT_ADAPTER", BA); 
       startActivity(searchBT); 
      } 
     }; 
     searchThread.start(); 
    } 
} 

這是我SearchBTDevices.java是應該接受額外的信息。

package vertex2016.mvjce.edu.bluealert; 

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 

public class SearchBTDevice extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_search_btdevice); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

} 

我哪裏錯了?

謝謝你的時間!

+0

BluetoothAdapter不是Parcelable或任何其他可以裝入Bundle的對象,因此您無法做到這一點。您必須將適配器放回到意圖打開的活動中。 – DeeV

+0

我該怎麼做?我是Android的新手 – Auro

+0

'BluetoothAdapter.getDefaultAdapter()'是一種靜態方法,因此可以在任何地方調用它。如果'SearchBTDevices'需要一個藍牙適配器,那麼它可以調用它來檢索它。 – DeeV

回答

0

意圖只能用於傳遞基元,ParcelableSerializable對象。 BluetoothAdapter不支持其中任何一種,也不能從基元構建,因此您無法創建可幫助您的Parcelable。

所以當面對這樣的情況時,你需要傳遞Activty可以用來重新構建或檢索執行所需的對象的參數。

如果您需要使用不同BluetoothAdapter的功能,那麼您需要告訴SearchBTDevices您要檢查哪個BluetoothAdapter並讓SearchBTDevices檢索適配器本身。例如,

public class SearchBTDevices extends Activity { 
    public static final String PARAM_ADAPTER_TYPE = "adapterType"; 
    public static final int ADAPTER_DEFAULT = 1; 
    public static final int ADAPTER_ALTERNATE = 2; 

    private BluetoothAdapter mAdapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     int adapterType = getIntent().getIntExtra(PARAM_ADAPTER_TYPE, ADAPTER_DEFAULT); 
     switch(adapterType) { 
     case PARAM_ADAPTER_ALTERNATE: 
      mAdapter = getAlternateAdapter(); // This is whatever method you need to get it. 
      break; 
     default: 
      mAdapter = getDefaultAdapter(); 
     } 
    } 
} 

現在,每當你需要啓動這個活動,只是這樣做:

Intent intent = new Intent(getContext(), SearchBTDevices.class); 
intent.putExtra(SearchBTDevices.PARAM_ADAPTER_TYPE, SearchBTDevices.ADAPTER_ALTERNATE); 
startActivity(intent); 

所以當SearchBTDevices啓動時,它會從意圖拉參數,並知道它需要使用備用適配器。

相關問題