2015-05-15 23 views
0

我想創建一個切換按鈕,通過它我可以啓用/禁用自動旋轉。我試過這個:使用切換控制自動旋轉?

public void arclick(View view) { 
     if (arclick.isChecked()) 
      android.provider.Settings.System.putInt(getContentResolver(), 
        android.provider.Settings.System.USER_ROTATION, 90); 
     else 
      android.provider.Settings.System.putInt(getContentResolver(), 
        android.provider.Settings.System.USER_ROTATION, 0); 
    } 

但它實際上不工作。有任何想法嗎?提前致謝!!! P.S:選擇的方向應該適用於整個操作系統,而不僅僅是應用程序。

+0

你宣佈<使用許可權的android:NAME = 「android.permission.WRITE_SETTINGS」>清單中? – abhishesh

+0

是的,我增加了許可。 @abhishesh –

+0

當我使用從帖子的第一個答案的代碼我的手機開始重複重新啓動,這是瘋了!這是一個循環!我重新安裝了我的ROM,現在我已經丟失了所有的SMS和其他東西。我不知道這是怎麼發生的! –

回答

1

由於每個開發者文檔:

USER_ROTATION: 在沒有其他政策適用默認屏幕旋轉。當ACCELEROMETER_ROTATION爲零且沒有屏幕上的Activity表示首選項時,將使用此旋轉值。必須是曲面旋轉常量之一。

使用USER_ROTATION之前,你需要ACCELEROMETER_ROTATION設置爲0。 像:

android.provider.Settings.System.putInt(getContentResolver(), 
android.provider.Settings.System.ACCELEROMETER_ROTATION, 0); 
if (arclick.isChecked()) 
    android.provider.Settings.System.putInt(getContentResolver(), 
      android.provider.Settings.System.USER_ROTATION, Surface.ROTATION_90); 
else 
    android.provider.Settings.System.putInt(getContentResolver(), 
      android.provider.Settings.System.USER_ROTATION, Surface.ROTATION_0); 

並且不要使用值90,使用Surface.ROTATION_90(值爲1不是90)。

如果要禁用旋轉功能,使用方法:

if(disable) 
    android.provider.Settings.System.putInt(getContentResolver(), 
    android.provider.Settings.System.ACCELEROMETER_ROTATION, 0); 
else //enable 
    android.provider.Settings.System.putInt(getContentResolver(), 
    android.provider.Settings.System.ACCELEROMETER_ROTATION, 1);