Autore Topic: intent sms  (Letto 2109 volte)

Offline Skorpion

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy tab
  • Sistema operativo:
    Windows 7
intent sms
« il: 20 Aprile 2011, 17:11:09 CEST »
0
Ciao a tutti,

ho questo problema che mi sta facendo scervellare da qualche giorno: voglio fare in modo che la mia applicazione apra in automatico il programma di messaggistica, predisponga numero e testo messaggio ed aspetti la conferma dell'operatore.
Questo è il codice che sto utilizzando:

Codice (Java): [Seleziona]
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.setType("vnd.android-dir/mms-sms");
sendIntent.putExtra("address", "123456");  
sendIntent.putExtra("sms_body", "testo messaggio");  
startActivity(sendIntent);

Sull'emulatore funziona perfettamente, mentre sul galaxy mi riempie il corpo del messaggio ma non il numero.
Qualcuno sa darmi una mano?

Grazie!

Offline GuiZ

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    LG OPTIMUS ONE LP-500
  • Play Store ID:
    Geek-Blog.it
  • Sistema operativo:
    Ubuntu 10.10
Re:intent sms
« Risposta #1 il: 20 Aprile 2011, 18:19:49 CEST »
0
Ciao,
hai provato una variante del genere?
Codice (Java): [Seleziona]
    Uri uri = Uri.parse("smsto:" + smsNumber);
    Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
    intent.putExtra("sms_body", smsText);  

Offline Skorpion

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy tab
  • Sistema operativo:
    Windows 7
Re:intent sms
« Risposta #2 il: 21 Aprile 2011, 15:08:54 CEST »
0
Con questa variante mi popola il numero ma non il corpo del messaggio...   o_O

Offline GuiZ

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    LG OPTIMUS ONE LP-500
  • Play Store ID:
    Geek-Blog.it
  • Sistema operativo:
    Ubuntu 10.10
Re:intent sms
« Risposta #3 il: 21 Aprile 2011, 15:19:22 CEST »
0
Mi scrivi tutta la porzione di codice modificata?

Offline Skorpion

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy tab
  • Sistema operativo:
    Windows 7
Re:intent sms
« Risposta #4 il: 21 Aprile 2011, 15:23:07 CEST »
0
Ecco qua:

Codice (Java): [Seleziona]
String smsNumber = "123456";
String smsText = "MESSAGGIO DEMO";
                               
Uri uri = Uri.parse("smsto:" + smsNumber);    
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);    
intent.putExtra("sms_body", smsText);      
startActivity(intent);

Offline GuiZ

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    LG OPTIMUS ONE LP-500
  • Play Store ID:
    Geek-Blog.it
  • Sistema operativo:
    Ubuntu 10.10
Re:intent sms
« Risposta #5 il: 21 Aprile 2011, 15:43:14 CEST »
0
Sparagli prima del sms_body questo
Codice (Java): [Seleziona]
 intent.setType("vnd.android-dir/mms-sms");

Offline Skorpion

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy tab
  • Sistema operativo:
    Windows 7
Re:intent sms
« Risposta #6 il: 21 Aprile 2011, 15:51:09 CEST »
0
Di male in peggio ora va in errore:

Codice: [Seleziona]
04-21 15:44:05.398: ERROR/AndroidRuntime(4681): FATAL EXCEPTION: main
04-21 15:44:05.398: ERROR/AndroidRuntime(4681): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SENDTO typ=vnd.android-dir/mms-sms (has extras) }
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at android.app.Activity.startActivityForResult(Activity.java:2817)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at android.app.Activity.startActivity(Activity.java:2923)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at lm.test.Test$1.onClick(Test.java:54)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at android.view.View.performClick(View.java:2408)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at android.view.View$PerformClick.run(View.java:8818)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at android.os.Handler.handleCallback(Handler.java:587)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at android.os.Looper.loop(Looper.java:123)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at android.app.ActivityThread.main(ActivityThread.java:4627)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at java.lang.reflect.Method.invokeNative(Native Method)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at java.lang.reflect.Method.invoke(Method.java:521)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
04-21 15:44:05.398: ERROR/AndroidRuntime(4681):     at dalvik.system.NativeStart.main(Native Method)

mantenendo il setType, se cambio
Codice (Java): [Seleziona]
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
in
Codice (Java): [Seleziona]
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
non mi da più errore ma torno alla situazione iniziale in cui mi popola il corpo del messaggio e non il numero

Offline GuiZ

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    LG OPTIMUS ONE LP-500
  • Play Store ID:
    Geek-Blog.it
  • Sistema operativo:
    Ubuntu 10.10
Re:intent sms
« Risposta #7 il: 21 Aprile 2011, 16:54:51 CEST »
0
Ma utilizzi quello predefinito  o uno personalizzato nel tel?

Offline Skorpion

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy tab
  • Sistema operativo:
    Windows 7
Re:intent sms
« Risposta #8 il: 21 Aprile 2011, 17:04:17 CEST »
0
Per inviare l'sms mi apre il programma predefinito, anche perché il tab è praticamente nuovo e non ha nessun programma installato che non sia di quelli di default.

Offline aw4y

  • Utente junior
  • **
  • Post: 59
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    samsung i5500
  • Sistema operativo:
    osx/linux
Re:intent sms
« Risposta #9 il: 21 Aprile 2011, 17:54:25 CEST »
0
Strano. In una mia app tutto funziona benissimo con:

     private void sendSms(String txt,String to) {
        Intent sendIntent = new Intent(Intent.ACTION_VIEW);
        sendIntent.putExtra("sms_body", txt);
        sendIntent.putExtra("address", to);
        sendIntent.setType("vnd.android-dir/mms-sms");
        startActivity(sendIntent);
    }

Offline Skorpion

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy tab
  • Sistema operativo:
    Windows 7
Re:intent sms
« Risposta #10 il: 21 Aprile 2011, 18:42:20 CEST »
0
Strano. In una mia app tutto funziona benissimo con:

     private void sendSms(String txt,String to) {
        Intent sendIntent = new Intent(Intent.ACTION_VIEW);
        sendIntent.putExtra("sms_body", txt);
        sendIntent.putExtra("address", to);
        sendIntent.setType("vnd.android-dir/mms-sms");
        startActivity(sendIntent);
    }

Ciao! L'hai provato su un galaxy tab?

Offline GuiZ

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    LG OPTIMUS ONE LP-500
  • Play Store ID:
    Geek-Blog.it
  • Sistema operativo:
    Ubuntu 10.10
Re:intent sms
« Risposta #11 il: 22 Aprile 2011, 09:47:29 CEST »
0
Ho provato su un galaxy e non funge!L'unica spiegazione potrebbe essere qualche variante che samsung ha aggiunto al sms.

Forse i parametri passati sono diversi.non so che pensare!.


Qui forse delle info sulla sdk specifica
http://innovator.samsungmobile.com/galaxyTab.do
« Ultima modifica: 22 Aprile 2011, 09:53:18 CEST da GuiZ »

Offline aw4y

  • Utente junior
  • **
  • Post: 59
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    samsung i5500
  • Sistema operativo:
    osx/linux
Re:intent sms
« Risposta #12 il: 22 Aprile 2011, 09:53:38 CEST »
0
l'ho provato su un galaxy s (non tab) e funziona...

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:intent sms
« Risposta #13 il: 22 Aprile 2011, 11:05:19 CEST »
0
Basta farsi un giretto nei sorgenti per spulciare e capire come chiamare i componenti di android.

In particolare l'applicazione degli sms si trova qui: android.git.kernel.org Git - platform/packages/apps/Mms.git/summary

Estratto del manifest:
Codice (XML): [Seleziona]
        <activity android:name=".ui.ComposeMessageActivity"
                 android:configChanges="orientation|keyboardHidden"
                 android:windowSoftInputMode="stateHidden"
                 android:launchMode="singleTop" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android-dir/mms-sms" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <action android:name="android.intent.action.SENDTO" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="sms" />
                <data android:scheme="smsto" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <action android:name="android.intent.action.SENDTO" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="mms" />
                <data android:scheme="mmsto" />
            </intent-filter>
           <intent-filter>
               <action android:name="android.intent.action.SEND" />
               <category android:name="android.intent.category.DEFAULT" />
               <data android:mimeType="image/*" />
           </intent-filter>
           <intent-filter>
               <action android:name="android.intent.action.SEND" />
               <category android:name="android.intent.category.DEFAULT" />
               <data android:mimeType="video/*" />
           </intent-filter>
           <intent-filter>
               <action android:name="android.intent.action.SEND" />
               <category android:name="android.intent.category.DEFAULT" />
               <data android:mimeType="text/plain" />
           </intent-filter>
           <intent-filter>
               <action android:name="android.intent.action.SEND_MULTIPLE" />
               <category android:name="android.intent.category.DEFAULT" />
               <data android:mimeType="*/*" />
           </intent-filter>
        </activity>

Estratto da ComposeMessageActivity
Codice (Java): [Seleziona]
        mExitOnSent = intent.getBooleanExtra("exit_on_sent", false);
        mWorkingMessage.setText(intent.getStringExtra("sms_body"));
        mWorkingMessage.setSubject(intent.getStringExtra("subject"), false);

Quindi i parametri da passare sono "sms_body" e "subject" e l'azione da richiamare è android.intent.action.SENDTO utilizzando lo schema smsto.

Non ho provato ma dovrebbe funzionare. E se non funziona vuol dire che Samsung, HTC, Sony, ecc... hanno fatto delle personalizzazioni del framework non rispettando degli standard, ed in questo caso "si attaccano"!