模拟短信发送给自己 爱慕虚荣什么的 木问题啊
用模拟器测试也是可以的 界面很丑,因为只是个小demo 功能才是最重要的

权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.liuan.smsimitate">
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<!--读取联系人权限,上传联系人需要用到此权限 这个权限现在已经不提示了 防止你干坏事~~~ -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
<!--读取手机信息权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--外存储写权限,构建语法需要用到此权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--外存储读权限,构建语法需要用到此权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MasterplateActivity"/>
</application>
</manifest>
代码
MainActivity
package com.example.liuan.smsimitate;
import android.app.Activity;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.ContactsContract;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText mEtText;
private EditText mEtNumber;
private Button mBtContacts;
private Button mBtmastterplate;
private Button mBtsend;
private EditText mEtTime;
public final static int ContactrequestCode = 256;
public final static int MasterplatequestCode = 257;
private int delayTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
enterDialg();
}
private void enterDialg() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("说明");
builder.setMessage("此软件完全免费\n但是一切都不是真的~~~~");
builder.setNegativeButton("我知道了", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setPositiveButton("我就不", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
private void initView() {
mEtText = (EditText) findViewById(R.id.et_aii_text);
mEtTime = (EditText) findViewById(R.id.et_aii_time);
mEtNumber = (EditText) findViewById(R.id.et_aii_number);
mBtContacts = (Button) findViewById(R.id.bt_aii_contacts);
mBtmastterplate = (Button) findViewById(R.id.bt_aii_masterplate);
mBtsend = (Button) findViewById(R.id.bt_aii_send);
String delayTime1 = mEtTime.getText().toString().trim();
if (TextUtils.isEmpty(delayTime1)) {
delayTime = 0;
} else {
// 换算成分钟 然后直接计算分钟
delayTime = Integer.parseInt(delayTime1) * 60 * 100;
}
mBtContacts.setOnClickListener(this);
mBtmastterplate.setOnClickListener(this);
mBtsend.setOnClickListener(this);
}
// 各种按钮各种点
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_aii_contacts:
// 进入联系人页面
enterContacts();
break;
case R.id.bt_aii_masterplate:
// 进入模版页面
enterMasterplate();
break;
case R.id.bt_aii_send:
// 发送给自己
Toast.makeText(this, "发送成功,请耐心等待,或者去收件箱查看", Toast.LENGTH_SHORT).show();
String delayTime1 = mEtTime.getText().toString().trim();
if (TextUtils.isEmpty(delayTime1)) {
delayTime = 0;
} else {
// 换算成分钟 然后直接计算分钟
delayTime = Integer.parseInt(delayTime1) * 60 * 1000;
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
send();
}
}, delayTime);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
}
private void send() {
// // [1]由于短信的数据库系统已经通过内容提供者暴露出来 所以我们可以直接通过内容解析者操作短信的数据库
Uri uri = Uri.parse("content://sms/");
String number = mEtNumber.getText().toString().trim();
String text = mEtText.getText().toString().trim();
//
//
ContentValues values = new ContentValues();
values.put("address", number); // 招商银行
values.put("body", text);
values.put("date", System.currentTimeMillis());
// [2]往短信数据库里面插入数据
getContentResolver().insert(uri, values);
}
private void enterMasterplate() {
Intent intent = new Intent(this, MasterplateActivity.class);
startActivityForResult(intent, MasterplatequestCode);
}
private void enterContacts() {
//打开自己的联系人
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);//vnd.android.cursor.dir/contact
startActivityForResult(intent, ContactrequestCode);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case MasterplatequestCode:
if(resultCode==666) {
Log.e("MasterplatequestCode: ", "没走进来");
String content = data.getStringExtra("content");
System.out.println("content" + content);
Log.e("MasterplatequestCode: ", content);
mEtText.setText(content);
mEtText.setSelection(content.length());
}
break;
case ContactrequestCode:
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
if (c.moveToFirst()) {
String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String hasPhone = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
String contactId = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
String phoneNumber = null;
if (hasPhone.equalsIgnoreCase("1")) {
hasPhone = "true";
} else {
hasPhone = "false";
}
if (Boolean.parseBoolean(hasPhone)) {
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
+ contactId,
null,
null);
while (phones.moveToNext()) {
phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
mEtNumber.setText(phoneNumber);
mEtNumber.setSelection(phoneNumber.length());
}
phones.close();
}
}
}
break;
}
}
}
MasterplateActivity
package com.example.liuan.smsimitate;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
public class MasterplateActivity extends Activity {
private ListView mLv;
private ArrayList<String> mList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_masterplate);
initData();
mLv = (ListView) findViewById(R.id.lv_Masterplate);
mLv.setAdapter(new ArrayAdapter<String>(getApplicationContext(), R.layout.item_text, mList));
mLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(MasterplateActivity.this,MainActivity.class);
String contnet = mList.get(position);
intent.putExtra("content",contnet);
setResult(666, intent);
finish();
}
});
}
private void initData() {
mList.add("一辈子好像很长,从蹒跚学步到白发老去,要吃多少东西,要说多少字句,要走多少公里,没人算得清楚。 \n" +
"但当我遇到你,一辈子就没多长了。 \n" +
"只够记住,你我声息。");
mList.add("我希望有个如你一般的人 \n" +
"如山间清爽的风 \n" +
"如古城温暖的光 \n" +
"从清晨到夜晚 \n" +
"由山野到书房 \n" +
"只要最后是你 \n" +
"就好");
mList.add("去见你想见的人吧。趁阳光正好,趁微风不噪,趁繁花还未开至荼蘼,趁现在还年轻,还可以走很长很长的路,还能诉说很深很深的思念,趁世界还不那么拥挤,趁飞机还没有起飞,趁现在自己的双手还能拥抱彼此,趁我们还有呼吸。");
mList.add("酷的像风 野的像狗 \n" +
"不招人喜欢倒也自由");
mList.add("如果你认识从前的我,那么你就会原谅现在的我。");
mList.add("我要你知道,在这个世界上总有一个人是等着你的,不管在什么时候,不管在什么地方,反正你知道,总有这么个人。");
mList.add("一个人只有承担起狂风暴雨,才能守得住彩虹满天");
mList.add("纵使这世间再过繁花似锦,也抵不过你的回眸一笑");
mList.add("白天是遇见别人,夜晚是遇见自己");
mList.add("别低头,王冠会掉;别流泪,他人会笑");
mList.add("浮生若梦,浮尘如空");
mList.add("过去的都会过去,该来的都在路上");
}
}
布局
activity_main.xml
<LinearLayout 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:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="短信模拟器(并不花钱)" />
<EditText
android:id="@+id/et_aii_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:hint="延时(不写默认0,单位分钟)"
android:numeric="integer" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:orientation="horizontal" >
<EditText
android:id="@+id/et_aii_number"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:hint="请输入来短信号码"
android:numeric="integer" />
<Button
android:id="@+id/bt_aii_contacts"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="联系人" />
</LinearLayout>
<EditText
android:id="@+id/et_aii_text"
android:gravity="top"
android:maxLines="9"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:hint="请输入来短信内容"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/bt_aii_masterplate"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="模版" />
<Button
android:id="@+id/bt_aii_send"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="发送" />
</LinearLayout>
</LinearLayout>
activity_masterplate.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"
tools:context=".MasterplateActivity" >
<ListView
android:id="@+id/lv_Masterplate"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
item_text.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv_content"
android:textSize="18sp"
android:layout_margin="7dp"
android:textColor="#00ff00"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</TextView>