我需要在应用程序中拨打电话。但我很困惑如何正确地为Android和更高版本做到这一点。据我了解,我需要调用requestPermissions然后在onRequestPermissionsResult,结果工作。但我需要在这个函数之间存储callNumber。在Android中添加请求权限的选项
我真的不知道,在活动保存电话号码是个好主意,但我没有其他的选择。所以,我写这篇文章的代码:
public void callDriver(String phoneNumber) {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse(String.format("tel:+%s", phoneNumber)));
//FIXME: we need to save driver for calling in callback
phoneNumberForCall = phoneNumber; //potential problem
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CALL_PHONE},
TaxiApp.MY_PERMISSIONS_REQUEST_CALL_PHONE);
} else {
startActivity(callIntent);
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case TaxiApp.MY_PERMISSIONS_REQUEST_CALL_PHONE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse(String.format("tel:+%s", phoneNumberForCall)));
startActivity(callIntent);
} else {
Toast.makeText(this, getString(R.string.no_call_permission), Toast.LENGTH_LONG).show();
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
如果我们节省手机的活动,同时异步请求被处理&我的理解,它不会做它可以改变,但它可能是一个问题。
我应该如何使这是否正确?
P.S. 我们呼叫的号码可能会改变。除此之外,还有一个包含数字的列表(recycleView)。用户可以点击每个号码和功能callDriver将被调用。
恐怕这种情况:
- 用户点击数 - >功能callDriver执行
- callDriver请求的权限。存储第一个号码。
- 上的另一个电话号码,用户点击 - >功能callDriver执行请求的权限和存储的号码发生变化。存储第二个号码。
- 已授予权限。回拨已执行,我们呼叫第二个号码。
这就是为什么我们不会打电话的车手。我认为这种情况不会发生。 (用户应该点击得太快。)但是最好知道如何正确地做到这一点。
您可以使用sharedpreferences用于此目的。看看https://developer.android.com/training/basics/data-storage/shared-preferences。html –
如果联系电话号码总是相同的,你可以在这里写,但是如果它会改变或者可能有不同的号码存储在共享偏好设置中并从那里使用它。 –
同意@ Mr.Rabbit使用sharedpreferences,你可以在你的应用程序的任何地方使用它。 –