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