在RecyclerView适配器类中询问权限 - 未调用onRequestPermissionsResult

问题描述 投票:2回答:1

我想做什么:我想要一个列表中的电话号码打开拨号器。

问题是:在解雇Intent.ACTION_CALL意图之前,我需要请求许可,似乎onRequestPermissionsResult没有被调用。

我尝试过:下面是我的代码。

applicants data adapter.Java

    public class ApplicantsDataAdapter extends RecyclerView.Adapter<ApplicantsDataAdapter.ApplicantsViewHolder>
        implements
        ActivityCompat.OnRequestPermissionsResultCallback {

    private static final int REQUEST_CODE = 100;

    private Context mContext;
    private String mMobileNum;

    private List<DashboardStatusBean> mDataList;
    private OnApplicantItemClickListener mListener;

    public ApplicantsDataAdapter(Context context, List<DashboardStatusBean> dataList, OnApplicantItemClickListener listener) {
        mListener = listener;
        mContext = context;
        mDataList = dataList;
    }

    @Override
    public ApplicantsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_applicant_new, parent, false);
        return new ApplicantsViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(ApplicantsViewHolder holder, int position) {
        holder.bindView(position);
        holder.mCardView.setOnClickListener(v -> mListener.onApplicantSelected(position));
    }

    @Override
    public int getItemCount() {
        return mDataList.size();
    }

    public interface OnApplicantItemClickListener {
        void onApplicantSelected(int position);
    }

    public class ApplicantsViewHolder extends RecyclerView.ViewHolder {

        @BindView(R.id.cv_item)
        CardView mCardView;

        @BindView(R.id.tv_item_applicant_status)
        TextView mApplicantStatusTextView;

        @BindView(R.id.tv_item_applicant_mobile)
        TextView mApplicantMobileNumber;

        @BindView(R.id.iv_call)
        ImageView mCallImage;

        ApplicantsViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }

        void bindView(int position) {

            mApplicantStatusTextView.setText(mDataList.get(position).getStatus());
            mApplicantMobileNumber.setText(mDataList.get(position).getMobileNumber());

            mCallImage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mMobileNum = mDataList.get(position).getMobileNumber().substring(2);
                    Log.e("click", "mob: " + mMobileNum);

                    phoneIntent();
                }
            });
        }
    }

    private void phoneIntent() {

        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:" + mMobileNum));

        if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {

            requestPermissions((AppCompatActivity) mContext,
                    new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CODE);

            return;
        }

        mContext.startActivity(callIntent);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        Log.e("click", "onRequestPermissionsResult");

        switch (requestCode) {

            case REQUEST_CODE:

                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    Log.e("click", "PERMISSION_GRANTED");

                    phoneIntent();

                } else {

                    Log.e("click", "NOT PERMISSION_GRANTED");

                    Toast.makeText(mContext, "Call Permission Not Granted!", Toast.LENGTH_SHORT).show();
                }

                break;
        }
    }
}

PS:我检查了三次,我在Manifest文件中添加了权限<uses-permission android:name="android.permission.CALL_PHONE" />

任何帮助将不胜感激。

android android-recyclerview android-permissions recycler-adapter runtime-permissions
1个回答
2
投票

我认为它不需要电话呼叫的任何运行时权限

您需要在Manifest上指定权限,如下所示

  <uses-permission android:name="android.permission.CALL_PHONE" />

在代码中,您需要编写这行代码来打开拨打任何号码的拨号器。

 String mMobileNum = mDataList.get(position).getMobileNumber().substring(2);
 Log.e("click", "mob: " + mMobileNum);

 startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" +mMobileNum)));
© www.soinside.com 2019 - 2024. All rights reserved.