我的应用程序有一个RecyclerView,里面有一个餐馆列表,每个餐馆都有一个打电话的按钮。
该电话呼叫适用于除23个API之外的所有API。问题是应用程序必须请求权限才能拨打电话,但它不能从非活动类中这样做。
我试着传递上下文,但对我不起作用。
以下是将餐厅绑定到CardView的方法。
public void bind(final Restaurant restaurant) {
name.setText(restaurant.getName());
address.setText(restaurant.getAddress());
city.setText(String.format("%05d %s (%s)", restaurant.getZip(), restaurant.getCity(), restaurant.getRegion()));
switch (restaurant.getCountry()) {
case "France":
country.setText(R.string.france);
break;
case "Spain":
country.setText(R.string.spain);
break;
case "Poland":
country.setText(R.string.poland);
break;
case "Portugal":
country.setText(R.string.portugal);
}
latitude = restaurant.getLatitude();
longitude = restaurant.getLongitude();
phoneCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+restaurant.getPhone()));
//
// Here I should request the permissions
//
v.getContext().startActivity(intent);
}
});
navigation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Uri gmmIntentUri = Uri.parse("google.navigation:q=" + latitude + "," + longitude);
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
v.getContext().startActivity(mapIntent);
}
});
}
有什么解决方案吗?提前感谢
您应该创建一个界面,并将phoneCall点击事件发送到您的"活动",然后您可以从那里请求权限。
样本代码
public class RecyclerAdapter extends RecyclerView.ViewHolder{
private OnPhoneCallListener listener;
public void setListener(OnPhoneCallListener listener){
this.listener = listener;
}
public void bind(final Restaurant restaurant) {
..........
..........
..........
phoneCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null){
listener.onPhoneCallClick(restaurant.getPhone());
}
}
});
..........
..........
..........
}
public interface OnPhoneCallListener{
void onPhoneCallClick(String phoneNumber);
}
}
来自活动类
// Register for callback event.
RecyclerAdater.setListener(new OnPhoneCallListener(){
@Override
public void onPhoneCallClick(String phoneNumber){
//This portion will get execute when user will click on call button.
// Now here you can check for the permission, if it is granted,
// you can fire `ACTION_CALL` intent.
}
});