Aller au contenu

Communication Activity -> Fragment


HTC_Express

Recommended Posts

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

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é par Hervé Rilos
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...