Android短信监听(三)——利用Loader实现短信监听

时间:2022-02-22 08:54:13

MainActivity如下:

package cc.c;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.Context;
import android.content.Loader;
import android.database.Cursor;
/**
* Demo描述:
* 利用Loader实现窃听短信
*
* 参考资料:
* 1 http://blog.csdn.net/niu_gao/article/details/7244117
* 2 http://www.cnblogs.com/jisheng/archive/2013/01/09/2852553.html
* 3 http://blog.csdn.net/linmiansheng/article/details/25836937
* Thank you very much
*
* 注意事项:
* 1 Loader是3.0之后才引进来的
* 2 若在3.0之前使用Loader那么Activity须继承FragmentActivity
* 3 在Loader内部封装好了ContentOberver
*
*/
public class MainActivity extends Activity implements LoaderCallbacks<Cursor>{
private final int LOADER_ID=9527;
private Context mContext;
private Uri mUri=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}

private void init(){
mContext=this;
mUri = Uri.parse("content://sms/inbox");
this.getLoaderManager().initLoader(LOADER_ID, null, this);
}

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle bundle) {
String[] projection = new String[] {"_id","address","body","type"};
Loader<Cursor> cursorLoader=
new android.content.CursorLoader(mContext, mUri, projection, null, null, "date desc");
return cursorLoader;
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
while (cursor.moveToNext()) {
String address = cursor.getString(cursor.getColumnIndex("address"));
String body = cursor.getString(cursor.getColumnIndex("body"));
int id = cursor.getInt(cursor.getColumnIndex("_id"));
String type = cursor.getString(cursor.getColumnIndex("type"));
System.out.println("------> 收到新的短信:"+"来自="+address+",内容="+body+",id="+id+",类别="+type);
break;
}
}

@Override
public void onLoaderReset(Loader<Cursor> loader) {

}




}

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"
>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="利用Loader实现窃听短信"
android:layout_centerInParent="true" />

</RelativeLayout>

AndroidManifest.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cc.c"
android:versionCode="1"
android:versionName="1.0" >

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

<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="cc.c.MainActivity"
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>