1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

sms über bluetooth?

  • MrBurns
  • 20. April 2005 um 17:37
  • Unerledigt
  • MrBurns
    6
    MrBurns
    Mitglied
    Punkte
    375
    Beiträge
    59
    • 20. April 2005 um 17:37
    • #1

    Hi!

    Habe folgendes vor: jeden, der in bluetooth-range ist, eine Nachricht zukommen lassen. Das ganze sollte in java sein (weil ich mich mit C wirklich nicht auskenn) und möglichst auf Linux laufen (noch lieber auf mac os x, aber die haben eine grausige eigene bluetooth bzw. serielle-ports Implementierung ...)

    Es gibt hier im Forum eh schon einen ähnlichen Thread (die sms-wall), und ich hab mir die jsmsengine eh auch schon angeschaut, nur is das halt die falsche Richtung. (mensch -> computer, nicht computer -> mensch ...) So wie ich das sehe, muss man wohl echt AT - Commands ans Handy schicken (80er lassen grüssen) und ihm vorgaukeln, eine sms zu bekommen, obwohl die message eigentlich über bluetooth kommt.

    Die andere Möglichkeit die ich angedacht hab ist, beim Finden eines neuen Geräts seine tel# vom sim auszulesen und dann mit sowas wie jsms eine sms zu schicken, aber ich befürchte das geht dann doch nicht so leicht. man kann zwar schon Info über die sim auslesen, aber ob das auch für die tel# geht ....? ausserdem wär das ja auch nicht wirklich nett / legal ... :devil:

    Optimal wäre es, wenn der Benutzer eine Nachricht bekommt "xxx will über bluetooth kontakt aufnehmen" und wenn er mit "ja" antwortet bekommt er eine generierte Nachricht ...

    hat da jemand eine Idee? ich bin schon so weit, bluetooth-geräte zu finden (in java: http://www.avetana-gmbh.de/avetana-gmbh/p…/jsr82.eng.xml), aber dann kommt die ganze g'schicht mit den services, und da steh ich irgendwie an: messages zu empfangen sollte doch eigentlich prinzipiell auf jedem bluetooth-handy möglich sein (von mir aus auch in der form von vCards, wurscht) ... :confused:

  • MarvinTheRobot
    26
    MarvinTheRobot
    Mitglied
    Reaktionen
    53
    Punkte
    7.308
    Beiträge
    1.368
    • 20. April 2005 um 18:29
    • #2

    ich kann nur zum letzten absatz was sagen: natürlich is text empfangen mit bluetooth möglich... schon mal was von bluejacking gehört? :devil: macht spass, hab ich letztens wieder exzessiv gegenüber n-gage phones praktiziert.... vcard auswählen in der ein text steht, via bluetooth senden.... fertig.

    blöd isses halt wenn das handy bei der verbindung mit einem bluetooth dongle einen code verlangt.... (schlüssel der auf beiden geräten eingegeben werden muss) dann stehst natürlich an, ist klar....

    Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders!
    http://www.chuckbronson.net/

  • MrBurns
    6
    MrBurns
    Mitglied
    Punkte
    375
    Beiträge
    59
    • 20. April 2005 um 18:31
    • #3

    ok, so eine vCard würd ich jetzt gern am PC generieren und verschicken ... bloß ... wie geht?

  • MarvinTheRobot
    26
    MarvinTheRobot
    Mitglied
    Reaktionen
    53
    Punkte
    7.308
    Beiträge
    1.368
    • 20. April 2005 um 18:36
    • #4

    ähm am pc? outlook?

    osX -> das stinknormale Adressbuch liest vCards und erzeugt diese auch.... das übernimmt sogar das adressbuch vom telefon beim iSync als vCards....

    EDIT: rename txt to vcf -> das is das layout einer vcard datei. ich hab grad von meiner windows kiste via bluetooth sowas aufs S65 versandt... hat funktioniert nur weiss ich net wo die datei am handy gelandet is....

    Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders!
    http://www.chuckbronson.net/

  • MrBurns
    6
    MrBurns
    Mitglied
    Punkte
    375
    Beiträge
    59
    • 20. April 2005 um 19:04
    • #5

    ok, Du hast das mit irgendeinem Programm geschickt, ich würd das gern programmatisch aus java aus machen ...

    = so eine vcard nehmen, in bytecode umwandeln, die nötigen headers anhängen und dann einen kanal finden, über den man das verschicken kann ... bin dabei ...

  • MrBurns
    6
    MrBurns
    Mitglied
    Punkte
    375
    Beiträge
    59
    • 23. April 2005 um 19:40
    • #6

    ok, hab das jetzt hinbekommen, falls es wen interessiert, hier eine vcard-klasse, die sich im passenden obex-bytecode zurückgibt. Is noch alles andere als perfekt, aber als proof of concept passts (so kann z.B. eine vCard noch nicht länger als 8kb = 1 packet sein).
    Den bytecode schickt man dann über einen passenden stream ans andere bluetooth-device (http://www.avetana-gmbh.de/avetana-gmbh/jsr82.xml).
    mehr Info unter http://benhui.net/

    Java
    import java.io.UnsupportedEncodingException;
    
    
    
    
    // VCard 3.0 defintion: http://www.ietf.org/rfc/rfc2425.txt
    public class VCard {
    
    
    	 private byte[] toByteArray(String hex) {
    	 	 java.util.Vector res = new java.util.Vector();
    	 	 String part;
    	 	 int pos = 0;
    	 	 int len = 0;
    
    	 	 while (pos<hex.length()) {
    	 	 	len = ((hex.substring(pos,pos+1).equals("-")) ? 3 : 2);
    	 	 	part = hex.substring(pos,pos+len);
    	 	 	pos += len;
    	 	 	int test = Integer.parseInt(part,16);
    	 	 	res.add(new Byte((byte)test));
    	 	 }
    
    	 	 if (res.size()>0) {
    	 	 	byte[] b = new byte[res.size()];
    
    	 	 	for (int i=0; i<res.size(); i++) {
    	 	 		Byte a = (Byte)res.elementAt(i);
    	 	 		b[i] = a.byteValue();
    	 	  	}
    
    	 	 	return b;
    
    	 	 } else {
    	 	 	return null;
    	 	 }
     	 }
    
    
    	
    
    	private String title, firstname, lastname, phone, email;
    
    	public VCard(String title, String firstName, String lastName, String phone, String email) {
    		this.title = title;
    		this.firstname = firstName;
    		this.lastname = lastName;
    		this.phone = phone;
    		this.email = email;
    
    	}
    
    	public byte[] getBodyHeader() throws UnsupportedEncodingException {
    		byte[] header = new byte[3];
    
    		header[0] = 0x49;
    
    		byte[] headerRest = toByteArray(Integer.toHexString(getBody().length+3));
    
    		switch(headerRest.length) {
    
    			case 1:
    				header[1] = 0x00;
    				header[2] = headerRest[0];
    				return header;
    			case 2:
    				header[1] = headerRest[1];
    				header[2] = headerRest[2];
    				return header;
    			default:
    				throw new UnsupportedEncodingException(); 
    		}
    
    	}
    
    	public byte[] getBody() {
    
    		byte[] value = null;
    		String vcardBody = "BEGIN:VCARD\r\nVERSION:3.0\r\nN:";
    
    
    
    		if(lastname != null) {
    			vcardBody += lastname;
    		}
    
    		vcardBody += ";";
    
    		if(firstname != null) {
    			vcardBody += firstname;
    		}
    
    		vcardBody += ";;;\r\n";
    
    		if(phone != null) {
    			vcardBody += "TEL;type=pref:"+phone+"\r\n";
    		}
    
    
    		if(email != null) {
    			vcardBody += "EMAIL;INTERNET:"+email+"\r\n";
    		}
    
    		vcardBody += "END:VCARD\r\n";
    
    		return vcardBody.getBytes();
    	}
    
    	public byte[] getBodyHeaderWO() throws UnsupportedEncodingException {
    		byte[] header = new byte[5];
    
    		// HI for "name"
    		header[0] = (byte) 0xc3;
    
    		// +3 for the header
    		byte[] headerRest = toByteArray(Integer.toHexString(getBody().length));
    
    		switch (headerRest.length)
    		{
    			case 1:
    				header[1] = 0x00;
    				header[2] = 0x00;
    				header[3] = 0x00;
    				header[4] = headerRest[0];
    				return header;
    			case 2:
    				header[1] = 0x00;
    				header[2] = 0x00;
    				header[3] = headerRest[0];
    				header[4] = headerRest[1];
    				return header;
    			case 3:
    				header[1] = 0x00;
    				header[2] = headerRest[0];
    				header[3] = headerRest[1];
    				header[4] = headerRest[2];
    				return header;
    			case 4:
    				header[1] = headerRest[0];
    				header[2] = headerRest[1];
    				header[3] = headerRest[2];
    				header[4] = headerRest[3];
    				return header;
    			default:
    				// throws exception if title is too long
    				throw new UnsupportedEncodingException();
    
    
    		}
    
    	}
    
    
    	/**
    	 * 
    	 * @return The "name" header
    	 * @throws UnsupportedEncodingException if the title is too long
    	 */
    	public byte[] getTitleHeader() throws UnsupportedEncodingException {
    		byte[] header = new byte[3];
    
    		// HI for "name"
    		header[0] = 0x01;
    
    		// +3 for the header
    		byte[] headerRest = toByteArray(Integer.toHexString(getTitle().length+3));
    
    		switch (headerRest.length)
    		{
    			case 1:
    				header[1] = 0x00;
    				header[2] = headerRest[0];
    				return header;
    			case 2:
    				header[1] = headerRest[0];
    				header[2] = headerRest[1];
    				return header;
    			default:
    				// throws exception if title is too long
    				throw new UnsupportedEncodingException();
    		}
    
    	}
    
    	public byte[] getTitle() {
    		byte[] title = this.title.getBytes();
    		byte[] title2 = new byte[title.length*2+2];
    
    		int j=0;
    		int i=0;
    		for(i=0; i<title.length; i++) {
    			title2[j] = 0x00;
    			title2[j+1] = title[i];
    			j += 2;
    		}
    		j -= 1;
    
    		title2[j+1] = 0x00;
    		title2[j+2] = 0x00;
    
    		return title2;
    	}
    
    	public byte[] getCardBytes() throws UnsupportedEncodingException {
    
    		int pos = 0;
    		int totalLength = 13 + getTitle().length + 3 + getBody().length + 3;
    
    		byte[] data = new byte[totalLength];
    
    		byte[] headerRest = toByteArray(Integer.toHexString(totalLength));
    		byte[] header = new byte[3];
    		header[0] = (byte) 0x82;
    
    		switch(headerRest.length) {
    
    			case 1:
    				header[1] = 0x00;
    				header[2] = headerRest[0];
    				break;
    			case 2:
    				header[1] = headerRest[0];
    				header[2] = headerRest[1];
    				break;
    			default:
    				throw new UnsupportedEncodingException();
    
    		}
    
    
    		for(int i=0; i<header.length; i++)
    			data[pos++] = header[i];
    
    
    		data[pos++] = (byte) 0xcb;
    		data[pos++] = (byte) 0xc3;
    		data[pos++] = (byte) 0x0f;
    		data[pos++] = (byte) 0xa5;
    		data[pos++] = (byte) 0x96;
    
    		for(int i=0; i<getTitleHeader().length; i++)
    			data[pos++] = getTitleHeader()[i];
    
    		for(int i=0; i<getTitle().length; i++)
    			data[pos++] = getTitle()[i];
    
    		for(int i=0; i<getBodyHeaderWO().length; i++)
    			data[pos++] = getBodyHeaderWO()[i];
    
    		for(int i=0; i<getBodyHeader().length; i++)
    			data[pos++] = getBodyHeader()[i];
    
    		for(int i=0; i<getBody().length; i++)
    			data[pos++] = getBody()[i];
    
    		return data;
    	}
    }
    Alles anzeigen
  • Superwinki
    9
    Superwinki
    Mitglied
    Reaktionen
    2
    Punkte
    832
    Beiträge
    161
    • 25. April 2005 um 11:58
    • #7
    Zitat von MarvinTheRobot

    hat funktioniert nur weiss ich net wo die datei am handy gelandet is....



    Im Normalfall landet das Ganze zuerst auf dem Display und man darf sich entscheiden, ob man die Nachricht speichert oder nicht - VCards landen im Telefonbuch in der Gruppe "Empfangene".
    Was ich auch amüsant fand - bei den alten BT Headsets konnte man diese ansprechen und danach die Zeitansage wählen, toll für den, ders im Ohr hat :verycool:

    Kanye West said that President Bush doesn't care about black people. I think this was an incredibly insensitive statement. It was especially hurtful to the hundreds of millions of other people the President doesn't care about.

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung