Ho “esteso” lo script jython di un precedente post: adesso il programma è in grado di accrogersi di una chiamata in arrivo, di leggere il numero del chiamante, e di scegliere di conseguenza se accettare la chiamata o rifiutarla.
Purtroppo sull’a1000 non è possibile nè rispondere alla chiamata nè rifiutarla: in entrambi i casi, infatti, il programma funziona, cioè accetta o rifiuta la chiamata… ma l’applicazione Phone non se ne accorge, e resta ad aspettare all’infinito che l’utente risponda o riagganci… anche se la telefonata in realtà è già stata accettata o rifiutata dallo script Jython!
Un’alternativa sarebbe far inviare dallo scipt Jython una “simulazione di tasto premuto” all’applicazione Phone, in modo da “premere” il tasto “occupato” o “rispondi” nel dialog che appare all’arrivo di una chiamata. Ma bisogna vedere se è tecnicamente possibile.
import javax.telephony.events
import os
import java.lang
import com.symbian.javax.telephony.mobile
import com.symbian.javax.telephony
import com.symbian.epoc.etel
import java.lang.Integer
import java.lang.String
import javax.net.datagram
import com.symbian.javax.net.datagram
from java.awt import Frame,MenuBar,Menu,MenuItem,TextArea,FileDialog
from java.awt.event import ActionEvent
class test(java.awt.Frame, com.symbian.epoc.etel.EtelLineListener):
def __init__(self):
self.size=(208,276)
self.myOutput=java.awt.TextArea(”Hello UIQ from Jython!!!\n”)
self.add(”Center”,self.myOutput)
self.myMenuBar=java.awt.MenuBar()
self.myMenu=java.awt.Menu(”Menu”)
self.myReadFile=java.awt.MenuItem(”Start”,actionPerformed=self.doStart) # Avvio routine principale da menu
self.myMenuExit=java.awt.MenuItem(”Exit”,actionPerformed=self.doExit)
self.myMenuBar.add(self.myMenu)
self.myMenu.add(self.myReadFile)
self.myMenu.add(self.myMenuExit)
self.setMenuBar(self.myMenuBar)
self.setVisible(1)
def doStart(self,event):
p=com.symbian.javax.telephony.mobile.EpocGsmMobileProvider()
ts=p.getTerminals()
t=ts[0]
tads=t.getAddresses()
tad=tads[0]
m=com.symbian.javax.telephony.mobile.EpocGsmMobileTerminal(tad,p)
mads=m.getAddresses()
m=mads[0]
print “Numero SIM:”,m.getSubscriptionId()
IMSIFile=open(”c:\\system\\data\\e32user.bin”,’r')
IMSI=IMSIFile.read()
print “Numero registrato: \n”,IMSI
if java.lang.Integer.toString(m.getSubscriptionId()) != IMSI:
print “BRUTTO LADRONE!!!\n”
jnd=javax.net.datagram
dns=jnd.DatagramNameService
addr=com.symbian.javax.net.datagram.SMSAddress(”xxxxx”)
ds=jnd.DatagramService
serv=ds.getService(addr)
mex=java.lang.String(”ti hanno fregato il cellulare!!!”).getBytes()
d=jnd.Datagram(mex,addr)
serv.send(d)
def doExit(self,event):
java.lang.System.exit(0)
def callActive(self,event): #callListener (mai rilevato???)
print “callActive (callListener)\n”
def callInvalid(self,event): #callListener (mai rilevato???)
print “callInvalid (callListener)”
def callEventTransmissionEnded(self,event): #callListener
print “eventocallEventTransmissionEnded: ( callListener)”, event
def statusChange(self, line, num): # etelline, status (da EtelLineListener)
print “*********STATUSCHANGE*********”
print “Stato attuale: “, num , “\n”
self.myOutput.appendText(”Current call status: ” + java.lang.Integer.toString(num)+ “\n”)
def incomingCall(self, line, call): # etelline, etelcall (da EtelLineListener)
print ” —– INCOMING CALL —–”
self.myOutput.appendText(”INCOMING ” + call.getCallerId() + “…\n”)
print “->incoming call ‘” + call.getCallerId()
# print “prima rispondo,…”
# call.answer() # applicazione Phone si blocca!!
# print “…poi riattacco!”
# call.hangup() # applicazione Phone si blocca!!
def connectionAlerting(self,event):
print “Chiamata in arrivo da numero “
incomingCall=event.getCall()
conns=incomingCall.getConnections()
# print “Numero connessioni ALERTING: “,len(conns)
addr1=conns[0].getAddress()
addr2=conns[1].getAddress()
numero1=addr1.getName() # Probabilmente numero LOCALE.
numero2=addr2.getName()
# print “1: ” + numero1 + “\n”
self.myOutput.appendText(”Chiamata in arrivo da ” + numero2 + “…”)
print numero2 + “\n”
#da qui non si puo’ riagganciare: solo da metodo incomingCall().
“”"
def connectionConnected(self,event):
print “connectionConnected”
def connectionCreated(self,event):
print “connectionCreated: “, event
def connectionDisconnected(self,event):
print “connectionDisconnected”
def connectionFailed(self,event):
print “connectionFailed”
def connectionInProgress(self,event):
print “connectionInProgress”
def connectionUnknown(self,event):
print “connectionUnknown”
“”"
if __name__==”__main__”:
myApp=test()
peer=com.symbian.javax.telephony.EpocJtapiPeer()
p=peer.getProvider(”EpocGsmMobileProvider”)
terms=p.getTerminals()
term=terms[0]
addrs=p.getAddresses()
addr=addrs[0]
lines1 = p.getPhone().getVoiceLines()
line1 = lines1[0]
lines2 = p.getVoiceLines()
line2 = lines2[0]
#addr.addCallListener(test()) # aggancia Listener all’Address
term=com.symbian.javax.telephony.mobile.EpocGsmMobileTerminal(addr,p)
#term.addCallListener(test())
line1.addLineListener(test())
print “READY.”
“”"
ETEL CALL
public static final int STATUS_UNKNOWN = 0;
public static final int STATUS_IDLE = 1;
public static final int STATUS_DIALLING = 2;
public static final int STATUS_RINGING = 3;
public static final int STATUS_ANSWERING = 4;
public static final int STATUS_CONNECTING = 5;
public static final int STATUS_CONNECTED = 6;
public static final int STATUS_HANGING_UP = 7;
CONNECTION
public static final int IDLE = 48;
public static final int INPROGRESS = 49;
public static final int ALERTING = 50;
public static final int CONNECTED = 51;
public static final int DISCONNECTED = 52;
public static final int FAILED = 53;
public static final int UNKNOWN = 54;
TERMINAL CONNECTION
public static final int IDLE = 64;
public static final int RINGING = 65;
public static final int PASSIVE = 66;
public static final int ACTIVE = 67;
public static final int DROPPED = 68;
public static final int UNKNOWN = 69;
TERMINAL CONNECTION EVENT
public static final int TERMINAL_CONNECTION_ACTIVE = 115;
public static final int TERMINAL_CONNECTION_CREATED = 116;
public static final int TERMINAL_CONNECTION_DROPPED = 117;
public static final int TERMINAL_CONNECTION_PASSIVE = 118;
public static final int TERMINAL_CONNECTION_RINGING = 119;
public static final int TERMINAL_CONNECTION_UNKNOWN = 120;
CALL
public static final int IDLE = 32;
public static final int ACTIVE = 33;
public static final int INVALID = 34;
CALL EVENT
public static final int CALL_ACTIVE = 101;
public static final int CALL_INVALID = 102;
public static final int CALL_EVENT_TRANSMISSION_ENDED = 103;
CONNECTION EVENT
public static final int CONNECTION_ALERTING = 104;
public static final int CONNECTION_CONNECTED = 105;
public static final int CONNECTION_CREATED = 106;
public static final int CONNECTION_DISCONNECTED = 107;
public static final int CONNECTION_FAILED = 108;
public static final int CONNECTION_IN_PROGRESS = 109;
public static final int CONNECTION_UNKNOWN = 110;
SINGLE CALL META EVENT
public static final int SINGLECALL_META_PROGRESS_STARTED = 210;
public static final int SINGLECALL_META_PROGRESS_ENDED = 211;
public static final int SINGLECALL_META_SNAPSHOT_STARTED = 212;
public static final int SINGLECALL_META_SNAPSHOT_ENDED = 213;
ADDRESS_EVENT_TRANSMISSION_ENDED = 100
“”"