はじめに
- androidでスプラッシュ画面から遷移して携帯電話情報を取得して画面表示するサンプルを作ってみた
manifestファイル
- 携帯電話情報を取得するために下記のXMLを記述する
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
app\build.gradleファイル
- コルーチンを利用するためにkotlinxをインポートする。スプラッシュからトップ画面に遷移するために利用する
plugins {
id 'com.android.application'
id 'kotlin-android'
//以下1行追加
id 'kotlin-android-extensions'
}
dependencies {
(省略)
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1'
}
スプラッシュ画面
- スプラッシュのactivityのコード。2秒後にトップ画面に遷移する
class SplashActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)
val ivSplash = findViewById<ImageView>(R.id.ivSplash)
val assets = resources.assets
try {
assets.open("splash.jpg").use { istream ->
val bitmap = BitmapFactory.decodeStream(istream)
ivSplash.setImageBitmap(bitmap)
}
} catch (e: Exception) {
e.printStackTrace()
}
CoroutineScope(Dispatchers.Main).launch {
delay(2000)
val intent = Intent(this@SplashActivity, MainActivity::class.java)
startActivity(intent)
finish()
}
}
}
トップ画面
- 携帯電話情報の権限を確認して許可を得たら携帯電話番号を表示する処理をする
- アンドロイドのバージョンによって携帯電話番号取得の権限が異なるのでバージョンごとに権限の値を切り替え。
Build.VERSION.SDK_INT
を利用してバージョンを切り替える
private const val REQUEST_PHONE_PERMISSION = 200
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
getPhoneNumber()
var wevview = findViewById<WebView>(R.id.topWebview)
wevview.loadUrl("https://www.google.co.jp/")
}
private fun permissionPhoneCheck(): Boolean {
// ToDo: https://developer.android.com/about/versions/11/privacy/permissions?hl=ja
var phonePermission: String = Manifest.permission.READ_PHONE_STATE
if(Build.VERSION.SDK_INT >= 30){
phonePermission = Manifest.permission.READ_PHONE_NUMBERS
}
var permissions: Array<String> = arrayOf(phonePermission)
// 権限のチェック
if (ActivityCompat.checkSelfPermission(this@MainActivity,
phonePermission) != PackageManager.PERMISSION_GRANTED) {
// 権限がないため、権限のリクエスト
ActivityCompat.requestPermissions(this@MainActivity,
permissions, REQUEST_PHONE_PERMISSION)
return false
}
return true
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String?>,
grantResults: IntArray) {
when (requestCode) {
REQUEST_PHONE_PERMISSION -> {
if (grantResults.isNotEmpty() && grantResults[0] ==
PackageManager.PERMISSION_GRANTED) {
getPhoneNumber()
Toast.makeText(this, "電話の発信と管理の許可を設定しました", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "電話の発信と管理の許可がありません.", Toast.LENGTH_SHORT).show()
}
}
}
}
private fun getPhoneNumber(): String {
val telnumber = findViewById<TextView>(R.id.txTelnumber)
if (permissionPhoneCheck()) {
val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
telnumber.text = telephonyManager.getLine1Number().toString()
return telephonyManager.getLine1Number().toString()
} else {
telnumber.text = "(電話番号は取得できませんでした)"
return "(電話番号は取得できませんでした)"
}
}
fun onButtonClick(view: View) {
var phoneNumberTxt: String = getPhoneNumber()
val dialog = AlertDialog.Builder(this)
.setTitle("あなたの携帯電話番号は")
.setMessage(phoneNumberTxt)
.setPositiveButton("OK") { dialog, which ->
Toast.makeText(this, "OKがタップされた", Toast.LENGTH_SHORT).show()
}
.create()
dialog.show()
}
}