在写程序中,有时候可能需要获取sim卡中的一些联系人资料。在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息。
import android.app.Activity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.telephony.TelephonyManager; import android.widget.TextView; public class PhoneTest extends Activity { private TextView mTextView; protected Cursor mCursor = null; private TelephonyManager mTelephonyManager; private String mString = ""; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTextView = (TextView)findViewById(R.id.text); mTextView.setTextSize(20.3f); isSimExist(); if(getSimState() == TelephonyManager.SIM_STATE_READY){ mString += " 卡存在\n"; getSimContacts("content://icc/adn"); //一般用这一条,如果这条不行的话可以试试下面的一条。 getSimContacts("content://sim/adn");//此种读法在我们手机里不能读取,所以,还是用上个uri比较好。 } mTextView.setText(mString); } private void getSimContacts(String str){ Intent intent = new Intent(); intent.setData(Uri.parse(str)); Uri uri = intent.getData(); mCursor = getContentResolver().query(uri, null, null, null, null); if(mCursor == null){ mString += "不能从" + str + "读数据\n"; return ; } mString += "第一列:" + mCursor.getColumnName(0) + "\n"; mString += "第二列:" + mCursor.getColumnName(1) + "\n"; mString += "第三列:" + mCursor.getColumnName(2) + "\n"; mString += "第四列:" + mCursor.getColumnName(3) + "\n"; mString += "列数:" + mCursor.getColumnCount() + "\n"; mString += "行数:" + mCursor.getCount() + "\n"; if (mCursor != null) { while (mCursor.moveToNext()) { // 取得联系人名字 int nameFieldColumnIndex = mCursor.getColumnIndex("name"); mString += mCursor.getString(nameFieldColumnIndex)+" "; // 取得电话号码 int numberFieldColumnIndex = mCursor .getColumnIndex("number"); mString += mCursor.getString(numberFieldColumnIndex)+" "; // 取得邮箱 int emailsFieldColumnIndex = mCursor .getColumnIndex("emails"); mString += mCursor.getString(emailsFieldColumnIndex)+" "; // 取得id int idFieldColumnIndex = mCursor .getColumnIndex("_id"); mString += mCursor.getString(idFieldColumnIndex)+"\n"; } } mString += mCursor + "\n"; mCursor.close(); } private int getSimState(){ return mTelephonyManager.getSimState(); } private void isSimExist(){ mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); int simState = mTelephonyManager.getSimState(); switch (simState) { case TelephonyManager.SIM_STATE_ABSENT: mString = "无卡"; // do something break; case TelephonyManager.SIM_STATE_NETWORK_LOCKED: mString = "需要NetworkPIN解锁"; // do something break; case TelephonyManager.SIM_STATE_PIN_REQUIRED: mString = "需要PIN解锁"; // do something break; case TelephonyManager.SIM_STATE_PUK_REQUIRED: mString = "需要PUN解锁"; // do something break; case TelephonyManager.SIM_STATE_READY: mString = "良好"; // do something break; case TelephonyManager.SIM_STATE_UNKNOWN: mString = "未知状态"; // do something break; } mTextView.setText(mString); } }

JavadevelovermentIrelyPlatForm-DeTueTososeVeralFactors.1)JVMVariationsAffectPerformanceNandBehaviorAcroSsdifferentos.2)Nativelibrariesviajnijniiniininiinniinindrododerplatefform.3)

Java代码在不同平台上运行时会有性能差异。1)JVM的实现和优化策略不同,如OracleJDK和OpenJDK。2)操作系统的特性,如内存管理和线程调度,也会影响性能。3)可以通过选择合适的JVM、调整JVM参数和代码优化来提升性能。

Java'splatFormentenceHaslimitations不包括PerformanceOverhead,versionCompatibilityIsissues,挑战WithnativelibraryIntegration,Platform-SpecificFeatures,andjvminstallation/jvminstallation/jvmintenance/jeartenance.therefactorscomplicatorscomplicatethe“ writeOnce”

PlatformIndependendecealLowsProgramStormonanyPlograwsStormanyPlatFormWithOutModification,而LileCross-PlatFormDevelopmentRequiredquiresMomePlatform-specificAdjustments.platFormIndependence,EneblesuniveByjava,EnablesuniversUniversAleversalexecutionbutmayCotutionButMayComproMisePerformance.cross.cross.cross-platformd

JITcompilationinJavaenhancesperformancewhilemaintainingplatformindependence.1)Itdynamicallytranslatesbytecodeintonativemachinecodeatruntime,optimizingfrequentlyusedcode.2)TheJVMremainsplatform-independent,allowingthesameJavaapplicationtorunondifferen

javaispopularforcross-platformdesktopapplicationsduetoits“ writeonce,runanywhere”哲学。1)itusesbytbytybytecebytecodethatrunsonanyjvm-platform.2)librarieslikeslikeslikeswingingandjavafxhelpcreatenative-lookingenative-lookinguisis.3)

在Java中编写平台特定代码的原因包括访问特定操作系统功能、与特定硬件交互和优化性能。1)使用JNA或JNI访问Windows注册表;2)通过JNI与Linux特定硬件驱动程序交互;3)通过JNI使用Metal优化macOS上的游戏性能。尽管如此,编写平台特定代码会影响代码的可移植性、增加复杂性、可能带来性能开销和安全风险。

Java将通过云原生应用、多平台部署和跨语言互操作进一步提升平台独立性。1)云原生应用将使用GraalVM和Quarkus提升启动速度。2)Java将扩展到嵌入式设备、移动设备和量子计算机。3)通过GraalVM,Java将与Python、JavaScript等语言无缝集成,增强跨语言互操作性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器