【问题标题】:Sent Message to Multiple number from firebase database in android从android中的firebase数据库向多个号码发送消息
【发布时间】:2019-12-26 08:03:39
【问题描述】:

我想从移动设备向多个联系人发送消息。流程是我正在创建一个血库应用程序,当用户请求血液时,我会在 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();
        }
    }
}

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

【问题讨论】:

    标签: android firebase-realtime-database android-messaging


    【解决方案1】:

    我为此找到了 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();
                }
            });
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-23
      • 2015-07-08
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多