SMS_RECEIVED non lavora su Ice Cream Sandwich?

Sto cercando di utilizzare android.provider.Telephony.SMS_RECEIVED per catturare SMS in arrivo.

Ho costruito una semplice applicazione, che funziona su 2.x, ma quando lo provo sul mio emulatore o dispositivo 4.0, non funziona.

  • createNewFile - open failed: ENOENT (Nessun file o directory)
  • Come posso aprire / chiudere automaticamente le notifiche in Android?
  • Crea un'applicazione ionica nell'elenco "Condividi" e ricevi i dati
  • Android Google Maps LocationClient
  • come impostare un integer text e get int senza get errori
  • android rettangolo arrotondato senza background rettangolo diritto-bordo
  • Qualche idea?

    Manifesto:

    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.giggsey.MyFirstApp" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name"> <receiver android:name=".MyFirstApp"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> </intent-filter> </receiver> </application> <uses-sdk android:minSdkVersion="9" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> </manifest> 

    MyFirstApp.java

     public class MyFirstApp extends BroadcastReceiver { private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; private static final String TAG = "MyFirstApp"; @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "Intent recieved: " + intent.getAction()); } } 

  • Qual è l'equivalente di ActionBar nelle versioni precedenti di sdk?
  • Come impostare il carattere personalizzato per un'intera applicazione in Android?
  • Libreria IRC per Android (da 2.3.3 a 4.0.3)?
  • Android: come scalare un layout con dimensione dello schermo
  • Android Scaling Canvas Bitmap
  • Richiedere una password per disinstallare / rimuovere l'applicazione
  • 6 Solutions collect form web for “SMS_RECEIVED non lavora su Ice Cream Sandwich?”

    Assicurati di creare e registrare il ricevente in un'attività o in un servizio, altrimenti non verrà chiamato (credo).

    Un esempio molto semplice di questo potrebbe essere:

     public class MyActivity extends Activity { private BroadcastReceiver receiver; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); IntentFilter filter = new IntentFilter(); filter.addAction("android.provider.Telephony.SMS_RECEIVED"); //Extends BroadcastReceiver receiver = new MyFirstApp(); registerReceiver(receiver,filter); } //Also, to save headaches later @Override protected void onDestroy() { unregisterReceiver(receiver); } } 

    Non posso promettere che questo functionrà, ma credo che risolverà alcune cose. Se avete delle domande su roba, basta chiedere commenti. Credo che tu sia giusto dicendo che non è nemless chiamato perché il tuo ricevitore non è registrato a niente. Se lo desideri eseguire in background, consideri di utilizzare un servizio. Spero davvero che questo aiuti e la migliore fortuna con i tuoi sforzi!

    È sufficiente esportre il valore vero per il destinatario.

     <receiver android:name=".MyFirstApp" exported="true"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> </intent-filter> </receiver> 

    Penso che il tuo errore è che utilizzi il nome della class nel tuo nome del pacchetto.

    Nel tuo manifesto hai scritto package="com.giggsey.MyFirstApp" e anche <receiver android:name=".MyFirstApp"> nel tuo ricevitore. Ciò significa che il nome completo del ricevitore è com.giggsey.MyFirstApp.MyFirstApp , ma credo sia com.giggsey.MyFirstApp .

    Scambio com.giggsey.MyFirstApp nel tuo manifesto con com.giggsey che potrebbe funzionare se indovino giusto.

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.giggsey" android:versionCode="1" android:versionName="1.0"> [...] 

    E anche questo:

     package com.giggsey; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyFirstApp extends BroadcastReceiver { private static final String TAG = "MyFirstApp"; @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "Intent recieved: " + intent.getAction()); } } 

    nel caso in cui si tenta "catch" in backgroung puoi vedere questo post .

    "android.provider.Telephony.SMS_RECEIVED" funziona ottimamente dal Servizio . altrimenti solo durante il ciclo di vita dell'attività è ansible "catturarlo"

    Questo può aiutarti a provare questo .. Nella class ricevente brodcast

      public static final String SMS_BUNDLE = "pdus"; public void onReceive(Context context, Intent intent) { Bundle intentExtras = intent.getExtras(); if (intentExtras != null) { Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE); String smsMessageStr = ""; for (int i = 0; i < sms.length; ++i) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]); smsBody = smsMessage.getMessageBody().toString(); address = smsMessage.getOriginatingAddress(); smsMessageStr += "SMS From: " + address + "\n"; smsMessageStr += smsBody + "\n"; } Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show(); } 

    nella ricezione ricevere provare a aggiungere la seguente row

     private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; if (intent.getAction() == SMS_RECEIVED) { //any action you want here.. Toast.makeText(MyClass.this, "SMS RECEIVED",Toast.LENGTH_LONG).show(); } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.