powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Выбор SIM при перед звонком (Dual Sim Select)
2 сообщений из 2, страница 1 из 1
Выбор SIM при перед звонком (Dual Sim Select)
    #38981581
BoJI4er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было у меня устройство, на Android 4.0.4 там была функция "выбрать сим с которой делать вызов", запрашивалась перед звонком и СМС ... Купил себе Android 5.0.1 тут такого нету.. либо 1 либо 2 симка... Нашел на play маркете приложение, но оно только в триал версии (7 дней) висит там ... дальше денег хотят ((( ... да и работает она только для вызовов, а СМС не затрагивает...

Сел, решил сам набросать мини сервис для запросам SIM и уперся в "заморочку" ... не могу найти как переключить симку :(
Может кто помочь?

Наличие и данных о SIM нахожу через спец класс

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
package ua.antontereshin.dualsimselector.utils;

import java.lang.reflect.Method;

import android.content.Context;
import android.telephony.TelephonyManager;

public final class TelephonyInfo {
	
	private static TelephonyInfo telephonyInfo;
	private String imeiSIM1;
	private String imeiSIM2;
	private boolean isSIM1Ready;
	private boolean isSIM2Ready;

	public String getImeiSIM1() {
	    return imeiSIM1;
	}

	public String getImeiSIM2() {
	    return imeiSIM2;
	}


	public boolean isSIM1Ready() {
	    return isSIM1Ready;
	}

	public boolean isSIM2Ready() {
	    return isSIM2Ready;
	}


	public boolean isDualSIM() {
	    return imeiSIM2 != null;
	}

	private TelephonyInfo() {
	}

	public static TelephonyInfo getInstance(Context context){

	    if(telephonyInfo == null) {

	        telephonyInfo = new TelephonyInfo();

	        TelephonyManager telephonyManager = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE));
	        

	        telephonyInfo.imeiSIM1 = telephonyManager.getDeviceId();
	        telephonyInfo.imeiSIM2 = null;

	        try {
	            telephonyInfo.imeiSIM1 = getDeviceIdBySlot(context, "getDeviceIdGemini", 0);
	            telephonyInfo.imeiSIM2 = getDeviceIdBySlot(context, "getDeviceIdGemini", 1);
	        } catch (GeminiMethodNotFoundException e) {
	            e.printStackTrace();

	            try {
	                telephonyInfo.imeiSIM1 = getDeviceIdBySlot(context, "getDeviceId", 0);
	                telephonyInfo.imeiSIM2 = getDeviceIdBySlot(context, "getDeviceId", 1);
	            } catch (GeminiMethodNotFoundException e1) {
	                //Call here for next manufacturer's predicted method name if you wish
	                e1.printStackTrace();
	            }
	        }

	        telephonyInfo.isSIM1Ready = telephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY;
	        telephonyInfo.isSIM2Ready = false;

	        try {
	            telephonyInfo.isSIM1Ready = getSIMStateBySlot(context, "getSimStateGemini", 0);
	            telephonyInfo.isSIM2Ready = getSIMStateBySlot(context, "getSimStateGemini", 1);
	        } catch (GeminiMethodNotFoundException e) {

	            e.printStackTrace();

	            try {
	                telephonyInfo.isSIM1Ready = getSIMStateBySlot(context, "getSimState", 0);
	                telephonyInfo.isSIM2Ready = getSIMStateBySlot(context, "getSimState", 1);
	            } catch (GeminiMethodNotFoundException e1) {
	                //Call here for next manufacturer's predicted method name if you wish
	                e1.printStackTrace();
	            }
	        }
	    }

	    return telephonyInfo;
	}

	private static String getDeviceIdBySlot(Context context, String predictedMethodName, int slotID) throws GeminiMethodNotFoundException {

	    String imei = null;

	    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

	    try{

	        Class<?> telephonyClass = Class.forName(telephony.getClass().getName());

	        Class<?>[] parameter = new Class[1];
	        parameter[0] = int.class;
	        Method getSimID = telephonyClass.getMethod(predictedMethodName, parameter);

	        Object[] obParameter = new Object[1];
	        obParameter[0] = slotID;
	        Object ob_phone = getSimID.invoke(telephony, obParameter);

	        if(ob_phone != null){
	            imei = ob_phone.toString();

	        }
	    } catch (Exception e) {
	        e.printStackTrace();
	        throw new GeminiMethodNotFoundException(predictedMethodName);
	    }

	    return imei;
	}

	private static  boolean getSIMStateBySlot(Context context, String predictedMethodName, int slotID) throws GeminiMethodNotFoundException {

	    boolean isReady = false;

	    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
	    
	    try{

	        Class<?> telephonyClass = Class.forName(telephony.getClass().getName());

	        Class<?>[] parameter = new Class[1];
	        parameter[0] = int.class;
	        Method getSimStateGemini = telephonyClass.getMethod(predictedMethodName, parameter);

	        Object[] obParameter = new Object[1];
	        obParameter[0] = slotID;
	        Object ob_phone = getSimStateGemini.invoke(telephony, obParameter);

	        if(ob_phone != null){
	            int simState = Integer.parseInt(ob_phone.toString());
	            if(simState == TelephonyManager.SIM_STATE_READY){
	                isReady = true;
	            }
	        }
	    } catch (Exception e) {
	        e.printStackTrace();
	        throw new GeminiMethodNotFoundException(predictedMethodName);
	    }

	    return isReady;
	}


	private static class GeminiMethodNotFoundException extends Exception {

	    private static final long serialVersionUID = -996812356902545308L;

	    public GeminiMethodNotFoundException(String info) {
	        super(info);
	    }
	}
}




Пробовал задать SIM через метод, но ничего не получается :
Код: java
1.
2.
3.
4.
5.
	private void selectSIM(int simId) {
		Intent simIntent = new Intent("android.intent.action.DUAL_SIM_MODE");
		simIntent.putExtra("simid", simId);
		sendBroadcast(simIntent);
	}


...
Рейтинг: 0 / 0
Выбор SIM при перед звонком (Dual Sim Select)
    #38981798
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoJI4erКупил себе Android 5.0.1 тут такого нету..
Это не от версии андроида зависит, а от жадности желания производителя.
На моем, к примеру, и при наборе и при отправке две кнопки: какую нажмешь, туда и пойдет.

Тут тебе проще реверсом заняться. Того самого приложения.
Все эти вещи пока отданы на откуп производителя и универсального апи (от гугла) пока нет. Уже есть, но начиная с 5.1.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / Выбор SIM при перед звонком (Dual Sim Select)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]