不知何故,最好的方法是使用该库拥有的 REGEX,但这需要大量工作。
由于 getExampleNumber 函数将返回完全相同的值,因此您始终可以使用它来随机化(或迭代)其中的数字。
这是一个示例(示例here),获取每个支持区域的10个随机手机号码:
class MainActivity : AppCompatActivity() {
@WorkerThread
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val phoneNumbersToRandomize = 10
var regionsThatFoundMobilePhonesFor = 0
if (savedInstanceState == null)
thread {
val phoneNumberUtil = PhoneNumberUtil.getInstance()
val startTime = System.currentTimeMillis()
val supportedRegions = phoneNumberUtil.supportedRegions
for (region in supportedRegions) {
val validPhoneNumbers = HashSet<String>()
val exampleNumber = phoneNumberUtil.getExampleNumberForType(region, PhoneNumberUtil.PhoneNumberType.MOBILE)
if (exampleNumber == null) {
Log.w("AppLog", "region:$region no exampleNumber")
continue
}
Log.d("AppLog", "region:$region exampleNumber:${phoneNumberUtil.format(exampleNumber, PhoneNumberUtil.PhoneNumberFormat.E164)}")
val countryCode = phoneNumberUtil.getCountryCodeForRegion(region)
val nationalSignificantNumber = phoneNumberUtil.getNationalSignificantNumber(exampleNumber)
// Log.d("AppLog", "finding $phoneNumbersToRandomize random mobile phone numbers for $region example phone number:" +
// phoneNumberUtil.format(exampleNumber, PhoneNumberUtil.PhoneNumberFormat.E164) + " countryCode:$countryCode nationalSignificantNumber:$nationalSignificantNumber ")
val randomDigitsLength = nationalSignificantNumber.length
while (validPhoneNumbers.size < phoneNumbersToRandomize) {
val inputPhone = "+$countryCode${getRandomStringOfDigits(randomDigitsLength)}"
if (validPhoneNumbers.contains(inputPhone))
continue
val phoneNumber = phoneNumberUtil.parse(inputPhone, region)
val nationalSignificantNumberFromGeneratedNumber = phoneNumberUtil.getNationalSignificantNumber(phoneNumber)
if (nationalSignificantNumberFromGeneratedNumber.length != randomDigitsLength)
continue
val isValidMobilePhoneNumber = phoneNumberUtil.isValidNumberForRegion(phoneNumber, region)
&& phoneNumberUtil.isPossibleNumberForType(phoneNumber, PhoneNumberUtil.PhoneNumberType.MOBILE)
if (isValidMobilePhoneNumber) {
validPhoneNumbers.add(inputPhone)
}
}
++regionsThatFoundMobilePhonesFor
}
Log.d("AppLog", "done regionsThatFoundMobilePhonesFor:$regionsThatFoundMobilePhonesFor out of ${supportedRegions.size}" +
"timeTaken:${System.currentTimeMillis() - startTime}ms")
}
}
companion object {
private fun getRandomStringOfDigits(numberOfDigitsToGenerate: Int): String {
val sb = StringBuilder(numberOfDigitsToGenerate)
for (i in 0 until numberOfDigitsToGenerate)
sb.append(Random.nextInt(10).toString())
return sb.toString()
}
}
}
gradle 依赖:
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
api 'com.googlecode.libphonenumber:libphonenumber:8.12.13'