Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在RecyclerView适配器类中请求权限-未调用onRequestPermissionsResult_Android_Android Permissions_Android Recyclerview_Runtime Permissions - Fatal编程技术网

Android 在RecyclerView适配器类中请求权限-未调用onRequestPermissionsResult

Android 在RecyclerView适配器类中请求权限-未调用onRequestPermissionsResult,android,android-permissions,android-recyclerview,runtime-permissions,Android,Android Permissions,Android Recyclerview,Runtime Permissions,我想做什么:我想用列表中的电话号码打开拨号器 问题是什么:在启动Intent.ACTION\u CALLIntent之前,我需要请求许可,似乎没有调用onrequestpermissions结果 我尝试了什么:下面是我的代码 applicationsdataadapter.java public class ApplicantsDataAdapter extends RecyclerView.Adapter<ApplicantsDataAdapter.ApplicantsViewH

我想做什么:我想用列表中的电话号码打开拨号器

问题是什么:在启动
Intent.ACTION\u CALL
Intent之前,我需要请求许可,似乎没有调用
onrequestpermissions结果

我尝试了什么:下面是我的代码

applicationsdataadapter.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;
        }
    }
}
公共类应用程序SDataAdapter扩展了RecyclerView.Adapter
工具
ActivityCompat.OnRequestPermissionsResultCallback{
私有静态最终整数请求_代码=100;
私有上下文;
私有字符串mMobileNum;
私人名单专家;
专用于Application ItemClickListener MLListener;
公共应用程序数据适配器(上下文上下文、列表数据列表、OnApplicationItemClickListener侦听器){
mListener=监听器;
mContext=上下文;
mDataList=dataList;
}
@凌驾
公共应用程序ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.item_申请人_new,parent,false);
返回新的应用程序查看文件夹(itemView);
}
@凌驾
BindViewHolder上的公共无效(应用程序视图持有人,内部位置){
夹持器视图(位置);
holder.mCardView.setOnClickListener(v->mListener.onApplicationSelected(位置));
}
@凌驾
public int getItemCount(){
返回mDataList.size();
}
ApplicationItemClickListener上的公共接口{
所选应用程序无效(内部位置);
}
公共类应用程序ViewHolder扩展了RecyclerView.ViewHolder{
@BindView(R.id.cv_项目)
CardView-mCardView;
@BindView(R.id.tv项目申请人状态)
TextView MapplicationStatusTextView;
@BindView(R.id.tv\项目\申请人\手机)
TextView MapplicationMobileNumber;
@BindView(R.id.iv_呼叫)
ImageView mCallImage;
应用程序文件夹(视图项视图){
超级(项目视图);
ButterKnife.bind(这个,itemView);
}
无效绑定视图(内部位置){
MapplicationStatusTextView.setText(mDataList.get(position.getStatus());
mApplicantMobileNumber.setText(mDataList.get(position.getMobileNumber());
mCallImage.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
mMobileNum=mDataList.get(position.getMobileNumber().substring(2);
Log.e(“点击”,“移动:+mMobileNum”);
phoneIntent();
}
});
}
}
私有void phoneIntent(){
Intent callIntent=新意图(Intent.ACTION\u调用);
setData(Uri.parse(“tel:+mMobileNum”);
if(ActivityCompat.checkSelfPermission(mContext、Manifest.permission.CALL\u PHONE)!=PackageManager.permission\u provided){
requestPermissions((AppCompatActivity)mContext,
新字符串[]{Manifest.permission.CALL_PHONE},REQUEST_CODE);
返回;
}
mContext.startActivity(callIntent);
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
Log.e(“单击”、“onRequestPermissionsResult”);
开关(请求代码){
案例请求代码:
if(grantResults[0]==已授予PackageManager.权限){
Log.e(“单击”、“授予权限”);
phoneIntent();
}否则{
Log.e(“单击”、“未授予权限”);
Toast.makeText(mContext,“调用权限未授予!”,Toast.LENGTH_SHORT.show();
}
打破
}
}
}
PS:我在清单文件中添加了三次权限


任何帮助都将不胜感激。

我认为打电话不需要任何运行时许可

您只需在清单上指定权限,如下所示

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

在片段/活动类的oncreate()中请求权限,然后在该类中重写onRequestPermissionsResult您是对的。无需请求
呼叫电话的许可
。谢谢。@MaulikDodia很乐意帮助你兄弟:)…保持快乐
 String mMobileNum = mDataList.get(position).getMobileNumber().substring(2);
 Log.e("click", "mob: " + mMobileNum);

 startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" +mMobileNum)));