gpt4 book ai didi

android - 从android中的firebase数据库向多个号码发送消息

转载 作者:行者123 更新时间:2023-11-29 22:36:19 25 4
gpt4 key购买 nike

我想从手机向多个联系人发送消息。流程是我正在创建一个血库应用程序,当用户请求血液时,我会在 firebase 回收器 View 中向他显示​​所有具有匹配血型的用户列表。在回收器中,我正在向他显示带有 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();
}
}
}

注意:我正在尝试向多个用户而不是单个用户发送消息

最佳答案

我找到了 2 个解决方案。

1-在从 firebase 获取数据时,我通过将消息代码放在我获取用户详细信息的位置来立即向用户发送消息(它将获得 1 个数字并向其发送消息,然后是另一个,然后是另一个,然后它会设置适配器,是的,在此期间我会显示一些进度条或其他东西)。

2-我可以在我的应用程序中做的另一件事是在列表下方显示向用户发送消息的按钮,并将所有联系电话存储到数组列表中,同时获取用户数据,当用户单击该按钮时向所有人发送消息使用我们在 arrayList 中获得的那些数字。

像这样:

 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_donar_list);
getView();
showRecyclerView();
contactNumber.addAll(numbersSet);

}

private void showRecyclerView() {
adapter = new FirebaseRecyclerAdapter<Profiles, DonarViewHolder>(model) {
@Override
protected void onBindViewHolder(@NonNull DonarViewHolder holder, int position, @NonNull Profiles profiles) {

String number = profiles.getMobile_number();
numbersSet.add(profiles.getMobile_number());

ArrayList<String> bloodGroupMatched = new ArrayList<>();
bloodGroupMatched.addAll(profiles.getMatched_bloodGroups());

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);
}

public void sendSMS() {
contactNumber.addAll(numbersSet);
try {
SmsManager smsManager = SmsManager.getDefault();
for (int i = 0; i < contactNumber.size(); i++) {
smsManager.sendTextMessage(contactNumber.get(i), null, "Blood Required!!!+_", null, null);
}
Toast.makeText(getApplicationContext(), "Message Sent",
Toast.LENGTH_LONG).show();
} catch (Exception ex) {
Toast.makeText(getApplicationContext(), ex.getMessage().toString(),
Toast.LENGTH_LONG).show();
ex.printStackTrace();
}
}

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);
button = findViewById(R.id.Mmsgs);
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();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendSMS();
}
});
}

}

关于android - 从android中的firebase数据库向多个号码发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59485577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com