Autore Topic: problema con recezione sms  (Letto 2953 volte)

Offline overflow

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei G 330
  • Sistema operativo:
    OS X 10.8.4
problema con recezione sms
« il: 12 Agosto 2011, 21:49:32 CEST »
0
Non riesco a ricevere gli sms e ho già cercato sul forum ma niente non vanno cosi almeno parte ma dopo aver inviato l sms quello ricevuto non lo intercetta quindi non stampa quello che dovrebbe. Comunque un altro problema lo riscontro nel fatto che appare la scritta message nel layout ma nn dovrebbe comparire solo quando ricevuto l' sms per stampare la parte rischiesta???
Comunque qui di sotto ci sono tutti i sorgenti della mia app. vi prego aiutatemi a comprendere grazie in anticipo.


PromoTimActivity.java

Codice (Java): [Seleziona]
package it.promo.tim;

import android.app.Activity;
import android.os.Bundle;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.telephony.SmsManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class PromoTimActivity extends Activity {
// Button to trigger sending the SMS
Button aButton;
// PendingIntent to tell the SMS app to notify us
PendingIntent sentPI;
// The intent action we are using
String SENT = "SMS_SENT";
// The BroadcastReceiver that we use to listen for the notification back
BroadcastReceiver br;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Create the Pending Intent
sentPI = PendingIntent.getBroadcast(this, 0,
new Intent(SENT), 0);
aButton = (Button) this.findViewById(R.id.Button01);
aButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SmsManager sms = SmsManager.getDefault();
// send the message, passing in the pending intent, sentPI
sms.sendTextMessage("119", null, "Credito", sentPI, null);
registerReceiver(br, new IntentFilter(SENT));
}});
// In order to receive the results via the pending intent we need
// to register a new BroadcastReceiver and pay attention to the various
// values we could get back
br = new BroadcastReceiver(){
@Override
public void onReceive(Context ctx, Intent intent) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "Aggiornamento in corso",Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(getBaseContext(), "Errore non previsto",Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(getBaseContext(), "Nessun servizio",Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(getBaseContext(), "Nessun PDU",Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(getBaseContext(), "Radio spenta",Toast.LENGTH_SHORT).show();
break;
}
unregisterReceiver(br);
}
};

}
}

MyBroadcastReceiver.java

Codice (Java): [Seleziona]
package it.promo.tim;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;

public class MyBroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

                Intent myIntent = new Intent(context, PromoTimActivity.class);
                myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(myIntent);
               
                Bundle bundle = intent.getExtras();
                Object[] pdus = (Object[]) bundle.get("pdus");
                SmsMessage[] messages = new SmsMessage[pdus.length];
                for (int i = 0; i < messages.length; i++)
                {
                messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                Log.v("PromoTimActivity","Testo: " + messages[i].getDisplayMessageBody());
                Log.v("PromoTimActivity","Numero: " + messages[i].getDisplayOriginatingAddress());
                //If say we wanted to do something based on who sent it
                if (messages[i].getDisplayOriginatingAddress().contains("119"))
                {
                        // we could launch an activity and pass the data
                Intent newintent = new Intent(context, segreto.class);
                newintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                // Pass in data
                newintent.putExtra("Testo", messages[i].getDisplayMessageBody());
                context.startActivity(newintent);
               }
             }
        }
       

}

segreto.java

Codice (Java): [Seleziona]
package it.promo.tim;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class segreto extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Get the extra data
Bundle extras = getIntent().getExtras();
String messag = extras.getString("Testo");
String message = messag.substring(38, 48);
TextView messagetv = (TextView) findViewById(R.id.messagetv);
messagetv.setText(message);
}
}


main.xml

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:weightSum="1">
    <TextView android:layout_height="wrap_content"
   android:text="@string/hello"
   android:layout_width="fill_parent"></TextView>
    <TextView android:layout_height="wrap_content"
   android:text="@string/Rigo"
   android:layout_width="fill_parent"></TextView>
    <Button android:id="@+id/Button01"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Aggiorna"
   android:layout_gravity="center"></Button>
    <TextView android:layout_height="wrap_content"
   android:text="@string/Rigo"
   android:layout_width="fill_parent"></TextView>
    <TextView android:layout_height="wrap_content" android:text="@string/Credito" android:layout_gravity="left" android:layout_width="wrap_content"></TextView>
    <TextView android:layout_height="wrap_content" android:id="@+id/messagetv" android:text="message" android:layout_width="wrap_content"
android:layout_gravity="right"></TextView>
</LinearLayout>

AndroidManifest.xml

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="it.promo.tim"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".PromoTimActivity"
android:label="@string/app_name">
<activity android:name=".segreto"></activity>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MybroadcastReceiver">
<intent-filter>
<action android:name=
"android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest>

Offline stefano74

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung G-S5660
  • Sistema operativo:
    Windows 7
Re:problema con recezione sms
« Risposta #1 il: 10 Dicembre 2011, 13:29:05 CET »
0
Anche io ho lo stesso problema con il galaxy giò.
Mi sto dannando!  A te il BroadCastReciver() rileva l'evento ? o meglio risponde al android.provider.Telephony.SMS_RECEIVED ?
prova a fare una cosa più semplice del tipo ricevo l'sms e stampo ciao! a me non fa manco questo!
Se lo fai posta il codice.
Ciao
EDIT : Hai il GO SMS installato o il GO Notifier ? non vorrei che passano il comando abort al broadcast!
Ciao
« Ultima modifica: 10 Dicembre 2011, 13:33:37 CET da stefano74 »

Offline stefano74

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung G-S5660
  • Sistema operativo:
    Windows 7
Re:problema con recezione sms
« Risposta #2 il: 11 Dicembre 2011, 18:24:41 CET »
0
Confermo che se hai Go sms con l'opzione Disable Notification non funziona niente !
Ciau

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:problema con recezione sms
« Risposta #3 il: 14 Dicembre 2011, 17:31:34 CET »
0
io uso il broadcast receiver per avere il nome di ki manda sms ora ti posto la classe e il manifest spero ti siano utili:
Codice (Java): [Seleziona]
ackage android.contact;



import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.telephony.SmsMessage;
import android.telephony.TelephonyManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class BroadcastCallSms extends BroadcastReceiver {

       
        private String numSms = new String();
        private String numCall = new String();
        private ContactSearch s;
        @Override
        public void onReceive(final Context context, final Intent intent) {
               
                s = new ContactSearch(context);
                String action = intent.getAction();

                Bundle bundle = intent.getExtras();
                Object[] pdus = (Object[]) bundle.get("pdus");
                SmsMessage message = SmsMessage.createFromPdu((byte[])pdus[0]);
                if(!message.isEmail()){
                        numSms = message.getOriginatingAddress();
                        if(!s.isEscluso(numSms))
                                lanciaActivity(context,"sms",numSms);
     
       
       
        }

alcune classi e metodi sono miei ma cmq la parte centrle ti dovrebbe interessare
manifest:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="android.contact"
     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=".ContactNotifyActivity" android:label="@string/app_name"
         android:theme="@android:style/Theme.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SettingActivity" android:label="@string/app_name"
         android:theme="@android:style/Theme.NoTitleBar">
        </activity>            
        <activity android:name=".ContactView" android:label="@string/app_name"
         android:theme="@android:style/Theme.NoTitleBar">
        </activity>                    
                <activity android:name=".CallMissed" android:label="@string/app_name"
         android:theme="@android:style/Theme.NoTitleBar">
        </activity>                    
                <activity android:name=".RicercaActivity" android:label="@string/app_name"
         android:theme="@android:style/Theme.NoTitleBar">
        </activity>    
                <activity android:name=".InsDelNameActivity" android:label="@string/app_name"
         android:theme="@android:style/Theme.NoTitleBar">
        </activity>                    
                <activity android:name=".SinOrgActivity" android:label="@string/app_name"
         android:theme="@android:style/Theme.NoTitleBar">
        </activity>    
        <activity android:name=".Prova" android:label="@string/app_name"
         android:theme="@android:style/Theme.NoTitleBar">
        </activity>    
                <receiver android:name=".BroadcastCallSms">
                        <intent-filter>
                                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                                <action android:name="android.intent.action.PHONE_STATE" />
                        </intent-filter>
                </receiver>


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

Offline stefano74

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung G-S5660
  • Sistema operativo:
    Windows 7
Re:problema con recezione sms
« Risposta #4 il: 14 Dicembre 2011, 17:40:31 CET »
0
Ti ringrazio tanto!
Io ho risolto il problema, come ti dicevo c'era una app (Go Notyfier, mi sembra si chiamasse così) che intercettava tutti gli intent e quindi non li faceva passare alla mia app! Una volta rimossa questa app (che non faceva altro che notificarmi sui contatti o nella barra il numero di sms da leggere) è andato tutto bene!
Adesso ho un problema, cioè associare il numero di telefono a nome presente in rubrica e non ho la più pallida idea di come approcciare la cosa.
Ho cercato un po' (poco per mancanza di tempo) sulla rete ma non ho trovato niente che faccia al caso mio o meglio ho trovato un po' di codice che carica tutti i contatti ma mi sembra troppo macchinoso per una app leggera come la mia.
Ciao

Offline stefano74

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung G-S5660
  • Sistema operativo:
    Windows 7
Re:problema con recezione sms
« Risposta #5 il: 14 Dicembre 2011, 17:42:41 CET »
0
Scusami non ti ho chiesto se tu hai risolto alla fine ?

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:problema con recezione sms
« Risposta #6 il: 14 Dicembre 2011, 18:43:15 CET »
0
si io ho risolto cmq il cod è questo
Codice (Java): [Seleziona]
                String name = new String();
               
                Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
                String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " = ?";
                String selectionArgs[] = new String[]{number};
            Cursor cursor = context.getContentResolver().query(uri, null, selection, selectionArgs, null);
           
            if (cursor.moveToFirst())
                name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            cursor.close();

Offline stefano74

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung G-S5660
  • Sistema operativo:
    Windows 7
Re:problema con recezione sms
« Risposta #7 il: 15 Dicembre 2011, 02:00:09 CET »
0
 ;-) Grazie mille, domani lo provo di sicuro! Oggi ho installato la CyanogenMod e mi ha dato un po' (tanti) problemi con la rubrica (non mi scarica i contatti da Kies!!).
Grazie ancora e ciao!

Offline stefano74

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung G-S5660
  • Sistema operativo:
    Windows 7
Re:problema con recezione sms
« Risposta #8 il: 15 Dicembre 2011, 14:45:47 CET »
0
Ciao,
ho provato il codice ma mi restituisce sempre un insieme vuoto alla voce nome. Ti posto il codice, dove sbaglio ?
Codice (Java): [Seleziona]
 String sms1 = smsMessage[0].getMessageBody();
            String sms2 = smsMessage[0].getOriginatingAddress();
            String name = new String();
            String number =new String();
            number=sms2;
            Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
            String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " = ?";
            String selectionArgs[] = new String[]{number};
        Cursor cursor = context.getContentResolver().query(uri, null, selection, selectionArgs, null);
       
        if (cursor.moveToFirst())
            name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        cursor.close();
        Toast.makeText(context, ""+name, Toast.LENGTH_LONG).show();
        Toast.makeText(context, ""+sms1, Toast.LENGTH_LONG).show();
                Toast.makeText(context, ""+sms2, Toast.LENGTH_LONG).show();
                evento=new Intent(context, T22.class);
                evento.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                smsr=""+sms1;
        evento.putExtra("messaggio1", smsr);
        evento.putExtra("numerotel1", ""+sms2);
        evento.putExtra("nome",name);
        context.startActivity(evento);  
Ecco cosa ho messo nel manifest
Codice (Java): [Seleziona]
 <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" android:persistent="true" android:killAfterRestore="true">
        <activity
            android:label="@string/app_name"
            android:name=".M22" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="B22">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
Ti ringrazio anticipatamente per l'aiuto.

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:problema con recezione sms
« Risposta #9 il: 15 Dicembre 2011, 14:51:58 CET »
0
ad una prima occhiata nn vedo nessun errore...per accedere ai datì in rubrica nn vedo nessun errore

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:problema con recezione sms
« Risposta #10 il: 15 Dicembre 2011, 14:52:51 CET »
0
prova a stamapoare numer puop darsi ke nn da nulla

Offline stefano74

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung G-S5660
  • Sistema operativo:
    Windows 7
Re:problema con recezione sms
« Risposta #11 il: 15 Dicembre 2011, 15:10:32 CET »
0
Infatti non stampa nulla ho provato a modificare così ma niente
Codice (Java): [Seleziona]
        Toast.makeText(context, ""+sms1, Toast.LENGTH_LONG).show();
                Toast.makeText(context, ""+sms2, Toast.LENGTH_LONG).show();
                evento=new Intent(context, T22.class);
                evento.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                smsr=""+sms1;
        evento.putExtra("messaggio1", smsr);
        evento.putExtra("numerotel1", ""+sms2);
        String name = new String();
        Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " = ?";
        String selectionArgs[] = new String[]{""+sms2};
        Cursor cursor = context.getContentResolver().query(uri, null, selection, selectionArgs, null);
        if (cursor.moveToFirst())
            name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        cursor.close();
        Toast.makeText(context, ""+name, Toast.LENGTH_LONG).show();
        context.startActivity(evento);  

Offline raimondo

  • Utente junior
  • **
  • Post: 130
  • Respect: 0
    • Mostra profilo
Re:problema con recezione sms
« Risposta #12 il: 15 Dicembre 2011, 15:37:29 CET »
0
allora sbagli ad acuisire il numero hai fatto come ti ho fatto vedere io...cio+è hai provato col mio codice?

Offline stefano74

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung G-S5660
  • Sistema operativo:
    Windows 7
Re:problema con recezione sms
« Risposta #13 il: 15 Dicembre 2011, 15:54:36 CET »
0
Ho fatto copia ed incolla come vedi nel mio primo post java

Offline stefano74

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung G-S5660
  • Sistema operativo:
    Windows 7
Re:problema con recezione sms
« Risposta #14 il: 15 Dicembre 2011, 16:10:12 CET »
0
Nel toast il numero mi acquisito me lo mostra correttamente. Non capisco perché poi non mi tira fuori il nome!