簡體   English   中英

SystemClock凍結系統

[英]SystemClock freezes the system

在View類中,我重寫onFinishInflate()來調用setupEventHandlers() ,它定義了一些偵聽器。 例如:

setDate.setOnClickListener( new OnSingleClick() {
    @Override
    public void onSingleClick( final View v ) {
            controller.onSetDate();
        }
    }
} );

controller.onSetDate()我有以下命令:

SystemClock.setCurrentTimeMillis(dateTime.getMillis());

dateTime是一個DateTime對象)

調用此方法后,系統會凍結。 聽眾停止工作。 單擊附加的按鈕沒有任何反應(也在調試模式下檢查-單擊按鈕時它不會進入偵聽器)。 只有逼人退 (Android設備本身)的作品,然后系統再次恢復正常(它識別聽眾)。

為什么會這樣呢?

編輯:

我在有根設備上工作,並且所有權限都已設置。

現在我的代碼如下:

AlarmManager alarm = (AlarmManager) MainApplication.getAppContext().getSystemService( Context.ALARM_SERVICE );
long time = dateTime.getMillis();
DateTimeZone zone = dateTime.getZone();
alarm.setTime( time );
alarm.setTimeZone( zone.toTimeZone().getID() );
TimeZone.setDefault( zone.toTimeZone() );
DateTimeZone.setDefault( zone );

僅當我嘗試向后設置時間/日期時,才會出現問題。 將其向前設置很好。

有關SystemClock.setCurrentTimeMillis的Javadoc指示您的應用程序必須具有適當的權限 快速瀏覽一下代碼,發現SystemClock.setCurrentTimeMillis最終正在調用AlarmManager.setTime ,它需要以下權限:android.permission.SET_TIME

您應該在清單中添加權限:

<uses-permission android:name="android.permission.SET_TIME"/>

請注意,這是系統級別的權限,因此您的應用必須使用適當的簽名(系統)進行簽名,否則不會授予該權限。

您可以使用以下命令檢查是否授予了權限:

String permission = "android.permission.SET_TIME";
int res = context.checkCallingOrSelfPermission(permission);
boolean permissionSetTimeGranted = (res == PackageManager.PERMISSION_GRANTED);

關於您的評論的評論:我不明白為什么運行chmod 666 /dev/alarm會改變任何東西(除了這可能是為什么您的應用程序凍結而不是簡單地返回false

解決方案是:

在設置日期/時間后重新為視圖充氣:

dateAndTimeView = ( DateAndTimeSetupView ) View.inflate( DateAndTimeSetupController.this, R.layout.date_and_time_setup, null );
setContentView( dateAndTimeView );  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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