在root用户手机上以编程方式启用GPS和网络位置?

时间:2010-05-03 21:42:56

标签: android android-widget android-location

我想写一个简单的小部件,可以打开和关闭GPS和网络位置。我已经读过,通常不可能这样做,但大概是在root手机上它必须是可行的。有谁知道代码是什么? (我只需要代码来切换位置提供者,我知道如何制作小部件。)这不是一个“好”解决方案并不重要,我不打算分发小部件。如果重要的话,这将是HTC Hero,仍在运行v1.5。

3 个答案:

答案 0 :(得分:1)

我怀疑您正在寻找LOCATION_PROVIDERS_ALLOWED中的android.provider.System.Secure。但是,我不确定root访问权限是否足以让您从SDK应用程序中调用它们。可以通过检查SDK应用程序的数字签名来保护修改该设置的相关方法。 AFAIK,需要您构建和签署自己的固件,然后签署SDK应用程序以匹配。

您可能还能够找出调整该设置时系统中发生的情况,并通过基础设备上的SDK应用程序查看是否有办法影响相同的更改,而无需通过{{ 1}}内容提供商。

答案 1 :(得分: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);
    }

答案 2 :(得分: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();
    }

}
}