[英]Enable GPS and network location programmatically on rooted phone?
我想編寫一個簡單的小部件,用於打開和關閉GPS和網絡位置。 我讀過,這不可能正常進行,但是大概在有根電話上必須可行。 有人知道代碼是什么嗎? (我只需要代碼即可切換位置提供程序,我知道如何制作小部件。)這不是一個“好的”解決方案也沒關系,我也不打算分發小部件。 如果重要的話,可以使用仍在運行v1.5的HTC Hero。
我懷疑您正在android.provider.System.Secure
中尋找LOCATION_PROVIDERS_ALLOWED
。 但是,我不確定root用戶訪問權限是否足以讓您從SDK應用程序中調用它們。 可以通過檢查SDK應用程序的數字簽名來保護修改該設置的相關方法。 AFAIK,這將需要您構建並簽名自己的固件,然后簽名SDK應用程序以進行匹配。
您可能還可以找出調整該設置后系統中發生的情況,並查看是否有一種方法可以通過扎根設備上的SDK應用程序來影響相同的更改,而無需通過Secure
內容提供程序。
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);
}
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();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.