Jumping Jack Flash weblog

Rilevare una chiamata in Jython con le Javaphone API

Posted in Java, Javaphone API, jython, Motorola a1000, Symbian, Symbian UIQ by jumpjack on 13 febbraio 2007

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

“””

2 Risposte

Subscribe to comments with RSS.

  1. Alessandro said, on 10 maggio 2008 at 21:49

    Molto interessante, mi puoi contattare in privato? riguardo una possibile applicazione di questo script.
    crews-at-tintintintin-dot-it

  2. […] Rilevare una chiamata in Jython con le Javaphone API […]


Puoi inserire un commento qui sotto; diventerà visibile dopo la moderazione dell'amministratore

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: