HTC_Express Posté(e) 6 novembre 2015 Share Posté(e) 6 novembre 2015 Bonjour, Le monde Android est tout nouveau pour moi et je suis quelque peu perdu...Le but de mon activité : récolter des données via bluetooth pour les afficher et les stocker J'ai déja réussi à me connecter et à recevoir les données comme je l'entend, mais maintenant je galère à les afficher dans mes fragment. Je précise que l'affichage doit être instantané, à la réception de la trame via Bluetooth je doit pouvoir mettre à jour mon Fragment actif. Le problème se situ dans mon onCreate() de mon activité : PageMilieuFragment frag = new PageMilieuFragment(); Bundle bundle = new Bundle(); bundle.putInt("key", 12); frag.setArguments(bundle); Mon activity au complet : package com.tutos; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; import java.util.Vector; import android.app.FragmentTransaction; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class FragmentsSliderActivity extends FragmentActivity { private PagerAdapter mPagerAdapter; private static final String TAG = "bluetooth2"; private boolean saving; private int onload; private String fileName = "default"; private String btaddr; Button btnOn, btnOff; Handler h; final int RECIEVE_MESSAGE = 1; // Status for Handler private BluetoothAdapter btAdapter = null; private BluetoothSocket btSocket = null; private StringBuilder sb = new StringBuilder(); private ConnectedThread mConnectedThread; // SPP UUID service private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); @[member=override] protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.viewpager); SharedPreferences mPrefs = getSharedPreferences("label", 0); saving = mPrefs.getBoolean("saving", false); fileName = mPrefs.getString("fileName", "default_value_if_variable_not_found.csv"); btaddr = mPrefs.getString("btaddr", "20:14:09:17:00:40"); onload = mPrefs.getInt("onload", 0); PageMilieuFragment frag = new PageMilieuFragment(); Bundle bundle = new Bundle(); bundle.putInt("key", 12); frag.setArguments(bundle); // Création de la liste de Fragments que fera défiler le PagerAdapter List<Fragment> fragments = new Vector<Fragment>(); // Ajout des Fragments dans la liste fragments.add(Fragment.instantiate(this,PageGaucheFragment.class.getName())); fragments.add(Fragment.instantiate(this,PageMilieuFragment.class.getName())); fragments.add(Fragment.instantiate(this,PageDroiteFragment.class.getName())); // Création de l'adapter qui s'occupera de l'affichage de la liste de // Fragments this.mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), fragments); ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager); // Affectation de l'adapter au ViewPager pager.setAdapter(this.mPagerAdapter); h = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case RECIEVE_MESSAGE: // if receive massage byte[] readBuf = (byte[]) msg.obj; String strIncom = new String(readBuf, 0, msg.arg1); // create string from bytes array sb.append(strIncom); // append string int endOfLineIndex = sb.indexOf("\r\n"); // determine the end-of-line if (endOfLineIndex > 0) { // if end-of-line, String sbprint = sb.substring(0, endOfLineIndex); // extract string sb.delete(0, sb.length()); int itemCount = aList.size(); //Si la trame est complète if(itemCount == 13){ //Traitement de la trame // // // } } //Log.d(TAG, "...String:"+ sb.toString() + "Byte:" + msg.arg1 + "..."); break; } }; }; btAdapter = BluetoothAdapter.getDefaultAdapter(); // get Bluetooth adapter checkBTState(); } private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { if(Build.VERSION.SDK_INT >= 10){ try { final Method m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class }); return (BluetoothSocket) m.invoke(device, MY_UUID); } catch (Exception e) { Log.e(TAG, "Could not create Insecure RFComm Connection",e); } } return device.createRfcommSocketToServiceRecord(MY_UUID); } @[member=override] public void onResume() { super.onResume(); Log.d(TAG, "...onResume - try connect..."); // Set up a pointer to the remote node using it's address. BluetoothDevice device = btAdapter.getRemoteDevice(btaddr); // Two things are needed to make a connection: // A MAC address, which we got above. // A Service ID or UUID. In this case we are using the // UUID for SPP. try { btSocket = createBluetoothSocket(device); } catch (IOException e) { errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + "."); } // Discovery is resource intensive. Make sure it isn't going on // when you attempt to connect and pass your message. btAdapter.cancelDiscovery(); // Establish the connection. This will block until it connects. Log.d(TAG, "...Connecting..."); try { btSocket.connect(); Log.d(TAG, "....Connection ok..."); } catch (IOException e) { try { btSocket.close(); } catch (IOException e2) { errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + "."); } } // Create a data stream so we can talk to server. Log.d(TAG, "...Create Socket..."); mConnectedThread = new ConnectedThread(btSocket); mConnectedThread.start(); } @[member=override] public void onPause() { super.onPause(); Log.d(TAG, "...In onPause()..."); try { btSocket.close(); } catch (IOException e2) { errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + "."); } } private void checkBTState() { // Check for Bluetooth support and then check to make sure it is turned on // Emulator doesn't support Bluetooth and will return null if(btAdapter==null) { errorExit("Fatal Error", "Bluetooth not support"); } else { if (btAdapter.isEnabled()) { Log.d(TAG, "...Bluetooth ON..."); } else { //Prompt user to turn on Bluetooth Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, 1); } } } private void errorExit(String title, String message){ Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show(); finish(); } public class ConnectedThread extends Thread { private final InputStream mmInStream; private final OutputStream mmOutStream; public ConnectedThread(BluetoothSocket socket) { InputStream tmpIn = null; OutputStream tmpOut = null; // Get the input and output streams, using temp objects because // member streams are final try { tmpIn = socket.getInputStream(); tmpOut = socket.getOutputStream(); } catch (IOException e) { } mmInStream = tmpIn; mmOutStream = tmpOut; } public void run() { byte[] buffer = new byte[256]; // buffer store for the stream int bytes; // bytes returned from read() // Keep listening to the InputStream until an exception occurs while (true) { try { // Read from the InputStream bytes = mmInStream.read(buffer); // Get number of bytes and message in "buffer" h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget(); // Send to message queue Handler } catch (IOException e) { break; } } } /* Call this from the main activity to send data to the remote device */ public void write(String message) { Log.d(TAG, "...Data to send: " + message + "..."); byte[] msgBuffer = message.getBytes(); try { mmOutStream.write(msgBuffer); } catch (IOException e) { Log.d(TAG, "...Error data send: " + e.getMessage() + "..."); } } } } Mon fragment : public class PageMilieuFragment extends Fragment { @[member=override] public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View myInflatedView = inflater.inflate(R.layout.page_milieu_layout, container, false); Bundle bundle = this.getArguments(); if (bundle != null) { Log.d("TEST", "...Bundle not null..."); }else{ Log.d("TEST", "...Bundle null..."); } return myInflatedView; } } Dans l'état mon Bundle est toujours == null impossible de récupérer mon argument et sa valeur. J'ai essayé pas mal de chose sur le net mais toujours sans succès, quelqu'un pourrait-il m'aider ? D'avance merci Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
grabeuh Posté(e) 16 novembre 2015 Share Posté(e) 16 novembre 2015 (modifié) Tu tiens vraiment à passer par un Bundle ? Pourquoi pas une méthode publique setKey(int key) sur ton Fragment que tu appelerais dans ton Activity ? Sinon, pour répondre à ta question, tu as : PageMilieuFragment frag = new PageMilieuFragment(); Mais tu n'utilises jamais frag. Tu récrées une nouvelles instance ici fragments.add(Fragment.instantiate(this,PageMilieuFragment.class.getName())); Et tu ne lui passes pas de Bundle. Je pense que ton souci vient de là. Modifié 16 novembre 2015 par Hervé Rilos Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.