Autore Topic: applicazione manipolazione dati sms e chiamate  (Letto 2992 volte)

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
applicazione manipolazione dati sms e chiamate
« il: 18 Ottobre 2011, 18:07:38 CEST »
0
Salve ragazzi,
vorrei realizzare un'applicazione che si attiva appena arriva un sms o una chiamata  (quindi dovrei implementare un broadcast receveir) quindi una volta ke è partita in automatico mi estrapola i dati da dal sms (il nome e il cognome e altro nn so) e poi mi fa una ricerca in rubrica e mi dice chi sono le persone con lo stesso nome......qualcuno saprebbe aiutarmi mi trovo in alto mare....grazie mille a tutti!!! :-)

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:applicazione manipolazione dati sms e chiamate
« Risposta #1 il: 19 Ottobre 2011, 17:05:18 CEST »
0
nessuno sa darmi qualke aiuto???

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:applicazione manipolazione dati sms e chiamate
« Risposta #2 il: 19 Ottobre 2011, 17:16:52 CEST »
+1
Io inizierei a lavorare sui broadcast receiver cercando qualche esempio con San Google.
Poi piano piano mi farei i passi successivi, non puoi fare tutto in un fiato. ;-)
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:applicazione manipolazione dati sms e chiamate
« Risposta #3 il: 19 Ottobre 2011, 19:23:18 CEST »
0
Sisi  :-) io avevo già iniziato a scrivere un po di codice ora posto le classi.....sono riuscito a passare il testo e il numero di ki manda un sms ,realizzando il relativo BroadcastReceiver, ad una activity. Per il momento L'activity principale è praticamente vuota, mostra solo un toast con i parametri passati......ora però vengono le note dolenti:
1) ho realizzato un altro BroadcastReceiver per le chiamate ke vorrei si attivasse quando il telefono sta squillando e mi passi all'Activity il numero di telefono e il nome visualizzando a video i dati dell'utente ke sta chiamando .....però nn so come fare ho realizzato pure la classe però il broadcastreceiver nn fa partire l'activity [ho usato come intent :android.intent.action.ANSWER ]
2) è possibile che un broadcast receiver invece di far partire un activity visualizzi sulla schermata principale del telefono un Toast?

ecco le classi:
Manifest
Codice (Java): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="app.android"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="9" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".BroadcastActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
<receiver android:name=".BroadcastSms">
<intent-filter>
<action android:name=
"android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<receiver android:name=".BroadcastPhone">
            <intent-filter>              
                <action android:name="android.intent.action.ANSWER"></action>
            </intent-filter>
</receiver>

    </application>
   
    <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest>

BroadcastSms

Codice (Java): [Seleziona]
ackage app.android;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class BroadcastSms extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
                // TODO Auto-generated method stub
               
               
               
                Bundle bundle = intent.getExtras();
        Object messages[] = (Object[]) bundle.get("pdus");    
                SmsMessage smsMessage[] = new SmsMessage[messages.length];
                for (int n = 0; n < messages.length; n++)
            // Creo l'array dei messaggi
           smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
        // Ottengo il testo dell'ultimo messaggio
        String sms=smsMessage[0].getMessageBody();
        String oA=smsMessage[0].getDisplayOriginatingAddress();
       
                 
                //per rendere univoci i nomi delle chiavi passate
                //è consigliato (la doc dice 'must') aggiungere il nome del nostro package davanti al nome
         Intent myIntent = new Intent(context, BroadcastActivity.class);  
                 myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         myIntent.putExtra("app.android.testo",sms);
         myIntent.putExtra("app.android.nome",oA);
         context.startActivity(myIntent);  
               
               
        }

}

BroadcastActivity [anche se il nome è poco esplicativo è la mia activity principale]

Codice (Java): [Seleziona]
package app.android;


import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class BroadcastActivity extends Activity {

        public String s,n;
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent myIntent=getIntent();
        String pack=getPackageName();
        // Richiamiamo i valori di lat e long della posizione da raggiungere
        s=myIntent.getStringExtra(pack+".testo");
        n=myIntent.getStringExtra("app.android.nome");
        System.out.println(s+"\n nome:"+n);
        Toast.makeText(BroadcastActivity.this, s+"\n nome:"+n+pack, Toast.LENGTH_LONG).show();
     
    }


   
   
}
BroadcastPhone
Codice (Java): [Seleziona]
package app.android;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class BroadcastPhone extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent arg1) {
                // TODO Auto-generated method stub
                Intent myIntent = new Intent(context, BroadcastActivity.class);  
                 myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        myIntent.putExtra("app.android.testo","ciao");
        myIntent.putExtra("app.android.nome","è arrivato un numero");
        context.startActivity(myIntent);  
        }

}

ecco il codice speriamo ci sia qualcuno ke mi riesce ad aiutare grazie a tutti

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:applicazione manipolazione dati sms e chiamate
« Risposta #4 il: 20 Ottobre 2011, 09:42:02 CEST »
+1
Ciao,
l'intent android.intent.action.ANSWER non credo sia corretto. Prova in questo modo:

Nel manifest:

Codice (XML): [Seleziona]
<receiver android:name="com.callandsms..CallAndSMSListener">
 <intent-filter>
  <action android:name="android.intent.action.PHONE_STATE" />
  <action android:name="android.provider.Telephony.SMS_RECEIVED" />
 </intent-filter>
</receiver>

e questo è il codice della classe CallAndSMSListener:

Codice (Java): [Seleziona]
public class CallAndSMSListener extends BroadcastReceiver {

 @Override
 public void onReceive(Context context, Intent intent) {
 
  String action = intent.getAction();
         if(action.equalsIgnoreCase("android.intent.action.PHONE_STATE")){
          if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                              TelephonyManager.EXTRA_STATE_RINGING)) {
 
           Toast.makeText(context, "Incoming call", Toast.LENGTH_LONG).show();
           doSomething(intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER));
          }        
         }
         else {
         
         Bundle bundle = intent.getExtras();
         Object[] pdus = (Object[]) bundle.get("pdus");
         SmsMessage message = SmsMessage.createFromPdu((byte[])pdus[0]);
         if(!message.isEmail())
             Toast.makeText(context, "Incoming sms", Toast.LENGTH_LONG).show();
             doSomething(message.getOriginatingAddress());
       
         }
 
 }
 
 private void doSomething(String number){
  Log.d("<<<>>>",number);
 }

}

come vedi nel codice ho inserito anche un Toast all'interno del onReceive().

Saluti.
denper
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:applicazione manipolazione dati sms e chiamate
« Risposta #5 il: 20 Ottobre 2011, 12:14:17 CEST »
0
grazie infinite della risposta...quindi mi stai dicendo di creare un solo broadcast receiver e nn 2 come avevo fatto io....però mi puoi dare un paio di delucidazioni? questo broadcast receiver nn passa nessun dato all'intent ma dovrebbe far partire un toast in automatico...correggimi se sbaglio...però ho provato a creare un nuovo progetto...però nn va mi sapresti dare una mano? grazie ancora per la risposta ciao

P.S. ci vogliono dei permessi anke per gestire gli intent delle  chiamate?
« Ultima modifica: 20 Ottobre 2011, 12:23:27 CEST da raimondo »

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:applicazione manipolazione dati sms e chiamate
« Risposta #6 il: 20 Ottobre 2011, 13:26:01 CEST »
0
Diciamo che io ho creato un'unica classe per gestire entrambi gli eventi, ma tu puoi tranquillamente crearne 2. Il codice di esempio mostra solo un Toast.

Il nuovo progetto non funziona?  Guarda nell'LogCat che errore ti da e postalo.

denper.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:applicazione manipolazione dati sms e chiamate
« Risposta #7 il: 20 Ottobre 2011, 13:33:05 CEST »
0
allora il problema principale penso ke sia il permesso..girando un po' ho trovato questo permesso "android.permission.READ_PHONE_STATE" e modificando un po il codice funziona...grazie mille per il tempo perso fin'ora..ora dovevo passare alla seconda fase del mio progetto e cioè una volta ottenuto il numero di telefono ke kiama o ke manda un sms dovrei ricavarmi tutti i dati in  suo possesso : nome,cognome,email e organization se sono presenti e ricercare nella rubrica le persone ke hanno lo stesso dominio o lavorano presso la stessa organizzazione......mica sai aiutarmi un po' perkè le query non sono il mio forte...grazie ancora per l'aiuto ciao

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:applicazione manipolazione dati sms e chiamate
« Risposta #8 il: 20 Ottobre 2011, 13:55:36 CEST »
+1
Per esempio

Codice (Java): [Seleziona]
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER)));
Cursor cursor = context.getContentResolver().query(uri, new String[] { PhoneLookup.DISPLAY_NAME, PhoneLookup.PHOTO_ID }, null, null, null);
if (cursor.moveToFirst()) {
      String name = cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME));
      long photoId = cursor.getLong(cursor.getColumnIndex(PhoneLookup.PHOTO_ID));
}
cursor.close();

lo puoi aggiungere all'interno del broadcaster per ricavare il nome dal numero. Qui puoi trovare i campi che puoi estrarre dal PhoneLookup.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:applicazione manipolazione dati sms e chiamate
« Risposta #9 il: 20 Ottobre 2011, 13:59:25 CEST »
0
grazie mille ancora e se dovessi ricavare email e il campo organizzation come posso fare? nn li vedo tra i possibili campi selezionabili

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:applicazione manipolazione dati sms e chiamate
« Risposta #10 il: 20 Ottobre 2011, 14:30:19 CEST »
+1
Il codice potrebbe essere una cosa del tipo:

Codice (Java): [Seleziona]
long id = -1l;
String name = null;
String email = null;
String emailType = null;
String organization = null;
String organizationTitle = null;

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER)));
Cursor cursor = context.getContentResolver().query(uri, new String[] { PhoneLookup._ID, PhoneLookup.DISPLAY_NAME }, null, null, null);
if (cursor.moveToFirst()) {
        id = cursor.getLong(cursor.getColumnIndex(PhoneLookup._ID));
        name = cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME));
}
cursor.close();

if (id >= 0) {
        uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
        cursor = context.getContentResolver().query(uri, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[] { String.valueOf(id) }, null);
        while (cursor.moveToNext()) {
                // Un contatto potrebbe avere più mail. Ti consiglio di
                // aggiungerle in un array. In questo caso prende l'ultima.
                email = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                emailType = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
        }
        cursor.close();

        cursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, ContactsContract.CommonDataKinds.Organization.CONTACT_ID + " = ?",
                        new String[] { String.valueOf(id) }, null);
        while (cursor.moveToNext()) {
                organization = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA));
                organizationTitle = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE));

        }
        cursor.close();

}

probabilmente è da sistemare....
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:applicazione manipolazione dati sms e chiamate
« Risposta #11 il: 20 Ottobre 2011, 14:52:34 CEST »
0
adesso gli do un occhiata e ti dico grazie ancora

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:applicazione manipolazione dati sms e chiamate
« Risposta #12 il: 20 Ottobre 2011, 16:06:16 CEST »
0
allora il grosso funziona..però adesso sto riscontrando un problema per quanto riguarda ORGANIZATION...come vedi nella foto il mio contatto ha questo tipo di valori però ne Company, ne title, ne data1 mi ritornano niente volevo usare TYPE_WORK ma poi ho visto ke è un int e quindo nn so proprio come fare...grazie ancora per l'aiuto

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:applicazione manipolazione dati sms e chiamate
« Risposta #13 il: 20 Ottobre 2011, 16:11:19 CEST »
0
Dovresti cercare tra i vari provider quello che contiene tale informazione....
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:applicazione manipolazione dati sms e chiamate
« Risposta #14 il: 21 Ottobre 2011, 08:14:09 CEST »
0
Per quanto riguarda la ricerca dei contatti brancolo ancora nel buio...però ho una altra domanda è possibile far durare il Toast di più......o può essere sostituito con qualcosa altro?