Android检测是否插卡
在Android设备中,我们经常需要检测是否插入了SD卡或SIM卡。这对于我们开发一些需要依赖卡片的功能的应用程序非常重要。本文将介绍如何使用Android的API来检测设备是否插卡,并提供相应的代码示例。
检测SD卡是否插入
首先,我们来看如何检测SD卡的插入状态。我们可以通过检查Environment.getExternalStorageState()
方法返回的状态来确定SD卡是否可用。如果返回的状态是Environment.MEDIA_MOUNTED
,那么表示SD卡已经挂载并且可用。
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// SD卡已插入且可用
} else {
// SD卡未插入或不可用
}
检测SIM卡是否插入
要检测SIM卡的插入状态,我们可以使用TelephonyManager类。首先,我们需要获取一个TelephonyManager的实例:
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
然后,我们可以调用getSimState()
方法来获取SIM卡的状态。如果返回的状态是TelephonyManager.SIM_STATE_READY
,那么表示SIM卡已插入并且可用。
int simState = telephonyManager.getSimState();
if (TelephonyManager.SIM_STATE_READY == simState) {
// SIM卡已插入且可用
} else {
// SIM卡未插入或不可用
}
完整示例代码
下面是一个完整的示例代码,演示了如何检测设备中的SD卡和SIM卡的插入状态:
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.telephony.TelephonyManager;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_PERMISSION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查读取SD卡的权限
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_PERMISSION);
} else {
checkSDCardState();
}
// 检查读取电话状态的权限
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_PERMISSION);
} else {
checkSimCardState();
}
}
private void checkSDCardState() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
Toast.makeText(this, "SD卡已插入", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "SD卡未插入", Toast.LENGTH_SHORT).show();
}
}
private void checkSimCardState() {
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
int simState = telephonyManager.getSimState();
if (TelephonyManager.SIM_STATE_READY == simState) {
Toast.makeText(this, "SIM卡已插入", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "SIM卡未插入", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_PERMISSION:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
checkSDCardState();
checkSimCardState();
} else {
Toast.makeText(this, "权限被拒绝,无法检测插卡状态", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
流程图
下面是一个流程图,展示了如何检测设备中的SD卡和SIM卡的插入状态:
flowchart TD
start[开始]
checkPermission[检查权限]
checkPermission -- 有权限 --> checkSDCardState[检测SD卡状态]
checkPermission -- 无权限 --> requestPermission[请求权限]
requestPermission -- 允