2010-05-03 2 views
1

Я бы хотел написать простой виджет, который включает и выключает GPS и сетевое расположение. Я читал, что это невозможно сделать обычно, но, предположительно, на корневом телефоне это должно быть выполнимо. Кто-нибудь знает, что такое код? (Мне нужен только код для переключения поставщиков местоположения, я знаю, как сделать виджет.) Неважно, что это не «хорошее» решение, я не планирую распространять виджет. Если это имеет значение, это будет на HTC Hero, который все еще работает v1.5.Включить GPS и сетевое расположение программно на корневом телефоне?

+0

Эти ребята, похоже, понял это. К сожалению, apk запутан, и я не мог понять, как это было сделано. URL: https: //market.android.com/details? Id = at.abraxas.powerwidget.free & hl = ru –

+0

@BrianSweeney «GPS (так как ссылка 2.x на страницу настроек)», которая не включена программно – 2013-09-21 05:26:05

ответ

1

Я подозреваю, что вы ищете LOCATION_PROVIDERS_ALLOWED в android.provider.System.Secure. Тем не менее, я не уверен, что доступ root будет достаточным, чтобы вы могли ссылаться на приложения из SDK. Соответствующие методы для изменения этого параметра могут быть защищены путем проверки цифровой подписи приложения SDK. AFAIK, для чего потребуется создать и подписать собственную прошивку, а затем подписать приложение SDK для соответствия.

Возможно, вам также удастся выяснить, что происходит в системе при настройке этой настройки, и посмотреть, есть ли способ повлиять на одно и то же изменение с помощью приложения SDK на корневом устройстве, не пройдя через Secure поставщик услуг.

+0

Спасибо за предложения. Однако я не уверен, что следую пункту 2 - что вы подразумеваете под «SDK-приложением»? –

+0

«Приложение для SDK» - это приложение, написанное с помощью Android SDK. Это в отличие от модификации самой прошивки Android, где вы не ограничены тем, что является общедоступным. – CommonsWare

0
String provider = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
    if(!provider.contains("gps")){ 
     //if gps is disabled 
     final Intent poke = new Intent(); 
     poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
     poke.addCategory(Intent.CATEGORY_ALTERNATIVE); 
     poke.setData(Uri.parse("3")); 
     context.sendBroadcast(poke); 
    } 
0
public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 



    String[] cmds = {"cd /system/bin" ,"settings put secure location_providers_allowed +gps"}; 
    try { 
     Process p = Runtime.getRuntime().exec("su"); 
     DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
     for (String tmpCmd : cmds) { 
      os.writeBytes(tmpCmd + "\n"); 
     } 
     os.writeBytes("exit\n"); 
     os.flush(); 
    } 
    catch (IOException e){ 
     e.printStackTrace(); 
    } 

} 
} 
Смежные вопросы