Hi Thanasis,

Sorry for the long delay in getting back to you. I've been very busy 
working with other aspects of my business start-up. Just to let you know, 
I'm going with the USB GSM dongle option for now. I may look into getting a 
tablet with a slot for a SIM card in it to avoid needing the external USB 
device at all.

I tried a couple of Huawei modems which worked but with some awkward 
side-effects, namely the E160G and the K3765. Side-effects were random 
disconnections (something related to Java Comm I think) and 
StringIndexOutOfBoundsExceptions while reading new messages.

The one that works perfectly for me now all the time is the Huawei E173. No 
special modifications required to make it work. It's good news for me 
because Meteor (a mobile phone company in Ireland) sell a refurbished 
(second-hand) E173 for just €9.99 - 
http://www1.meteor.ie/mobilebroadband/payg/

Regarding the read and unread messages and the problem of only wanting to 
get unread messages, I have finally taken your recommended option and now I 
just delete messages from the modem once they arrive and have been read by 
SMSlib.

Anyway, thanks for your help so far and for making your library available.

By the way, I hope you're satisfied with the results of the Greek elections 
last weekend. More importantly, Greece did brilliantly to get to the 
quarter-finals of Euro 2012. Ireland did not do so well :-( Best of luck 
against Germany tomorrow night!

Cheers,
Brian

On Friday, June 8, 2012 10:00:30 PM UTC+1, T.Delenikas wrote:
>
> Hi Brian,
>
> I think that you could accomplish what you want by disabling what's called 
> "AsyncMessageProcessor".
> Check AModemDriver.java, method "connect()", and locate the line:
>
> setAsyncMessageProcessor(new AsyncMessageProcessor());
>
> Comment this line out.
> Now SMSLib should retain the UNREAD status. Inbound callbacks will not work, 
> even if you set them. You will need to call readMessages() at your own pace.
>
> I know this requires code changes, but try it once.
>
> As far as the other issue, you are correct. Targeting specific devices 
> (pre-tested by you) could be an option. I don't know if using external modems 
> is an option for your project - you know better, the are specific drawbacks 
> that you've already mentioned.
> Are all these tablet devices that much different in terms of internal modems? 
> I though that the common O/S on them would "smooth out" the differences...
>
>
>
> On Thursday, June 7, 2012 2:19:13 PM UTC+3, Brian O Carroll wrote:
>>
>> Hi Thanasis, 
>>
>> Thanks very much for that advice. When you say, "disable 
>> notification", do you mean just NOT calling 
>> Service.setInboundMessageNotification? I have tried this but the 
>> result is still the same. All new messages immediately get marked as 
>> READ by the phone, just after they arrive, even if I don't call 
>> readMessages in that time. Once the gateway is connected at all, the 
>> messages automatically get marked as READ. Is there any other way to 
>> explicitly disable notifications? 
>> I've already come up with a simple work-around for this issue which 
>> works pretty well - example code below (I've seen other people mention 
>> similar solutions on this forum): 
>> - read all READ messages at program startup and add all of these to a 
>> vector 
>> - every 20 seconds, read ALL messages again and ignore all those that 
>> are already in the Vector. Any extra ones are new/unread messages. 
>> - do whatever you want with these new messages but also add them to 
>> the vector so they are not treated as new on the next iteration. 
>> The only problem with the above solution is that it's pretty 
>> inefficient (getting ALL messages regularly from the phone). Seems to 
>> work so far though. 
>>
>> Most of my testing so far has been done with an old Nokia 6230 which 
>> works very well. Another problem I'm having is that when I tried to 
>> use the same application (readMessages) on my Samsung Galaxy S2 (GT- 
>> I9000), readMessages only seems to be able to access messages on the 
>> SIM card, not on the phone's internal memory. I thought this could 
>> easily be fixed by setting an option on the phone to save messages to 
>> SIM by default but no such option exists (not surprising on such a 
>> modern phone because SIM card storage is so limited!). There is an 
>> option to save a message to SIM once it has already arrived but that's 
>> no use to me. 
>>
>> Anyway, I'm starting to think it might be too big of a challenge to 
>> write an SMS feature for my 'communication aid' (http://aacireland.ie/ 
>> Grapevine.html <http://aacireland.ie/Grapevine.html>) that will be 
>> compatible with all potential users' 
>> mobile phones. I think there are too many models and I will be 
>> spending a lot of time trying to sort out bluetooth drivers and 
>> awkward behaviours of specific phone models. For that reason, I'm 
>> starting to think that I should use either a USB GSM modem (that I 
>> provide to my user with the communication aid tablet PC) or an online 
>> facility like Clickatell. 
>>
>> The disadvantage of the GSM modem is that it's an extra piece of 
>> hardware to buy, along with a pay-as-you-go SIM card and credit from a 
>> network provider. The disadvantage of an online SMS facility is that 
>> you have to have an internet connection to use it, something which may 
>> not always be available for mobile clients (i.e. Wifi). I think the 
>> Clickatell route is still the better option though - if a user has a 
>> smart phone, they can use it's mobile/3G data connection to access the 
>> internet (or I can provide them with a unit that has 3G in the first 
>> place!). 
>>
>> Any more advice on the best option for me to take Thanasis? I really 
>> appreciate your input so far (and your great SMS Java library!!). 
>>
>> Thanks, 
>> Brian 
>>
>> If anybody's interested, here's my code for the above example 
>> (identifying NEW messages using a regular call to readMessages()).. 
>> Sorry, formatting came out a bit ugly! 
>>
>> import java.text.DateFormat; 
>> import java.text.SimpleDateFormat; 
>> import java.util.Calendar; 
>> import java.util.Vector; 
>> import org.smslib.AGateway.Protocols; 
>> import org.smslib.InboundMessage; 
>> import org.smslib.InboundMessage.MessageClasses; 
>> import org.smslib.Service; 
>> import org.smslib.modem.SerialModemGateway; 
>>
>> public class ReadMessages 
>> { 
>>     Vector Vmsg; 
>>
>>         public void doIt() 
>>         { 
>>                 try 
>>                 { 
>>                         // Create the Gateway representing the serial GSM 
>> modem. 
>>                         SerialModemGateway gateway = new 
>> SerialModemGateway("modem.com1", 
>> "COM15", 9600, "", ""); 
>>                         // Set the modem protocol to PDU (alternative is 
>> TEXT). PDU is the 
>> default, anyway... 
>>                         gateway.setProtocol(Protocols.PDU); 
>>                         // Do we want the Gateway to be used for Inbound 
>> messages? 
>>                         gateway.setInbound(true); 
>>                         // Do we want the Gateway to be used for Outbound 
>> messages? 
>>                         gateway.setOutbound(true); 
>>
>>                         Service.getInstance().addGateway(gateway); 
>>                         Service.getInstance().startService(); 
>>                         // Printout some general information about the 
>> modem. 
>>                         System.out.println("Modem Information:"); 
>>                         System.out.println("  Manufacturer: " + 
>> gateway.getManufacturer()); 
>>                         System.out.println("  Model: " + 
>> gateway.getModel()); 
>>
>>             // Add all of the READ messages on the phone to the 
>> Vector, Vmsg 
>>             Vmsg = new Vector(); 
>>             InboundMessage initmsgs[] = 
>> Service.getInstance().readMessages(MessageClasses.READ); 
>>             for (int i = 0; i < initmsgs.length; i++) 
>>             { 
>>                 Vmsg.add(getUniqueMessageString(initmsgs[i])); 
>>                 // Display a one-line summary of each message found 
>>                 System.out.println(" - "+initmsgs[i].getOriginator() 
>> +" ("+initmsgs[i].getDate()+"): "+initmsgs[i].getText()); 
>>             } 
>>
>>                         while(true) 
>>             { 
>>                 // Get ALL messages from the phone 
>>                 InboundMessage msg[] = 
>> Service.getInstance().readMessages(MessageClasses.ALL); 
>>                 int countnew = 0; 
>>
>>                 // Check each message to see if it's already in our 
>> Vector, Vmsg 
>>                 for (int i = 0; i < msg.length; i++) 
>>                 { 
>>                     // If the message is not in our Vector, it's a NEW 
>> message 
>>                     if(!Vmsg.contains(getUniqueMessageString(msg[i]))) 
>>                     { 
>>                         // Add the new message to the Vector (so it's 
>> not treated as new in the next iteration of this while loop) 
>>                         Vmsg.add(getUniqueMessageString(msg[i])); 
>>                         // Display the new message (on one line) 
>>                         System.out.println(" - "+msg[i].getOriginator() 
>> +" ("+msg[i].getDate()+"): "+msg[i].getText()); 
>>                         countnew++; 
>>                     } 
>>                 } 
>>                 // Display the status after this check for new 
>> messages 
>>                 System.out.println(getCurrentDateTimeString()+": Total 
>> "+msg.length+" messages ("+countnew+" new).."); 
>>
>>                 Thread.sleep(20000); 
>>             } 
>>                 } 
>>                 catch (Exception e) 
>>                 { 
>>                         e.printStackTrace(); 
>>                 } 
>>                 finally 
>>                 { 
>>             try 
>>             { 
>>                 Service.getInstance().stopService(); 
>>             } 
>>             catch(Exception e) 
>>             { 
>>                 e.printStackTrace(); 
>>             } 
>>                 } 
>>         } 
>>
>>     public String getUniqueMessageString(InboundMessage msg) 
>>     { 
>>         if(msg == null) 
>>             return null; 
>>         return msg.getDate().toString(); 
>>     } 
>>
>>     public String getCurrentDateTimeString() 
>>     { 
>>         DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd 
>> HH:mm:ss"); 
>>         Calendar cal = Calendar.getInstance(); 
>>         return dateFormat.format(cal.getTime()); 
>>     } 
>>
>>         public static void main(String args[]) 
>>         { 
>>                 ReadMessages app = new ReadMessages(); 
>>         app.doIt(); 
>>         } 
>> } 
>>
>> On Jun 6, 9:46 pm, Thanasis Delenikas wrote: 
>> > Hi, 
>> > 
>> > I am afraid this is not possible. 
>> > The phone marks messages as READ by itself. 
>> > 
>> > You could disable the notifications (notifications are the ones which 
>> > instruct SMSLib to read messages "behind your back", without 
>> > you explicitly requesting the read), but you will get the same result 
>> > (messages -> status READ) when you call readMessages() as well. 
>> > 
>> > Does this suit you? 
>> > 
>> > On Wed, Jun 6, 2012 at 1:58 PM, SMSLib Discussion Group on behalf of 
>> Brian 
>> > O Carroll <[email address]> wrote: 
>> > 
>> > 
>> > 
>> > 
>> > 
>> > 
>> > 
>> > > Hi All, 
>> > 
>> > > I have some successful test applications working with SMSlib but 
>> > > there's one thing that I can't get working properly. When my phone is 
>> > > connected and the service is started, all messages that arrive on the 
>> > > phone immediately get marked as 'read' on the phone (even if I don't 
>> > > read them from SMSlib or from the phone). 
>> > 
>> > > Why is that? Is there some way I can stop SMSlib from doing that? 
>> > 
>> > > I am using a regular check of 
>> > > Service.readMessages(MessageClasses.UNREAD) to see when new messages 
>> > > arrive. The callback method is not suitable for me because I need to 
>> > > leave the messages on the phone. I don't want to just delete all 
>> > > messages from the phone when they are read. 
>> > 
>> > > Thanks, 
>> > > Brian 
>> > 
>> > > -- 
>> > > You received this message because you are subscribed to the Google 
>> Groups 
>> > > "SMSLib Discussion Group" group. 
>> > > To post to this group, send email to [email address]. 
>> > > To unsubscribe from this group, send email to 
>> > > [email address]. 
>> > > For more options, visit this group at 
>> > >http://groups.google.com/group/smslib?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"SMSLib Discussion Group" group.
To post to this group, send email to smslib@googlegroups.com.
To unsubscribe from this group, send email to 
smslib+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msg/smslib/-/WrfA-Nry4ccJ.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to