2011-01-07 120 views
2

讓我告訴你我的問題。我想改變我的屏幕分辨率。 我可以在應用程序中更改它,但它僅更改應用程序的屏幕 。我想設置系統的分辨率,所以 應用程序在前臺運行並不重要。我的設備分辨率設置爲1280 * 720 p。我可以做到1260 * 680嗎?如果需要在 Android源代碼中進行更改,我可以。告訴我在哪裏改變。等待 你的幫助。如何以編程方式更改屏幕分辨率?

+0

我遇到過[LCD密度](http://www.addictivetips.com/mobile/change-android-screen-resolution-with-lcd-density/),這是一個能夠完全實現這一點的應用程序。看到我是否可以找出它是如何做到的...... – fredley 2011-01-07 13:07:16

+0

我的問題不是密度問題;它是關於像素。我想改變顯示器的實際尺寸。 – sjor 2011-01-07 15:59:46

+1

然後用斯坦利刀! – fredley 2011-01-07 16:06:12

回答

0

搜索太有效的答案,但我有一個領先的解決方案: 警告實驗車的東西:

/* 
Requires android.permission.WRITE_SETTINGS 
and android.permission.WRITE_SECURE_SETTINGS, thus it requires the app to be a system app. 
*/ 
public void changeResolution(int x, int y){ 
    try { Class c = Class.forName("android.os.ServiceManager"); 
     try { Method method = c.getDeclaredMethod("checkService", String.class); 
      try { 
       IWindowManager mWindowManager = IWindowManager.Stub.asInterface((IBinder) method.invoke(null,Context.WINDOW_SERVICE)); 
       try { mWindowManager.setForcedDisplaySize(Display.DEFAULT_DISPLAY,x,y); 
       } catch (RemoteException e) {e.printStackTrace();} 
      } catch (IllegalAccessException e) {e.printStackTrace();} 
      catch (InvocationTargetException e) {e.printStackTrace();} 
     } catch (NoSuchMethodException e) {e.printStackTrace();} 
    } catch (ClassNotFoundException e) {e.printStackTrace();} 
} 

添加IWindowManager的降低AIDL版本到您的項目: /應用/src/main/aidl/android/view/IWindowManager.aidl

package android.view; 
interface IWindowManager 
{ 
    boolean startViewServer(int port); // Transaction #1 
    boolean stopViewServer();   // Transaction #2 
    boolean isViewServerRunning();  // Transaction #3 

    void setForcedDisplaySize(int displayId, int width, int height); 
    void clearForcedDisplaySize(int displayId); 
    void setForcedDisplayDensity(int displayId, int density); 
    void clearForcedDisplayDensity(int displayId); 
} 

該應用程序將需要在系統apps文件夾。 它確實有所作爲,但現在它也導致嚴重的錯誤。 重新啓動似乎取消了更改。

等待對此的反饋。