2011-01-07 103 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文件夹。 它确实有所作为,但现在它也导致严重的错误。 重新启动似乎取消了更改。

等待对此的反馈。