Italian La prossima settimana, VACANZE... ma per ora vado avanti

udg

Expert
Licensed User
Longtime User
Direi che uno static filter è un filtro impostato nel manifest.
Quindi la sua domanda dovrebbe ricondursi a sapere se gi intent cui fai riferimento sono impostati nel manifest.
Prova, se puoi, a pubblicare il manifest in risposta ad Erel.
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Erel dice che non può funzionare, perché, attulmente, non posso distinguere tra le multi instanse dello stesso Widgt

After a more thorough check, I don't think that it will currently work. Currently you cannot distinguish between multiple instances of the same widget
 
Last edited:

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Aiutooo mi stò rincoooooo
Ho scritto su post altrui e credevo che Erel ce l'avesse con me...invece, non ci azzeccava una emerita
Questo è quello che Erel vule sapere:
Please see my previous post. The question is how are you adding the intent filter.
 

LucaMs

Expert
Licensed User
Longtime User
Il sior Douglas ha un suo thread musicale, l'avrete visto.

Stamattina mi sono svegliato (15 minuti fa ) con una canzone in testa, che però è in italiano, quindi non è il caso che io la linki (maremma italiana!) sul suo thread, quindi... beccatevela

 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
...Ma chi è?
Intanto io stò facedo una figura meschina con Erel
Ora gli ho postato il Manifest, come mi ha suggerto Umberto.
Per azionare l'intent, intendi il richiamo del Srtvice?
 

udg

Expert
Licensed User
Longtime User
Dove setti Main.FirstClick?
Vedo che DestroyApp dipende da quello.
Non conosco il widget e neanche il suo scopo, ma in generale, a cosa serve lo StartAt se il service viene "risvegliato" dal tasto volume?
Io mi aspetterei qualcosa del tipo:
- nel manifest l'elenco dei broadcast da intercettare (tra cui il famoso tasto volume)
- nello start del service l'identificazione dell'intent broadcast che lha risvegliato/richiamato e l'esecuzioen dell'azione corrispondente

udg
 

LucaMs

Expert
Licensed User
Longtime User
Il grande De Crescenzo (ha fatto un solo album famoso ma, a mio parere, tutte belle canzoni).

(qui bisogna andare a ristudiare gli intent! Adesso ripesco una guida in italiano, letta un anno e oltre fa, quando mi avvicinai ad Android "puro", ovvero tramite Java-Eclipse)...

'spe' che lo cerco...
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Allora, Erel ha detto che ho creato un filtro statico e di leggere questo tutorial:

http://www.b4x.com/android/forum/th...sms-messages-in-the-background.20103/#content

A parte che di inglese capisco quasi come il Tibetano ma, come diceva un mio ex collega: Non capisco...non capisco

Questo è il mio Maifest:


B4X:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: http://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")

SetActivityAttribute(Main, "android:excludeFromRecents", "true")
SetActivityAttribute(Menu, "android:excludeFromRecents", "true")

AddReceiverText(srvPickUp, <intent-filter>
    <action android:name="android.intent.action.MEDIA_BUTTON" />
    </intent-filter>)
 
AddReceiverText(srvPickUp, <intent-filter>
    <action android:name="android.media.VOLUME_CHANGED_ACTION" />
    </intent-filter>)

AddPermission("android.permission.CALL_PHONE")
AddPermission(android.permission.MODIFY_AUDIO_SETTINGS)
'End of default text.
 

LucaMs

Expert
Licensed User
Longtime User
Da quello che leggo in quel post di Erel (al quale feci anche una domanda, a dicembre 2013!!!) tu stai usando entrambi i tipi di "broadcast receiver", ovvero di "ascolti in attesa di eventi del sistema operativo/dispositivo, cioè sia i dinamici che gli statici, in quanto ne imposti statici nel manifest ma anche dinamici, tramite la libreria PhoneEvents.

Un gran casino per il quale non sono in grado di aiutare a sufficienza, almeno non adesso
 

udg

Expert
Licensed User
Longtime User
Scusa, vedo solo ora nella tua firma lo scopo del widget
Dal manifest si comprende come in maniera statica (ovvero anche a widget terminato ed eliminato dalla home) il sistema operativo debba richiamare in vita il service srvPickUp quando si manifesta uno dei due messaggi che hai richiesto (MEDIA_BUTTON e VOLUME_CHANGED_ACTION).
A quel punto la palla passa al service che reagisce in modo opportuno a ciascuno dei due.

Non capisco perchè non intercetti anche il RINGING allo stesso modo, visto che lo scopo è quello di reagire ad una chiamata in arrivo aumentando il volume della suoneria.
Ma almeno ho capito a cosa ti serve lo StartAt, visto che vuoi incrementare un po' alla volta il volume.. eh eh
 

LucaMs

Expert
Licensed User
Longtime User
Visto quando è complicato? Ripeto: poi gli utenti pretendono di avere app gratuite!

Un povero programmatore deve conoscere a fondo ogni piccolo dettaglio e, quando ha imparato a sufficienza, deve ricominciare a studiare nuove tecnologie nate nel frattempo!

Se fossi giovane, mi darei all'agricoltura, e non scherzo affatto!
 
Reactions: udg

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Gasp!
Infatti, rimuovendo dal Manifest:

B4X:
AddReceiverText(srvPickUp, <intent-filter>
    <action android:name="android.intent.action.MEDIA_BUTTON" />
    </intent-filter>)
 
AddReceiverText(srvPickUp, <intent-filter>
    <action android:name="android.media.VOLUME_CHANGED_ACTION" />
    </intent-filter>)
Il widget termina.
Purtroppo, però, a me serviva intercettare i tasti volume, per fare in modo che, il Widget su schermo, cambiasse immagine a secodo del volume captato.
Senza di questi, non posso modificare 'immagine del Widget in diretta.
 

udg

Expert
Licensed User
Longtime User
Ciao,
dai un'occhiata a questa libreria. Dovresti poter risolvere il problema dell'ultimo post.
In sostanza, elimini i receiver dal manifest e li sposti nelle AddAction del BroadcastReceiver. In questo modo, quando termini il widget non resta nulla in ascolto e quindi il service non viene resuscitato.
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Grazie udg, ma non riesco a capire se devo eliminare tutti gli Intent ed utilizzare questo.
Se metto:

B4X:
Sub Service_Start (StartingIntent As Intent)

Broadcast.addAction("android.media.VOLUME_CHANGED_ACTION")
Broadcast.SetPriority(2147483647)
Broadcast.registerReceiver("")
Log(Broadcast)
'Controllo volume
Dim curVol As Int
If StartingIntent.HasExtra("android.media.EXTRA_VOLUME_STREAM_VALUE")  Then
     ' prevVol = StartingIntent.GetExtra("android.media.EXTRA_PREV_VOLUME_STREAM_VALUE")
      curVol = StartingIntent.GetExtra("android.media.EXTRA_VOLUME_STREAM_VALUE")
      'volType = StartingIntent.GetExtra("android.media.EXTRA_VOLUME_STREAM_TYPE")
Log("Servoice_Start: Volume " & Main.DestroyApp)
....
....

ricevo questo errore subito dopo il
B4X:
Log(Broadcast)




B4X:
com.rootsoft.broadcastreceiver.BroadCastReceiver@4215d308
Menu:KeyPress


** Activity (menu) Pause, UserClosed = true **


** Service (srvpickup) Start **
com.rootsoft.broadcastreceiver.BroadCastReceiver@4215d308
** Service (srvpickup) Start **


com.rootsoft.broadcastreceiver.BroadCastReceiver@4215d308


java.lang.RuntimeException: Error receiving broadcast Intent { act=android.media.VOLUME_CHANGED_ACTION flg=0x10 (has extras) } in com.rootsoft.broadcastreceiver.BroadCastReceiver$1@4215d798


    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:765)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4777)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: java.lang.Exception: Sub broadcastreceiver_onreceive signature does not match expected signature.
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:201)
    at anywheresoftware.b4a.BA.raiseEvent(BA.java:159)
    at com.rootsoft.broadcastreceiver.BroadCastReceiver$1.onReceive(BroadCastReceiver.java:110)
    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:755)
    ... 9 more
Caused by: java.lang.Exception: Sub broadcastreceiver_onreceive signature does not match expected signature.
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:177)
    ... 12 more

L'intercettazione di Broadcast è:

B4X:
Sub BroadcastReceiver_OnReceive (Action As String)

    ToastMessageShow(Action,False)
    'can only abort when sendOrderedbroadcast is called.
    Broadcast.AbortBroadcast
End Sub
 

udg

Expert
Licensed User
Longtime User
Nel service_start dovresti avere:

Broadcast.registerReceiver("nomeveneto")
in modo da avere poi
nomeevento_OnRceive(Action as string)

Quindi nel codice che hai postato andrebbe un
Broadcast.registerReceiver("BroadcastReceiver")

udg
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Nulla da fare, continua a darmi quell'errore:

 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…