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