2013-12-23 43 views
0

我想從收件箱中讀取所有短信,並在列表視圖中顯示這些短信。我面臨無法將收件箱中的短信讀入列表視圖

的問題是:

1)我正在列表 「msgList」 爲空,也都被列入 「labeles」[由方法getSms()]作爲空白。我在收件箱中有2個短信。

2)它從不在for循環中打印hhhhhhh + labeles。

任何人都可以建議我改變下面的代碼,以便我可以讀取收件箱的短信並列入listView?我究竟在哪裏出錯了?

我已經寫了下面的代碼:ViewTask.java

package com.example.myapp; 

import java.util.ArrayList; 
import java.util.List; 

import android.net.Uri; 
import android.os.Bundle; 
import android.app.Activity; 
import android.database.Cursor; 
import android.view.Menu; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class ViewTask extends Activity { 

TextView tv_view_task; 
ListView lv_view_task; 
static String sms = ""; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_view_task); 
    tv_view_task=(TextView) findViewById(R.id.tv_view_task); 
    lv_view_task=(ListView) findViewById(R.id.lv_view_task); 

    List<String> msgList = getSms(); 
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1, msgList); 
     lv_view_task.setAdapter(adapter); 
} 

public List<String> getSms() 
{ 
    List<String> labeles = new ArrayList<String>(); 
    Uri uri = Uri.parse("content://sms/inbox"); 
    Cursor c= getContentResolver().query(uri, null, null ,null,null); 

    // Read the sms data and store it in the list 
    if(c.moveToFirst()) { 
     for(int i=0; i < c.getCount(); i++) { 

      sms += "From :" + c.getString(2) + " : " + c.getString(11)+"\n"; 
      labeles.add(sms); 
      System.out.println("hhhhhh"+labeles); 
      c.moveToNext(); 
     } 
    } 
    c.close(); 
    System.out.println("aaaaaaa"+labeles); 
    return labeles; 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_view_task, menu); 
    return true; 
} 
} 

這裏是我的activity_view_task.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<TextView 
    android:id="@+id/tv_tasks" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:text="Tasks" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

<ListView 
    android:id="@+id/lv_view_task" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/tv_tasks" 
    android:layout_centerHorizontal="true" > 

</ListView> 

的Manifest.xml

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

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="15" /> 

<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.READ_SMS"/> 

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

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".DisplayMsg" 
     android:label="@string/title_activity_display_msg" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".FormActivity" 
     android:label="@string/title_activity_form" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".DetailsActivity" 
     android:label="@string/title_activity_details" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".MainPageActivity" 
     android:label="@string/title_activity_main_page" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".ViewTaskActivity" 
     android:label="@string/title_activity_view_task" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 


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

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

enter image description here

+0

? <使用權限的android:name =「android.permission.READ_SMS」> Shahar

+0

是的,我已經寫在我的清單文件這個權限代碼.... – Rohhit

+0

偉大的作品,唯一的是那「c.getString(11)」返回null ......也許會打破你的循環。 – Shahar

回答

1

嘗試此方法..

public List<String> getSms() { 
    List<String> labeles = new ArrayList<String>(); 
    Uri uri = Uri.parse("content://sms/inbox"); 
    Cursor c = getContentResolver().query(uri, null, null, null, null); 
    String sms = null; 

    // Read the sms data and store it in the list 
    if (c.moveToFirst()) { 
     do { 
      String body = c.getString(c.getColumnIndex("body")); 
      String address = c.getString(c.getColumnIndex("address")); 
      sms = "From : " + address + " : " + body; 
      labeles.add(sms); 
     } while (c.moveToNext()); 
    } 
    c.close(); 
    // System.out.println("aaaaaaa" + labeles); 
    return labeles; 
} 

:不要忘了添加的權限..

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

這對我來說非常合適.. **閱讀收件箱信息** –

+0

沒有人不在我身邊工作...... :(任何其他解決方案? – Rohhit

+0

您是否獲得了**標籤** atleast ..? –

0

我已經做在你的代碼的一些變化試試這個

import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class ViewTask extends Activity { 

TextView tv_view_task; 
ListView lv_view_task; 
static String sms = ""; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_view_task); 
    tv_view_task=(TextView) findViewById(R.id.tv_tasks); 
    lv_view_task=(ListView) findViewById(R.id.lv_view_task); 

    List<String> msgList = getSms(); 
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1, msgList); 
     lv_view_task.setAdapter(adapter); 
} 

public List<String> getSms() 
{ 
    List<String> labeles = new ArrayList<String>(); 
    Uri uri = Uri.parse("content://sms/inbox"); 
    Cursor c= getContentResolver().query(uri, null, null ,null,null); 

    // Read the sms data and store it in the list 
    if(c.moveToFirst()) { 
     for(int i=0; i < c.getCount(); i++) { 

      sms += "From :" + c.getString(2) + " : " + c.getString(11)+"\n"; 
      labeles.add(sms); 
      Log.i("meenal","hhhhhh"+labeles); 
      c.moveToNext(); 
     } 
    } 
    c.close(); 
    Log.i("meenal","aaaaaaa"+labeles); 
    return labeles; 
} 

}

和你的XML

<?xml version="1.0" encoding="utf-8"?> 

<TextView 
    android:id="@+id/tv_tasks" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:text="Tasks" 
    android:textColor="@android:color/black" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

<ListView 
    android:id="@+id/lv_view_task" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/tv_tasks" 
    android:layout_centerHorizontal="true" > 
</ListView> 

和使用權限清單

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 
<uses-permission android:name="android.permission.READ_SMS"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <activity 
     android:name="com.example.imaegcolourchange.ViewTask" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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