2015-10-06 70 views
1

我有一個SMSItem對象的ListView。當任何新的SMS到達時,它顯示在ListView。但是,在點擊ListView或活動重新啓動後,該項目正在消失。該項目未在ListView中顯示。修改Android清單文件後,項目正在從Android清單中消失

最可能的原因是因爲更改清單文件。我試圖將我的應用程序設置爲默認應用程序。我的清單文件如下:

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

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

    <uses-sdk 
     android:minSdkVersion="19" 
     android:targetSdkVersion="20" /> 


    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".SmsActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 



     <activity 
      android:name=".ShowIndividualSMS" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 

      <receiver android:name=".SmsBroadcastReceiver" 
       android:permission="android.permission.BROADCAST_SMS"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_DELIVER" /> 
      </intent-filter> 
     </receiver> 

     <!-- BroadcastReceiver that listens for incoming MMS messages --> 
     <receiver android:name=".MmsReceiver" 
      android:permission="android.permission.BROADCAST_WAP_PUSH"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" /> 
       <data android:mimeType="application/vnd.wap.mms-message" /> 
      </intent-filter> 
     </receiver> 

     <!-- Activity that allows the user to send new SMS/MMS messages --> 
     <activity android:name=".ComposeSmsActivity" > 
      <intent-filter> 
       <action android:name="android.intent.action.SEND" />     
       <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" /> 
       <data android:scheme="mms" /> 
       <data android:scheme="mmsto" /> 
      </intent-filter> 
     </activity> 

     <!-- Service that delivers messages from the phone "quick response" --> 
     <service android:name=".HeadlessSmsSendService" 
       android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE" 
       android:exported="true" > 
      <intent-filter> 
       <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <data android:scheme="sms" /> 
       <data android:scheme="smsto" /> 
       <data android:scheme="mms" /> 
       <data android:scheme="mmsto" /> 
      </intent-filter> 
     </service> 
    </application> 

</manifest> 

如果清單文件如下,那麼問題就解決了。列表中的項目不會消失。但在這種情況下,該應用程序未設置爲默認值。

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

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

    <uses-sdk 
     android:minSdkVersion="19" 
     android:targetSdkVersion="20" /> 


    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".SmsActivity" 
      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=".SmsBroadcastReceiver" 
      android:exported="true" > 
      <intent-filter android:priority="999" > 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 

     <activity 
      android:name=".ShowIndividualSMS" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 

     <!-- BroadcastReceiver that listens for incoming MMS messages --> 
     <receiver android:name=".MmsReceiver" 
      android:permission="android.permission.BROADCAST_WAP_PUSH"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" /> 
       <data android:mimeType="application/vnd.wap.mms-message" /> 
      </intent-filter> 
     </receiver> 

     <!-- Activity that allows the user to send new SMS/MMS messages --> 
     <activity android:name=".ComposeSmsActivity" > 
      <intent-filter> 
       <action android:name="android.intent.action.SEND" />     
       <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" /> 
       <data android:scheme="mms" /> 
       <data android:scheme="mmsto" /> 
      </intent-filter> 
     </activity> 

     <!-- Service that delivers messages from the phone "quick response" --> 
     <service android:name=".HeadlessSmsSendService" 
       android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE" 
       android:exported="true" > 
      <intent-filter> 
       <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <data android:scheme="sms" /> 
       <data android:scheme="smsto" /> 
       <data android:scheme="mms" /> 
       <data android:scheme="mmsto" /> 
      </intent-filter> 
     </service> 
    </application> 

列表中的項目沒有消失的原因是什麼?我該如何解決這個問題?

+1

如果問題發生在您的應用程序是默認的短信應用程序時,聽起來好像您並未將消息寫入提供程序。默認的短信應用程序負責保存所有傳入的消息。 –

+0

是的,我不寫信息給提供者。我怎樣才能做到這一點 ? @MikeM。我怎樣才能保存所有傳入的消息? –

+1

幾乎和往常一樣。 [這篇文章](http://stackoverflow.com/questions/642076/how-to-save-sms-to-inbox-in-android)顯示的基礎知識。但是,從API 19開始,'android.provider.Telephony。*'中的類提供了方便的常量和方法,可以在默認應用程序中使用。 –

回答

1

考慮到您的問題陳述,它聽起來像您的應用程序不會將收到的消息寫入SMS提供程序時,它是默認的SMS應用程序,顯然是這種情況。

默認的短信應用程序負責將所有傳入消息寫入提供程序。當您的應用忽略寫入消息,然後刷新ListView時,新消息將不在收件箱查詢返回的列表中。

自從API公開之前,向提供者寫SMS消息的基本原理沒有多大變化。 This post有幾個例子。我還要指出,從API 19開始,android.provider.Telephony.Sms類存在,並且包含一些方便的常量,例如, Telephony.Sms.CONTENT_URI,Telephony.Sms.ADDRESS,Telephony.Sms.BODY