13

でシステム クロックを設定したいのですSystemClock.setCurrentTimeMillisが、次のエラーが発生しました。

"Unable to open alarm driver: Permission denied"

以下は、setCurrentMillisAndroid Developers サイトの APIの説明です。

public static boolean setCurrentTimeMillis (long millis) 

導入されたバージョン: API レベル 1 現在の経過時間をミリ秒単位で設定します。呼び出しプロセスに適切なアクセス許可が必要です。

時計が指定された時間に正常に設定されたかどうかを返します。

そのため、アプリケーションは時刻を設定するためのパーミッションを取得する必要があります。AndroidManisfest.xmlに挿入しましandroid.permission.SET_TIMEたが、同じメッセージ エラーが表示されます。

インターネットで見つけたさまざまな解決策を試してみましたが、導入された FroYo (Android 2.2) でも root なしでシステム時刻を設定するandroid.permission.SET_TIMEことはできないようです. /dev/alarmファイルには664 permission. したがって、解決策は許可を変更することです666が、ルート化されたデバイスが必要であり、侵襲的すぎて解決策にはなりません.

会社が異なるシステム間でデータを同期するためのアプリを作成したいと考えており、クロックを同期させることが不可欠です。

よろしくお願いいたします。

日食

4

3 に答える 3

11

日食、

これについてかなりの確認を行ったところ、問題を解決するためのオープン チケットが Google で見つかりました。唯一のことは、タグが 2009 年 11 月 8 日から開かれていることです。基本的には、アクセス許可があっても時刻を変更できるのはシステムだけです。以下のリンクのコメントによると、開発者はいくつかの調査を行い、パーミッション SET_TIME が作成されたときに、OS で適切な保護レベル (署名またはシステムと危険) が与えられていないことに気付きました。その結果、やるべきことができなくなります。

http://code.google.com/p/android/issues/detail?id=4581

アクセス許可が持つことができるさまざまな保護レベルの説明を次に示します。現在、上記の開発者の引用によると、SET_TIME には「dangerous」が必要なときに「signatureorSystem」があります。

http://developer.android.com/guide/topics/manifest/permission-element.html#plevel

要するに、現在、電話をルート化せずにプログラムで時間を変更する方法はありません。

最後の 1 つの注意点は、カスタム rom を使用する場合は、Cyanogenmod の rom にも機能を追加するためのオープン チケットもあるということです。

http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=CyanogenMod+SET_TIME

これがいくつかの助けになることを願っています、ジョージ

于 2011-07-18T13:50:06.833 に答える
3

この投稿によると、SET_TIME は正しいアクセス許可ですが、ルート化された電話でのみ機能します。

于 2011-07-05T15:30:46.327 に答える
1

私たちはそれをやった. SET_TIME 権限を取得できる限り、大したことではありません。同様の質問に対する私の回答を参照してください。

電話をルート化しないと不可能であるという他の回答に関しては、これは許可を得ることだけを指します。これについては、こちらこちらを参照してください。

于 2012-07-29T11:26:23.087 に答える