如何以编程方式更改屏幕分辨率?

时间:2011-01-07 12:54:35

标签: java android resolution

让我告诉你我的问题。我想改变我的屏幕分辨率。 我可以在应用程序中更改它,但它只更改应用程序 屏幕。我想设置系统的分辨率,因此它不重要 应用程序正在运行。我的设备的分辨率设置为1280 * 720 p。我可以制作1260 * 680吗?如果需要进行更改 Android源代码,我可以。告诉我在哪里改变。等待 你的帮助。

3 个答案:

答案 0 :(得分:2)

This thread on xda-developers应该让你走上正轨。

答案 1 :(得分: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();}
}

将减少的AIDL版本的IWindowManager添加到您的项目中: /app/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);
}

该应用需要位于系统应用文件夹中。 它确实做了一些事情,但现在它也导致了严重的错误。 重新启动似乎取消了更改。

等待对此的反馈。

答案 2 :(得分:-3)

如果您使用的是Windows并且知道如何使用JNI,Microsoft会提供C ++ Win32函数调用来执行此操作:ChangeDisplaySettingsEx()EnumDisplaySettings()