我需要在應用程序中撥打電話。但我很困惑如何正確地爲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,你可以在你的應用程序的任何地方使用它。 –