我想从移动设备向多个联系人发送消息。流程是我正在创建一个血库应用程序,在该应用程序中,当用户请求血液时,我会在 firebase 回收器视图中向他显示所有具有匹配血型的用户列表。在回收器中,我正在向他展示单击任何所需过程的任何图标时,带有 2 个呼叫图标和消息的用户名称都可以正常工作。我想要的是,当用户在向他显示匹配血型的人列表后请求血液时,我应该务实地向匹配血型列表中显示的所有用户发送消息。我查看了多个问题并尝试了答案,但没有成功实现它。
在此我尝试了堆栈溢出的另一种解决方案,但结果相同,它没有发送消息
private RecyclerView recyclerView;
private DatabaseReference reference;
String bloodGroup;
LinearLayout linearLayout;
ProgressDialog progressDialog;
FirebaseRecyclerOptions<Profiles> model;
FirebaseRecyclerAdapter<Profiles, DonarViewHolder> adapter;
ArrayList<String> contactNumber = new ArrayList<>();
HashSet<String> numbersSet = new HashSet<>();
int MY_PERMISSIONS_REQUEST_SEND_SMS = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_donar_list);
getView();
showRecyclerView();
sendMsg();
contactNumber.addAll(numbersSet);
}
private void sendMsg() {
for (int i = 0; i < contactNumber.size(); i++)
{
String message = "Blood Required Urgently";
String tempMobileNumber = contactNumber.get(i).toString();
MultipleSMS(tempMobileNumber, message);
}
}
private void MultipleSMS(String phoneNumber , String message) {
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(
SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
new Intent(DELIVERED), 0);
// ---when the SMS has been sent---
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
ContentValues values = new ContentValues();
for (int i = 0; i < contactNumber.size() - 1; i++) {
values.put("address", contactNumber.get(i).toString());
// txtPhoneNo.getText().toString());
values.put("body", "Blood Required Urgently");
}
getContentResolver().insert(
Uri.parse("content://sms/sent"), values);
Toast.makeText(DonarList.this, "SMS sent",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(DonarList.this, "Generic failure",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(DonarList.this, "No service",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(DonarList.this, "Null PDU",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(DonarList.this, "Radio off",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(SENT));
// ---when the SMS has been delivered---
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(DonarList.this, "SMS delivered",
Toast.LENGTH_SHORT).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(DonarList.this, "SMS not delivered",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(DELIVERED));
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}
private void showRecyclerView() {
adapter = new FirebaseRecyclerAdapter<Profiles, DonarViewHolder>(model) {
@Override
protected void onBindViewHolder(@NonNull DonarViewHolder holder, int position, @NonNull Profiles profiles) {
String check = profiles.getBloodBank();
String number = profiles.getMobile_number();
numbersSet.add(profiles.getMobile_number());
System.out.println("all" + numbersSet);
ArrayList<String> bloodGroupMatched = new ArrayList<>();
bloodGroupMatched.addAll(profiles.getMatched_bloodGroups());
System.out.println("check" + bloodGroupMatched);
if (bloodGroupMatched.contains(bloodGroup)) {
holder.name.setText(profiles.getName());
holder.itemView.setVisibility(View.VISIBLE);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(10, 5, 5, 10);
holder.itemView.setLayoutParams(params);
} else {
holder.itemView.setVisibility(View.GONE);
holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(0, 0));
}
holder.call.setOnClickListener(v -> {
boolean conditionCheck = true;
Intent callIntent = new Intent(Intent.ACTION_DIAL);
callIntent.setData(Uri.parse("tel:" + number));
if (ActivityCompat.checkSelfPermission(DonarList.this,
Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(DonarList.this,
new String[]{Manifest.permission.CALL_PHONE}, 1);
}
startActivity(callIntent);
});
holder.msg.setOnClickListener(v -> {
Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.setData(Uri.parse("sms:" + number));
if (ActivityCompat.checkSelfPermission(DonarList.this,
Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(DonarList.this,
new String[]{Manifest.permission.SEND_SMS}, MY_PERMISSIONS_REQUEST_SEND_SMS);
} else {
startActivity(smsIntent);
}
});
}
@NonNull
@Override
public DonarViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_donar_view_holder, parent, false);
return new DonarViewHolder(view);
}
};
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter.startListening();
progressDialog.dismiss();
recyclerView.setAdapter(adapter);
}
private void getView() {
progressDialog = HelperClass.showProgressDialog(this, "Loading..");
if (getIntent() != null && getIntent().hasExtra("bloodGroup")) {
bloodGroup = getIntent().getStringExtra("bloodGroup");
Toast.makeText(this, bloodGroup, Toast.LENGTH_SHORT).show();
}
recyclerView = findViewById(R.id.donar_list_recycler);
linearLayout = findViewById(R.id.recylerLayout);
reference = FirebaseDatabase.getInstance().getReference().child(Constants.content).child(Constants.profiles);
model = new FirebaseRecyclerOptions.Builder<Profiles>()
.setQuery(reference, Profiles.class).build();
}
@Override
public void onStart() {
super.onStart();
if (adapter != null) {
adapter.startListening();
}
}
@Override
public void onStop() {
super.onStop();
if (adapter != null) {
adapter.stopListening();
}
}
@Override
protected void onResume() {
super.onResume();
if (adapter != null) {
adapter.startListening();
}
}
}
注意:我正在尝试将消息发送给多个用户而不是单个用户