安卓短信读取并在自定义listview中显示

最近在做android广播的东西,网上看资料有人提到广播拦截短信,才发现自己没有了解过安卓短信方面的知识,于是自己做个一个短信阅读器~这只是原型,以后会完善的。

我做的实例中用了listview的自定义适配器来显示短信内容。下面看代码部分

主要类主

package com.example.guangbo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.example.guangbo.MyAdapter.ViewHolder;

public class main extends Activity {
	
	private Button bt;
	private ListView list;
	 private MyAdapter adapter;
	   @Override  
	    public void onCreate(Bundle savedInstanceState) {  
	        super.onCreate(savedInstanceState);  
	        setContentView(R.layout.activity_main); 
	       // textView1=(TextView)findViewById(R.id.textView1);
	        bt=(Button)findViewById(R.id.btnEnable);
	        list=(ListView)findViewById(R.id.listview);
	        li_phone lii=new li_phone();
	        
			
	        bt.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					li_phone li=new li_phone();
					li.deleteList();
					ArrayList<Map<String,String>> Adapter=new ArrayList<Map<String,String>>();
					 try 
				        { 
				            // 准备系统短信收信箱的uri地址 
				            Uri uri = Uri.parse("content://sms/inbox");// 收信箱 
				            // 查询收信箱里所有的短信 
				            Cursor isRead = 
				            		main.this.getContentResolver().query(uri, null,null, 
				                            null, null); 
				            String str="";
				            if(isRead.equals("")){
				            	//  textView1.setText("没有未读短信");
				            }else{
				            	
				            while (isRead.moveToNext()) //如果有下一条
				            { 
				            	HashMap<String, String> map=new HashMap<String, String>();
				                 String phone = 
				                 isRead.getString(isRead.getColumnIndex("address")).trim();//获取发信人 
				                String body = 
				                        isRead.getString(isRead.getColumnIndex("body")).trim();// 获取信息内容 
				                li.setList(phone);
				                map.put("address", phone);
				                map.put("body", body);
				                Adapter.add(map);
				             } 
				        } 
				        }
				        catch (Exception e) 
				        { 
				            e.printStackTrace(); 
				        } 
					 adapter=new MyAdapter(Adapter, main.this);
					 int i=adapter.getCount();
					 list.setAdapter(adapter);
					Log.e(li.getListSize()+"", li.getListSize()+"");

					
				}
			});
	       
	    } 
	  
	      
	    



}

 列表视图自定义适配器类   MyAdapter 

package com.example.guangbo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;



import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter{
    // 填充数据的list
    private static ArrayList<Map<String,String>> list ;
    private Context context;
    // 用来导入布局
    private LayoutInflater inflater = null;
    // 构造器
    public MyAdapter(ArrayList<Map<String,String>> list1 , Context context1) {
        context = context1;
        list = list1;
       
        inflater = LayoutInflater.from(context);
        
    }

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return list.get(arg0);
	}

	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return arg0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		  ViewHolder holder = null;
          if (convertView == null) {
          // 获得ViewHolder对象
          holder = new ViewHolder();
          // 导入布局并赋值给convertview
          convertView = inflater.inflate(R.layout.phone,null);
          holder.tvph = (TextView) convertView.findViewById(R.id.tvph);
          holder.tvcn = (TextView) convertView.findViewById(R.id.tvcn);
         
          // 为view设置标签
          convertView.setTag(holder);
      } else {
          // 取出holder
          holder = (ViewHolder) convertView.getTag();
          }
          holder.tvph.setText(list.get(position).get("address").toString());
          
          holder.tvcn.setText(list.get(position).get("body").toString());
		return convertView;
	}
	 public final class ViewHolder{
		    public TextView tvph;
		    public TextView tvcn;
		    
		    
		    }

}

 布局文件  activity_main.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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

  

    <ListView
        android:id="@+id/listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btnEnable" >
</ListView>

    <Button
        android:id="@+id/btnEnable"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/listview"
        android:layout_alignParentTop="true"
        android:text="刷新" />

</RelativeLayout>

 列表视图项配置文件   phone.xml 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/tvph" android:layout_width="match_parent" android:layout_height="40px" android:text="号码" android:textSize="30px" android:textColor="#000000" /> <TextView android:id="@+id/tvcn" android:layout_width="match_parent" android:layout_height="40px" android:text="内容" android:textSize="15px" android:textColor="#CD1076" /> </LinearLayout>

最后是权限配置  AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.guangbo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.guangbo.main"
            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>
  

</manifest>

下面上效果图〜
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在 Android ,我们可以使用 `ListView` 控件和 `Adapter` 对象来显示数据库的数据。具体实现步骤如下: 1. 创建一个新的 `Activity` 界面,用于显示 `ListView` 控件。 2. 在该界面的布局文件添加一个 `ListView` 控件。 3. 创建一个自定义的 `Adapter` 类,用于将数据库的数据绑定到 `ListView` 控件上。 4. 在 `Activity` 的 `onCreate` 方法,实例化 `Adapter` 对象,并将其设置为 `ListView` 的适配器。 以下是一个示例代码,假设我们使用 SQLite 数据库存储用户息: 1. 新建一个名为 `UserListActivity` 的 `Activity`,并在布局文件添加一个 `ListView` 控件。 ```xml <!-- user_list_layout.xml --> <ListView android:id="@+id/user_list_view" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 创建一个名为 `UserAdapter` 的自定义适配器类,用于将数据库的数据绑定到 `ListView` 控件上。 ```java public class UserAdapter extends BaseAdapter { private Context mContext; private List<User> mUserList; public UserAdapter(Context context, List<User> userList) { mContext = context; mUserList = userList; } @Override public int getCount() { return mUserList.size(); } @Override public Object getItem(int position) { return mUserList.get(position); } @Override public long getItemId(int position) { return mUserList.get(position).getId(); } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.user_list_item, parent, false); } User user = mUserList.get(position); TextView nameTextView = convertView.findViewById(R.id.user_name_text_view); TextView ageTextView = convertView.findViewById(R.id.user_age_text_view); nameTextView.setText(user.getName()); ageTextView.setText(String.valueOf(user.getAge())); return convertView; } } ``` 在上述代码,我们继承了 `BaseAdapter` 类,并实现了其相关方法。在 `getView` 方法,我们使用 `LayoutInflater` 类将用户息绑定到 `ListView` 控件的每一项上。 3. 在 `UserListActivity` 的 `onCreate` 方法,实例化 `UserAdapter` 对象,并将其设置为 `ListView` 的适配器。 ```java public class UserListActivity extends AppCompatActivity { private ListView mUserListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.user_list_layout); mUserListView = findViewById(R.id.user_list_view); // 从 SQLite 数据库获取用户列表数据 List<User> userList = getUserListFromDatabase(); // 实例化 UserAdapter 对象,并设置为 ListView 的适配器 UserAdapter userAdapter = new UserAdapter(this, userList); mUserListView.setAdapter(userAdapter); } private List<User> getUserListFromDatabase() { // TODO: 从 SQLite 数据库获取用户列表数据 return null; } } ``` 在上述代码,我们首先通过 `findViewById` 方法获取到布局文件的 `ListView` 控件,然后调用 `getUserListFromDatabase` 方法从 SQLite 数据库获取用户列表数据。最后,实例化 `UserAdapter` 对象,并将其设置为 `ListView` 的适配器。 需要注意的是,在 `getUserListFromDatabase` 方法,我们需要自行实现读取 SQLite 数据库用户列表数据的逻辑。具体实现方式可以参考 Android 官方文档的相关示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值