簡體   English   中英

以編程方式在植根電話上啟用GPS和網絡位置?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM