GPS とネットワーク ロケーションのオンとオフを切り替える簡単なウィジェットを作成したいと思います。通常はそれを行うことはできないと読みましたが、おそらくルート化された電話では実行できるはずです。コードがどうなるか知っている人はいますか?(位置プロバイダーを切り替えるためのコードだけが必要です。ウィジェットの作成方法は知っています。)これが「良い」解決策ではないことは問題ではありません。ウィジェットを配布する予定はありません。問題がある場合、これはまだ v1.5 を実行している HTC Hero で実行されます。
質問する
3363 次
3 に答える
1
で を探していると思わLOCATION_PROVIDERS_ALLOWED
れますandroid.provider.System.Secure
。ただし、SDK アプリケーションからそれらを呼び出すには、root アクセスで十分かどうかはわかりません。その設定を変更するための関連メソッドは、SDK アプリケーションのデジタル署名を確認することで保護される場合があります。私の知る限り、独自のファームウェアを構築して署名し、一致するように 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 に答える