Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I made an example which works for me.</p> <p>I had issues with the progress dialog not working which was caused by my use of threading.</p> <p><code>AndroidManifest.xml</code>:</p> <pre><code>&lt;manifest package="com.mw.stackoverflow.example02" android:versionCode="1" android:versionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android"&gt; &lt;uses-sdk android:minSdkVersion="10" android:targetSdkVersion="15" /&gt; &lt;uses-permission android:name="android.permission.RECEIVE_SMS"/&gt; &lt;application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" &gt; &lt;activity android:name=".MainActivity" android:label="@string/title_activity_main" &gt; &lt;intent-filter&gt; &lt;action android:name="android.intent.action.MAIN" /&gt; &lt;category android:name="android.intent.category.LAUNCHER" /&gt; &lt;/intent-filter&gt; &lt;/activity&gt; &lt;/application&gt; &lt;/manifest&gt; </code></pre> <p><code>MainActivity.java</code>:</p> <pre><code>package com.mw.stackoverflow.example02; import android.os.AsyncTask; import android.os.Bundle; import android.telephony.SmsMessage; import android.util.Log; import android.widget.TextView; import android.widget.Toast; import android.app.Activity; import android.app.ProgressDialog; import android.content.IntentFilter; public class MainActivity extends Activity implements SmsUpdater { private static final String TAG = "MainActivity"; private SmsReceiver mSmsReceiver; private class ExaminMessagesTask extends AsyncTask&lt;SmsMessage, Void, Boolean&gt; { ProgressDialog mProgressDialog; @Override protected void onPreExecute() { super.onPreExecute(); mProgressDialog = new ProgressDialog(MainActivity.this); mProgressDialog.setMessage("Receiving SMS."); mProgressDialog.setIndeterminate(true); mProgressDialog.setCancelable(true); mProgressDialog.show(); } protected Boolean doInBackground(SmsMessage... messages) { if (messages.length &gt; 0) { Log.d(TAG, "Showing progress dialog."); } for (SmsMessage m: messages) { Log.d(TAG, "Message received"); } int count = 0; for(SmsMessage msg:messages) { String num = msg.getOriginatingAddress(); Log.d(TAG, num); mProgressDialog.setTitle("Processing message " + (count++)); try { Thread.sleep(1000); } catch (InterruptedException e) { } } return true; } protected void onProgressUpdate(Integer... progress) { } protected void onPostExecute(Boolean result) { mProgressDialog.dismiss(); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSmsReceiver = new SmsReceiver(this); } @Override protected void onResume() { super.onResume(); IntentFilter filter = new IntentFilter(); filter.addAction("android.provider.Telephony.SMS_RECEIVED"); registerReceiver(mSmsReceiver, filter); } @Override public void onPause() { super.onPause(); unregisterReceiver(mSmsReceiver); } @Override public void gotSms(final SmsMessage[] m) { Log.d(TAG, "OnReceive, number of messages: " + m.length); runOnUiThread(new Runnable() { public void run() { Toast.makeText(MainActivity.this, "SMS received", Toast.LENGTH_SHORT).show(); new ExaminMessagesTask().execute(m); } }); } } </code></pre> <p><code>SmsReceiver.java</code>:</p> <pre><code>package com.mw.stackoverflow.example02; import android.os.Bundle; import android.app.Activity; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.support.v4.app.NavUtils; import android.telephony.SmsMessage; class SmsReceiver extends BroadcastReceiver { private static final String TAG = "SMSREC"; private SmsUpdater mSmsUpdater; public SmsReceiver(SmsUpdater u) { super(); mSmsUpdater = u; } public void onReceive(Context context, Intent intent) { Log.d(TAG, "OnReceive called."); Bundle bundle=intent.getExtras(); Object[] messages=(Object[])bundle.get("pdus"); SmsMessage[] sms = new SmsMessage[messages.length]; for(int n=0;n&lt;messages.length;n++) { sms[n]=SmsMessage.createFromPdu((byte[]) messages[n]); } mSmsUpdater.gotSms(sms); } } </code></pre> <p><code>SmsUpdater.java</code></p> <pre><code>package com.mw.stackoverflow.example02; import android.telephony.SmsMessage; public interface SmsUpdater { void gotSms(SmsMessage[] m); } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload