2012-07-03 16 views
3

我是新的android開發。我正在開發小型android應用程序。在我的應用程序中,我想檢索新來的短信並將此消息顯示給用戶。我的代碼看起來像閱讀並顯示傳入的消息文本android

// HellowordActivity.java 
package com.example.helloword; 

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

public class HellowordActivity extends BroadcastReceiver 
{ 
    public void onReceive(Context context, Intent intent) 
    { 
    Bundle myBundle = intent.getExtras(); 
    SmsMessage [] messages = null; 
    String strMessage = ""; 

    if (myBundle != null) 
    { 
     Object [] pdus = (Object[]) myBundle.get("pdus"); 
     messages = new SmsMessage[pdus.length]; 

     for (int i = 0; i < messages.length; i++) 
     { 
      messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      strMessage += "SMS From: " + messages[i].getOriginatingAddress(); 
      strMessage += " : "; 
      strMessage += messages[i].getMessageBody().toString(); 
      strMessage += "\n"; 
     } 
     // Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show(); 

     Intent _intent = new Intent(context, PopupActivity.class); 
     _intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     _intent.putExtra("strMessage", strMessage); 
     startActivity(_intent); 
     } 
    } 

    } 

我在Android中的Manifest.xml增加接收器和權限

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

     <receiver android:name=".HellowordActivity" > 
       <intent-filter > 
       <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
       </intent-filter> 
     </receiver> 
<activity android:name=".PopupActivity" android:launchMode="singleTop" /> 

我不是新做的時候在佈局part.What我想任何事,作爲一個輸出消息將來臨;用簡單的彈出式菜單向用戶顯示消息文本。 需要幫助..謝謝你...

+0

你有什麼問題發送短信到你的模擬器? –

+0

我在我的android設備上安裝了這個應用程序。當新消息到達時,它不顯示消息文本(消息正文),即在我的代碼strMessage中。我想顯示該消息給用戶...任何建議..... – nilkash

回答

11

試試這個工作對我來說,你會得到證明你的內容舉杯收到的消息:

package com.example.a; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.util.Log; 
import android.widget.Toast; 

    public class SMSBroadcastReceiver extends BroadcastReceiver { 

      private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 
      private static final String TAG = "SMSBroadcastReceiver"; 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       Log.i(TAG, "Intent recieved: " + intent.getAction()); 

        if (intent.getAction().equals(SMS_RECEIVED)) { 
         Bundle bundle = intent.getExtras(); 
         if (bundle != null) { 
          Object[] pdus = (Object[])bundle.get("pdus"); 
          final SmsMessage[] messages = new SmsMessage[pdus.length]; 
          for (int i = 0; i < pdus.length; i++) { 
           messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
          } 
          if (messages.length > -1) { 
           Toast.makeText(context, "Message recieved: " + messages[0].getMessageBody(), 7000).show(); 
          } 
         } 
        } 
       } 
     } 

AndroidManifest.xml中

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.a" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="15" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"/> 
    <uses-permission android:name="android.permission.HARDWARE_TEST"/> 


    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <receiver android:name=".SMSBroadcastReceiver" > 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" > 
       </action> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

使用DDMS通過Telnet

+0

謝謝K_anas的回覆。我會嘗試。 – nilkash

+0

@nilkash它適用於我我無法添加快照,因爲它發生的速度很快,我無法在模擬器上拍攝快照 –

+0

謝謝K_Anas ..它按要求正常工作。並感謝您的DDMS技巧。 – nilkash

1

,如果你想顯示一個彈出時,短信Recived,那麼你將需要與android:launchMode="singleTop"創建活動爲:

在manifast申報活動爲:

<activity android:name=".PopupActivity" android:launchMode="singleTop" /> 

從HellowordActivity廣播接收器開始活動爲:

Intent intent = new Intent(context, PopupActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent .putExtra("strMessage", strMessage); 
context.startActivity(intent); 

而在你PopupActivity.class

public class PopupActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // The activity is being created. 
     Intent intent= getIntent();//get message here 
     String strMessage = intent.getStringExtra("strMessage"); 
     //NOW YOU CAN SHOW THIS MESSAGE IN POPUP 
    } 
    @Override 
    protected void onStop() { 
     super.onStop(); 
     this.finish(); 
     // The activity is no longer visible (it is now "stopped") 
    } 

您還可以檢出這些Smspopup apps源代碼:

android-smspopup

sms-enhancer

+0

看到我的編輯答案每個短信彈出應用程序做相同的方式,因爲我告訴你 –

+0

嘗試strMessage + ='messages [i] .getMessageBody()。 toString();'而不是'strMessage + = messages [i] .getMessageBody();' –

+0

謝謝Imran的快速回復。正如你所說我創建一個活動。在PopupActivity.java.But中聲明活動,並在PopupActivity.java.But中定義活動時,當我嘗試從HellowordActivity啓動活動時,它給了我startActivity的錯誤(intent)錯誤:方法startActivity(intent)未定義HellowordActivity的類型 – nilkash