有没有办法可以在我的android中访问其他SIM卡?我有一个Android樱桃移动轨道,这是一个双卡通Android手机。我想为我的手机开发一个短信应用程序,但只有第一个SIM卡可以访问。我想访问另一个SIM卡,这样当我按Enter键发送消息时,会出现一个提示,即消息将被发送。 我知道它是有效的,但手机制造商对此没有任何反馈。还有其他方法吗?调整什么的?
答案 0 :(得分:3)
我认为您可以使用dex2jar或apktool来反转在双SIM卡设备上运行的应用程序,一旦找到相关的“服务管理器”,“电话管理器”,某些接口存根或某些关键字,如“Gemini”然后你可以使用Java Reflection,反映这个类的所有方法。然后你就可以实现这个目标。
答案 1 :(得分:0)
现在正式没有支持此功能的API,您必须联系设备制造商。
答案 2 :(得分:0)
假设您正在为自己的手机开发应用,并且您愿意找到分配给每张SIM卡的ID(sim_id
)(可能是通过查看手机&#) 39; s日志输出,搜索sim_id
,这就是我所做的),您可以使用以下代码设置短信发送的默认SIM卡:
int simId = <place desired SIM ID here>;
Intent simIntent = new Intent("android.intent.action.SMS_DEFAULT_SIM");
simIntent.putExtra("simid", simId);
sendBroadcast(simIntent);
结合其他一些UI提示功能(实际上是选择&#39;首选SIM卡),这应该可以解决问题。
我完全不确定这种方法是否对您有用(尽管代码看起来很标准&#39;);我在我的Mlais MX28(带有自定义ROM)上试用了它。但我想,它仍然值得一试。 :)
<强>更新强>
奇怪的是,在我正在处理的应用程序的一些更新后,解决方案意外停止工作。但我遇到了另一种方式(似乎更有希望)。 (我相信这也可以扩展到其他SIM选择方案,因为设置缓存包含name
s gprs_connection_sim_setting
,voice_call_sim_setting
,video_call_sim_setting
等条目。)
ContentValues val = new ContentValues();
val.put("value", "here goes the preferred SIM ID");
getContentResolver().update(Uri.parse("content://settings/system"), val, "name='sms_sim_setting'", null);
(不幸的是,这需要android.permission.WRITE_SETTINGS
权限。)
答案 3 :(得分:0)
此方法可用于从2张SIM卡中选择一张!
//above Android API 22
if (Build.VERSION.SDK_INT > 22) {
//for dual sim mobile
SubscriptionManager localSubscriptionManager = SubscriptionManager.from(this);
if (localSubscriptionManager.getActiveSubscriptionInfoCount() > 1) {
//if there are two sims in dual sim mobile
List localList = localSubscriptionManager.getActiveSubscriptionInfoList();
SubscriptionInfo simInfo = (SubscriptionInfo) localList.get(0);
SubscriptionInfo simInfo1 = (SubscriptionInfo) localList.get(1);
final String sim1 = simInfo.getDisplayName().toString();
final String sim2 = simInfo1.getDisplayName().toString();
}else{
//if there is 1 sim in dual sim mobile
TelephonyManager tManager = (TelephonyManager) getBaseContext()
.getSystemService(Context.TELEPHONY_SERVICE);
String sim1 = tManager.getNetworkOperatorName();
}
}else{
//below android API 22
TelephonyManager tManager = (TelephonyManager) getBaseContext()
.getSystemService(Context.TELEPHONY_SERVICE);
String sim1 = tManager.getNetworkOperatorName();
}
然后,您可以使用以下方法发送短信
public static boolean sendSMS(Context context, String smsText) {
SmsManager smsMan = SmsManager.getDefault();
SharedPreferences prefs = context.getSharedPreferences("uinfo", MODE_PRIVATE);
String sim = prefs.getString("sim", "No name defined");
String simName = prefs.getString("simName", "No name defined");
String toNum = "";
try {
if (Build.VERSION.SDK_INT > 22) {
SubscriptionManager localSubscriptionManager = SubscriptionManager.from(context);
if (localSubscriptionManager.getActiveSubscriptionInfoCount() > 1) {
int simID = Integer.parseInt(sim);
List localList = localSubscriptionManager.getActiveSubscriptionInfoList();
SubscriptionInfo simInfo = (SubscriptionInfo) localList.get(simID);
ArrayList<String> parts = smsMan.divideMessage(smsText);
SmsManager.getSmsManagerForSubscriptionId(simInfo.getSubscriptionId()).sendMultipartTextMessage(toNum, null, parts, null, null);
}else{
ArrayList<String> parts = smsMan.divideMessage(smsText);
smsMan.sendMultipartTextMessage(toNum, null, parts, null, null);
}
return true;
}else{
ArrayList<String> parts = smsMan.divideMessage(smsText);
smsMan.sendMultipartTextMessage(toNum, null, parts, null, null);
}
} catch (Exception e) {
}
return false;
}