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