2013-08-28 67 views
-1

我是新來的android和我使用android 2.1的一些sms_receive事情:當一個短信收到,它不會工作......我有一個力量關閉,幫助!如何在android中接收短信?

public class SmsReceiverActivity extends Activity { 
    private static final String SHORTCODE = "55443"; 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras(); 
     Object[] messages = (Object[]) bundle.get("pdus"); 
     SmsMessage[] sms = new SmsMessage[messages.length]; 
     //Create messages for each incoming PDU 
     for (int n = 0; n < messages.length; n++) { 
      sms[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
     } 
     for (SmsMessage msg: sms) { 
      //Verify if the message came from our known sender 
      if (TextUtils.equals(msg.getOriginatingAddress(), "SHORTCODE")) { 
       Toast.makeText(context, "Received message from the mothership: " + msg.getMessageBody(),Toast.LENGTH_SHORT).show(); 
      } 
     } 
} 

Android清單:

<uses-sdk android:minSdkVersion="7" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS"/> 
<application android:label="@string/app_name"> 
    <activity 
     android:name=".SmsReceiver" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver android:name=".SMSReceiver" android:enabled="true"> 
     <intent-filter android:priority="100"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
</application> 

安裝程序,我想運行它的時候,我有密切的力量,這是我的logcat:

08-26 12:36:58.531: D/AndroidRuntime(700): Shutting down VM 
08-26 12:36:58.531: W/dalvikvm(700): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
08-26 12:36:58.573: E/AndroidRuntime(700): Uncaught handler: thread main exiting due to uncaught exception 
08-26 12:36:58.621: E/AndroidRuntime(700): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.smsreceiver/com.example.smsreceiver.SmsReceiver}: java.lang.ClassNotFoundException: com.example.smsreceiver.SmsReceiver in loader [email protected] 
08-26 12:36:58.621: E/AndroidRuntime(700): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417) 
08-26 12:36:58.621: E/AndroidRuntime(700): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
08-26 12:36:58.621: E/AndroidRuntime(700): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
08-26 12:36:58.621: E/AndroidRuntime(700): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
08-26 12:36:58.621: E/AndroidRuntime(700): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-26 12:36:58.621: E/AndroidRuntime(700): at android.os.Looper.loop(Looper.java:123) 
08-26 12:36:58.621: E/AndroidRuntime(700): at android.app.ActivityThread.main(ActivityThread.java:4363) 
08-26 12:36:58.621: E/AndroidRuntime(700): at java.lang.reflect.Method.invokeNative(Native Method) 
08-26 12:36:58.621: E/AndroidRuntime(700): at java.lang.reflect.Method.invoke(Method.java:521) 
08-26 12:36:58.621: E/AndroidRuntime(700): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
08-26 12:36:58.621: E/AndroidRuntime(700): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
08-26 12:36:58.621: E/AndroidRuntime(700): at dalvik.system.NativeStart.main(Native Method) 
08-26 12:36:58.621: E/AndroidRuntime(700): Caused by: java.lang.ClassNotFoundException: com.example.smsreceiver.SmsReceiver in loader [email protected] 
08-26 12:36:58.621: E/AndroidRuntime(700): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 
08-26 12:36:58.621: E/AndroidRuntime(700): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 
08-26 12:36:58.621: E/AndroidRuntime(700): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 
08-26 12:36:58.621: E/AndroidRuntime(700): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
08-26 12:36:58.621: E/AndroidRuntime(700): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409) 
08-26 12:36:58.621: E/AndroidRuntime(700): ... 11 more 
08-26 12:36:58.651: I/dalvikvm(700): threadid=7: reacting to signal 3 
08-26 12:36:58.651: E/dalvikvm(700): Unable to open stack trace file '/data/anr/traces.txt': Permission denied 
+1

請發表您的logcat的錯誤。 – nedaRM

+1

_什麼不起作用?你得到一個錯誤?你沒有收到任何短信? – RvdK

+0

您必須先閱讀有關'BroadcastReciever'的內容。 http://developer.android.com/reference/android/content/BroadcastReceiver.html –

回答

0

我認爲你需要Manifest.xml like:

<receiver android:name=".SmsReceiver"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
     <action android:name="PACKAGE_NAME.android.action.broadcast"/> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
    </intent-filter> 
</receiver> 

,改變你的類名SmsReceiverActivitySmsReceiver,也是你的類需要擴展廣播接收器
瞭解如何在這裏做到這一點:

0

你需要一個BroadcastReceiver在應用程序中閱讀短信。您可以使用以下內容。

public class SmsReceiver extends BroadcastReceiver { 

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

     Object[] pdus = (Object[]) intent.getExtras().get("pdus"); 

     SmsMessage shortMessage = SmsMessage.createFromPdu((byte[]) pdus[0]); 

     Log.i("sms received", "sms received"); 
     Log.i("SMS: ", shortMessage.getDisplayMessageBody()); 
    } 
} 

此外,您還需要通過以下方式將其聲明到您的應用程序中。

<receiver android:name="YOUR_PACKAGE_NAME.SmsReceiver" > 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 

不要忘記添加到SMS相關的權限,如以下

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

對不起Mr.Moaaviah我有錯誤的「聯繫」和「UserPreferences」中你的代碼,什麼是「聯繫人」和「UserPreferences」?非常感謝 –

+0

@maryam_mo請檢查它。有一些額外的東西,我已經刪除。請更改YOUR_PACKAGE_NAME與您的各自的包裹。 –