2

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

  • 当我使用Runtime.getRuntime().exec("wm density 220")它时,它不适用于 AVD,也不适用于带有自定义 ROM 的根深蒂固的手机 Galaxy S8。
  • 当我使用Runtime.getRuntime().exec("wm size 1080x1920")它时,它会更改我的 Galaxy S8 上的分辨率,但不会更改 AVD 上的分辨率。

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

我已经尝试过的:

  1. 通过授予超级用户权限 (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();
4

1 回答 1

2

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

在此处输入图像描述

所以代码是:

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);
    }
}

在清单文件中添加权限:

 <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
于 2019-09-18T12:53:09.127 回答