package com.ccccat.www.msgs; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.res.AssetManager; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.support.annotation.RequiresApi; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.telephony.SmsManager; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; import com.jude.easyrecyclerview.EasyRecyclerView; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import jxl.Sheet; import jxl.Workbook; public class MainActivity extends AppCompatActivity implements View.OnClickListener, RadioGroup.OnCheckedChangeListener { public static String TAG = "SMSMANAGER"; private Button btn_send, btn_improt, btn_send_more; private EditText phoneEt, contextEt; private EasyRecyclerView rv_list; private ProgressDialog progressDialog; private List<Person> personList; private PersonAdapter mAdapter; private TextView tips; private RadioGroup rg_all; private int IDs = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { personList = new ArrayList<>(); mAdapter = new PersonAdapter(); btn_send = (Button) this.findViewById(R.id.btn_send); tips = (TextView) this.findViewById(R.id.tips); btn_send_more = (Button) this.findViewById(R.id.btn_send_more); btn_improt = (Button) this.findViewById(R.id.btn_improt); phoneEt = (EditText) this.findViewById(R.id.phoneNumberEt); contextEt = (EditText) this.findViewById(R.id.contextEt); rg_all = (RadioGroup) this.findViewById(R.id.rg_all); rv_list = (EasyRecyclerView) this.findViewById(R.id.rv_list); progressDialog = new ProgressDialog(this); btn_send.setOnClickListener(this); btn_improt.setOnClickListener(this); btn_send_more.setOnClickListener(this); LinearLayoutManager mLayoutManager = new LinearLayoutManager(this); rv_list.setLayoutManager(mLayoutManager); rv_list.setItemAnimator(new DefaultItemAnimator()); rv_list.setAdapter(mAdapter); rg_all.setOnCheckedChangeListener(this); } /** * 获取 excel 表格中的数据,不能在主线程中调用 */ private ArrayList<Person> getXlsData(String filePath, int index) { ArrayList<Person> persons = new ArrayList<>(); try { InputStream is = new FileInputStream(filePath); Workbook workbook = Workbook.getWorkbook(is); Sheet sheet = workbook.getSheet(index); int sheetRows = sheet.getRows(); for (int i = 0; i < sheetRows; i++) { Person person = new Person(); person.setUserName(sheet.getCell(0, i).getContents()); person.setPhoneNumber(sheet.getCell(1, i).getContents()); person.setMsgContent(sheet.getCell(2, i).getContents()); persons.add(person); } workbook.close(); } catch (Exception e) { Log.d(TAG, "数据读取错误=" + e); } return persons; } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1) @Override public void onClick(View v) { switch (v.getId()) { // 导入Excel表格 case R.id.btn_improt: Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); startActivityForResult(intent,1); break; // 发送 case R.id.btn_send: String phone = phoneEt.getText().toString().trim(); String context = contextEt.getText().toString().trim(); if (TextUtils.isEmpty(phone) || TextUtils.isEmpty(context)) { Toast.makeText(MainActivity.this, "号码或内容不能为空!", Toast.LENGTH_SHORT); return; } sendSms(IDs,phone,context); phoneEt.setText(""); contextEt.setText(""); Toast.makeText(getApplicationContext(), "发送完毕", Toast.LENGTH_SHORT).show(); break; // 批量发送 case R.id.btn_send_more: for (Person item : personList){ sendSms(IDs,item.getPhoneNumber(),item.getMsgContent()); // 停顿1s } Toast.makeText(getApplicationContext(), "正在发送,请稍后...", Toast.LENGTH_SHORT).show(); break; } } private void setupData(List<Person> persons) { personList.clear(); personList.addAll(persons); mAdapter.notifyDataSetChanged(); } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.rb_one: IDs = 0; break; case R.id.rb_two: IDs = 1; break; } } // 异步获取Excel数据信息 private class ExcelDataLoader extends AsyncTask<String, Void, ArrayList<Person>> { @Override protected void onPreExecute() { progressDialog.setMessage("Excel数据导入中,请稍后......"); progressDialog.setCanceledOnTouchOutside(false); progressDialog.show(); } @Override protected ArrayList<Person> doInBackground(String... params) { return getXlsData(params[0], 0); } @Override protected void onPostExecute(ArrayList<Person> persons) { if (progressDialog.isShowing()) { progressDialog.dismiss(); } if (persons != null && persons.size() > 0) { // 列表显示数据 setupData(persons); } else { // 加载失败 Toast.makeText(MainActivity.this, "数据加载失败!", Toast.LENGTH_SHORT); } } } private class PersonAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { class TextViewHolder extends RecyclerView.ViewHolder { TextView tv_name, tv_number, tv_content; LinearLayout ll_index; public TextViewHolder(View itemView) { super(itemView); tv_name = (TextView) itemView.findViewById(R.id.tv_name); tv_number = (TextView) itemView.findViewById(R.id.tv_number); tv_content = (TextView) itemView.findViewById(R.id.tv_content); ll_index = (LinearLayout) itemView.findViewById(R.id.ll_index); } } @Override public TextViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new TextViewHolder(LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_person, parent, false)); } @Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { if (holder instanceof TextViewHolder) { ((TextViewHolder) holder).tv_name.setText(personList.get(position).getUserName()); ((TextViewHolder) holder).tv_number.setText(personList.get(position).getPhoneNumber()); ((TextViewHolder) holder).tv_content.setText(personList.get(position).getMsgContent()); ((TextViewHolder) holder).ll_index.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { phoneEt.setText(personList.get(position).getPhoneNumber()); contextEt.setText(personList.get(position).getMsgContent()); } }); } } @Override public int getItemCount() { return personList.size(); } } // 获取本地Excel信息 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { if (requestCode == 1) { Uri uri = data.getData(); String path = uri.getPath().toString(); tips.setText(path); // 执行Excel数据导入 new ExcelDataLoader().execute(path.trim()); } } } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1) private void sendSms(final int which,String phone,String context) { SubscriptionInfo sInfo = null; final SubscriptionManager sManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); List<SubscriptionInfo> list = sManager.getActiveSubscriptionInfoList(); if (list.size() == 2) { // 双卡 sInfo = list.get(which); } else { // 单卡 sInfo = list.get(0); } if (sInfo != null) { int subId = sInfo.getSubscriptionId(); SmsManager manager = SmsManager.getSmsManagerForSubscriptionId(subId); if (!TextUtils.isEmpty(phone)) { ArrayList<String> messageList =manager.divideMessage(context); for(String text:messageList){ manager.sendTextMessage(phone, null, text, null, null); } Toast.makeText(this, "信息正在发送,请稍候", Toast.LENGTH_SHORT) .show(); } else { Toast.makeText(this, "无法正确的获取SIM卡信息,请稍候重试", Toast.LENGTH_SHORT).show(); } } } }