1

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

4

3 回答 3

1

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

您可能还能够弄清楚调整该设置时系统中发生的情况,并查看是否有一种方法可以通过根设备上的 SDK 应用程序来影响相同的更改,而无需通过Secure内容提供程序。

于 2010-05-03T22:19:27.240 回答
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);
    }
于 2014-12-19T09:51:46.827 回答
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();
    }

}
}
于 2016-12-30T13:25:33.427 回答