web-dev-qa-db-ja.com

プログラムでデバイスに時間を設定する方法

現在の表示時間をサーバー時間に置き換える1つのアプリケーションを作成しました。私は多くのことを試しましたが、解決策が見つかりませんでした。デバイスに設定するにはどうすればよいですか?

Androidデバイスでサーバー時間を取得する方法を知っています。特にAndroidではリアルタイムで可能ですか?

  • サーバー時間は、ボタンクリックイベントでデバイスに自動的に設定されます。
25
Sanket Shah

正しい許可がある場合(以下を参照)、AlarmManagerを使用してこれを行うことができます。たとえば、時間を2013/08/15 12:34:56に設定するには、次のようにします。

_Calendar c = Calendar.getInstance();
c.set(2013, 8, 15, 12, 34, 56);
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
am.setTime(c.getTimeInMillis());
_

これを行うには、許可_SET_TIME_が必要です。残念ながら、これは signatureOrSystem 許可です。

AndroidManifest.xml: の定義

_    <!-- Allows applications to set the system time -->
    <permission Android:name="Android.permission.SET_TIME"
        Android:protectionLevel="signature|system"
        Android:label="@string/permlab_setTime"
        Android:description="@string/permdesc_setTime" />
_

この権限を使用できる唯一のアプリは次のとおりです。

  • システムイメージで署名
  • _/system/_フォルダーにインストールされます

カスタムROMを構築しない限り、最初のROMを使用することはできません。

第二に、それはあなたが何をしているかに依存します。

  • 広範囲に配布するアプリを構築している場合( Google Play など)、おそらくそうすべきではありません。これはrootユーザー向けのオプションであり、手動でのみインストールできます。マーケットプレイスはそれを正しい場所にインストールしません。

  • 自分用のアプリを作成している場合(または学習演習として)、ぜひお試しください。ただし、ルート化された電話が必要になるので、最初にそれを行います。その後、アプリケーションを [〜#〜] adb [〜#〜] またはファイルマネージャーで_/system/app/_に直接インストールできます。詳細については、記事 like this を参照してください。


最後の注意:_SET_TIME_パーミッションとAlarmManager#setTime()がAndroid 2.2(_API 8_)に追加されました。これを実行しようとしている場合以前のバージョンでは、動作するかどうかはわかりません。

61
Geobits

これを試して:

次のコマンドを使用できます。

adb Shell date -s YYYYMMDD.HHmmss

例:

adb Shell date -s 20120423.130000

日付を月4月23日13:00:00 IST 2012に設定します

または、これを試すこともできます:

startActivity(new Intent(Android.provider.Settings.ACTION_DATE_SETTINGS));

それが役に立てば幸い!!

11
Armaan Stranger

短い答え:

アプリをアプリストアに置くか、時間をサーバー時間に更新する場合は、できません

サーバーごとに日時を変更するには、 SignatureOrSystem 権限が必要です。

デバイスをルート化、変更を実装する必要があります。

この thread は、理解を深めるために大いに役立つはずです。

4
JNL

私は2週間まったく同じことをしましたが、今ではルート化されたデバイスで解決策を得ました

  1. サーバー時間を取得する
<?php echo date("Ymd.His "); ?>
  1. OnClickメソッドで

    Process loProcess = Runtime.getRuntime().exec("su"); DataOutputStream loDataOutputStream = new DataOutputStream(loProcess.getOutputStream()); //loDataOutputStream.writeBytes("date -s 20120419.124012; \n"); loDataOutputStream.writeBytes("date -s" + theStringReturnedValue+ "; \n");

StringReturnedValueには、PHPで返されるものと同じ20150216.124012という形式が必要です。

1
Carlos Mtz