如何在安卓中实现电话呼叫权限授予方法



在我的应用程序中,我创建了一个名为call_action方法的方法,该方法支持允许用户拨打电话的运行时权限。我已经在片段类中实现了此方法。现在在我的应用程序中,我已经多次使用此方法进入活动和片段。我知道通过这种方式,我必须在每个片段和活动中多次编写此代码。但是我想用这个方法创建一个类,通过它我可以在活动和片段中调用这个方法。因为我在安卓开发和软件开发方面非常陌生。我不明白如何做到这一点的逻辑。这是我在片段中实现的代码

public class OptionMenuFragment extends Fragment implements View.OnClickListener{

private String phoneNumber, email;
public OptionMenuFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.option_main_fragment, container, false);
Button myColleagues=(Button) view.findViewById(R.id.myColleagues);
myColleagues.setOnClickListener(this);
......
return view;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.myColleagues:
Intent intent = new Intent(getActivity(), MyColleaguesPage.class);
startActivity(intent);
break;
case R.id.news:
......
break;
}
}
private void showFirstDialog() {
//Create a new builder and get the layout.
final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity());
......
alertButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
alert.dismiss();
}
});
alertListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// ListView Clicked item index
int itemPosition = position;
if (itemPosition == 0) {
alert.dismiss();
showSecondDialog(0);
}
.......
else if (itemPosition == 5) {
alert.dismiss();
showSecondDialog(5);
}
}
});
}
private void showSecondDialog(int position) {
alertTitle.setText("What do you want to do");
// Defined Array values to show in ListView
String[] values = getResources().getStringArray(R.array.contact_way);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getActivity(),
R.layout.first_alertlist_textstyle, android.R.id.text1, values);
alertListView.setAdapter(adapter);
alertButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
alert.dismiss();
}
});
switch (position) {
case 0:
phoneNumber = "123456";
email="mail.com";
break;
......
case 5:
phoneNumber = "+1233";
email="mail.com";
}
alertListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// ListView Clicked item index
int itemPosition = position;

if (itemPosition == 0) {
alert.dismiss();
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("calling to " + phoneNumber);
//builder.setMessage("Are you sure you want to log out?");
builder.setPositiveButton("Call", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// close the dialog, go to login page
if (isPermissionGranted()) {
call_action(); //here I am calling call method
}
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Do nothing
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
if (itemPosition == 1) {
..
}
if (itemPosition == 2) {
....
}
//This code I want to implement into seperate class
public void call_action(){
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + phoneNumber));
startActivity(callIntent);
}
public  boolean isPermissionGranted() {
if (Build.VERSION.SDK_INT >= 23) {
if (getActivity().checkSelfPermission(android.Manifest.permission.CALL_PHONE)
== PackageManager.PERMISSION_GRANTED) {
Log.v("TAG","Permission is granted");
return true;
} else {
Log.v("TAG","Permission is revoked");
ActivityCompat.requestPermissions(this.getActivity(), new String[]{Manifest.permission.CALL_PHONE}, 1);
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
Log.v("TAG","Permission is granted");
return true;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getActivity().getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show();
call_action();
} else {
Toast.makeText(getActivity().getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show();
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}

}

你可以这样做

public class Permissions {
private Context mContext;
private Activity mActivity;

public  Permissions(Context context, Activity mActivity){
this.mContext=context;
this.mActivity=mActivity;
}
public void call_action(){
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + phoneNumber));
mContext.startActivity(callIntent);
}
public  boolean isPermissionGranted() {
if (Build.VERSION.SDK_INT >= 23) {
if (ContextCompat.checkSelfPermission(mContext,android.Manifest.permission.CALL_PHONE)
== PackageManager.PERMISSION_GRANTED) {
Log.v("TAG","Permission is granted");
return true;
} else {
Log.v("TAG","Permission is revoked");
mActivity.requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1);
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
Log.v("TAG","Permission is granted");
return true;
}
}
}

并且您必须将此方法保留在您请求权限的活动或片段中

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getActivity().getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getActivity().getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show();
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}

在活动中像这样使用它

Permissions p=new Permissions(this,this);
p.isPermissionGranted();

如果是碎片,

Permissions p=new Permissions(getActivity(),getActivity());
p.isPermissionGranted();

最新更新