android - 如何使用 Android 代码更改分辨率(大小)和密度,Runtime.getRuntime().exec(...) 不起作用

标签 android screen-resolution system-setting

我想使用我的应用程序切换手机的分辨率和密度(不想使用 ADB)。

  • 当我使用 Runtime.getRuntime().exec("wm Density 220") 时,它不会 可以在 AVD 上工作,也可以在我的带有自定义 ROM 的 root 手机 Galaxy S8 上工作。
  • 当我使用Runtime.getRuntime().exec("wm size 1080x1920")时 更改了我的 Galaxy S8 上的分辨率,但未更改 AVD 上的分辨率。

我向我的所有设备授予了android.permission.WRITE_SECURE_SETTINGS

我已经尝试过的:

  1. 具有通过授予的 super 用户权限 (Runtime.getRuntime().exec("su"),我仍然无法更改密度 我的应用程序
  2. 我可以在任何设备上使用 adb 命令更改密度和尺寸(分辨率) 设备
  3. 我可以使用应用程序 Tasker 更改大小(分辨率)(这 应用程序有 android.permission.WRITE_SECURE_SETTINGS) 但它 不可能改变密度。 Tasker 中的变化密度为 仅适用于 root。
  4. 应用程序第二个屏幕(也有 android.permission.WRITE_SECURE_SETTINGS 并且可以下载 Github 上的源代码)可以改变我的 AVD 上的分辨率和密度 在我的 Galaxy S8 上无需 ROOT
  5. 通过应用程序终端仿真器,我可以更改大小和密度 仅具有ROOT权限
  6. 应用程序第二个屏幕,该网站也提到了它: http://nomone.com/2016/10/11/modifying-android-system-settings/ 使用代码“Settings.Global.putString”这应该可以解决我的问题, 但我不知道如何使用它。你能帮我一下吗?
//Part of the code used from http://nomone.com/ and is also used in app
//Second Screen, there they don't use Runtime.getRuntime.exec("...")
Settings.Global.putString(
mContext.getContentResolver(),
Settings.Global.DISPLAY_SIZE_FORCED, width + "," + height);

//this is part of the code with Runtime.getRuntime
Process process = Runtime.getRuntime().exec("wm density 220");
process.waitFor();

最佳答案

Settings.Global.DISPLAY_SIZE_FORCED 存在,但无法访问。您可以使用该字符串常量的实际值

enter image description here

所以代码是:

Settings.Global.putString(mContext.getContentResolver(),
                "display_size_forced", 
                 width + "," + height);

如果我通过终端使用 adb 命令授予 WRITE_SECURE_SETTINGS 权限,则此代码可以在我的 Android 9 设备上运行:

adb pm grant <package name> android.permission.WRITE_SECURE_SETTINGS 

我很惊讶,但屏幕分辨率无需 root 即可更改为新分辨率。我不知道如何在没有 adb 命令的情况下完成此操作。

编辑:这就是我调用此方法的方式:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Settings.Global.putString(getContentResolver(),
                "display_size_forced",
                width + "," + height);
    }
}

在 list 文件中添加权限:

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

关于android - 如何使用 Android 代码更改分辨率(大小)和密度,Runtime.getRuntime().exec(...) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57909439/

相关文章:

cocos2d-iphone - Cocos2d 和新 iPhone 5 的纵横比

linux - umask 设置存储在哪里?这可以应用于主目录而不是全局设置吗?

c - 如何将 Textwrangler 设置为 OSX 上 c 代码的默认编辑器?

Android textview中心字母

android - 以字符计数的计时器

android - java - 将文件发送到服务器时 Android HttpPost 黑屏

android - 可以在android中仅设置应用程序的默认英语

android - 无法启动 Activity ComponentInfo :java. lang.RuntimeException:您的内容必须有一个 ListView,其 id 属性为 'android.R.id.list'

ios - 如何为所有iPhone分辨率选择1 UIImage大小?

android - 针对不同设备应用分辨率