एंड्रॉइड में टैबलेट बनाम फोन का पता लगाना
यह उदाहरण दर्शाता है कि TelephonyManager और स्क्रीन आकार का उपयोग करके डिवाइस को फोन या टैबलेट के रूप में कैसे पहचाना जाए।
चरण 1: नया प्रोजेक्ट बनाएं
एंड्रॉइड स्टूडियो में File → New Project चुनें।
चरण 2: लेआउट (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:text="Tutorials Point"
android:textAlignment="center"
android:textColor="@android:color/holo_green_dark"
android:textSize="32sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textViewDeviceType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="डिवाइस प्रकार का पता लगा रहा है..."
android:textAlignment="center"
android:textColor="@android:color/black"
android:textSize="24sp"
android:textStyle="bold" />
<Button
android:id="@+id/btnCheckAgain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textViewDeviceType"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text="फिर से जांचें" />
</RelativeLayout>
चरण 3: MainActivity.kt (एकाधिक पहचान विधियाँ)
import android.content.Context
import android.content.pm.ConfigurationInfo
import android.os.Build
import android.os.Bundle
import android.telephony.TelephonyManager
import android.util.DisplayMetrics
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private lateinit var textViewDeviceType: TextView
private lateinit var btnCheckAgain: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
textViewDeviceType = findViewById(R.id.textViewDeviceType)
btnCheckAgain = findViewById(R.id.btnCheckAgain)
btnCheckAgain.setOnClickListener { detectDeviceType() }
detectDeviceType()
}
private fun detectDeviceType() {
val results = mutableListOf()
// विधि 1: TelephonyManager (कॉल क्षमता जांचता है)
val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val isPhoneByTelephony = telephonyManager.phoneType != TelephonyManager.PHONE_TYPE_NONE
results.add("टेलीफोनी: ${if (isPhoneByTelephony) "फोन" else "टैबलेट/केवल वाईफाई"}")
// विधि 2: स्क्रीन आकार (सबसे विश्वसनीय)
val isTabletByScreen = isTabletByScreenSize()
results.add("स्क्रीन आकार: ${if (isTabletByScreen) "टैबलेट" else "फोन"}")
// विधि 3: UI मोड (डॉक/कार मोड)
val uiMode = resources.configuration.uiMode and ConfigurationInfo.UI_MODE_TYPE_MASK
val isTelevision = uiMode == ConfigurationInfo.UI_MODE_TYPE_TELEVISION
val isWatch = uiMode == ConfigurationInfo.UI_MODE_TYPE_WATCH
results.add("UI मोड: ${when (uiMode) {
ConfigurationInfo.UI_MODE_TYPE_NORMAL -> "सामान्य"
ConfigurationInfo.UI_MODE_TYPE_TELEVISION -> "टीवी"
ConfigurationInfo.UI_MODE_TYPE_WATCH -> "घड़ी"
ConfigurationInfo.UI_MODE_TYPE_CAR -> "कार"
ConfigurationInfo.UI_MODE_TYPE_DESK -> "डेस्क"
ConfigurationInfo.UI_MODE_TYPE_APPLIANCE -> "उपकरण"
else -> "अज्ञात"
}}")
// विधि 4: सबसे छोटी चौड़ाई (600dp+ = टैबलेट)
val smallestWidthDp = resources.configuration.smallestScreenWidthDp
results.add("सबसे छोटी चौड़ाई: ${smallestWidthDp}dp (${if (smallestWidthDp >= 600) "टैबलेट" else "फोन"})")
// विधि 5: बिल्ड प्रॉपर्टीज (कुछ निर्माताओं के लिए)
val isTabletBuild = isTabletByBuildProp()
results.add("बिल्ड प्रॉप: ${if (isTabletBuild) "टैबलेट" else "फोन"}")
// अंतिम निर्णय
val isTablet = isTabletByScreen || isTabletBuild || smallestWidthDp >= 600
val finalResult = if (isTablet) "📱 टैबलेट" else "📞 फोन"
textViewDeviceType.text = """
अंतिम परिणाम: $finalResult
विवरण:
${results.joinToString("\n")}
""".trimIndent()
}
// स्क्रीन आकार द्वारा टैबलेट पहचान (सबसे विश्वसनीय)
private fun isTabletByScreenSize(): Boolean {
val metrics = DisplayMetrics()
windowManager.defaultDisplay.getRealMetrics(metrics)
val widthDp = metrics.widthPixels / metrics.density
val heightDp = metrics.heightPixels / metrics.density
val smallestWidthDp = minOf(widthDp, heightDp)
return smallestWidthDp >= 600 // 600dp+ टैबलेट के लिए पारंपरिक सीमा
}
// बिल्ड प्रॉपर्टीज द्वारा पहचान (वैकल्पिक)
private fun isTabletByBuildProp(): Boolean {
return try {
// कुछ निर्माता इसे सेट करते हैं
Build.getString("ro.build.characteristics")?.contains("tablet") == true
} catch (e: Exception) {
false
}
}
}
चरण 4: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.devicetype">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
पहचान विधियों की तुलना:
| विधि | विश्वसनीयता | नोट्स |
|---|---|---|
| TelephonyManager | कम | वाईफाई-केवल टैबलेट "फोन" के रूप में दिखते हैं; फोन बिना सिम के "टैबलेट" के रूप में दिखते हैं |
| सबसे छोटी चौड़ाई (≥600dp) | उच्च | Google का आधिकारिक दिशानिर्देश; अभिविन्यास-स्वतंत्र |
| स्क्रीन लेआउट (xlarge/large) | मध्यम | पुराना API; कुछ बड़े फोन "large" के रूप में पंजीकृत होते हैं |
| UI मोड | उच्च | टीवी, घड़ी, कार, डेस्क मोड की पहचान करता है |
| बिल्ड प्रॉपर्टीज | चर | निर्माता-निर्भर; हमेशा मौजूद नहीं |
संसाधन क्वालिफायर का उपयोग करना (सर्वोत्तम अभ्यास):
कोड में पहचान के बजाय, संसाधन क्वालिफायर का उपयोग करें:
res/layout/activity_main.xml- फोनres/layout-sw600dp/activity_main.xml- 7" टैबलेटres/layout-sw720dp/activity_main.xml- 10" टैबलेट
सिस्टम स्वचालित रूप से सही लेआउट चुनता है।