我想使用我的应用程序切换手机的分辨率和密度(不想使用 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
。
我已经尝试过的:
- 具有通过授予的 super 用户权限
(Runtime.getRuntime().exec("su")
,我仍然无法更改密度 我的应用程序 - 我可以在任何设备上使用 adb 命令更改密度和尺寸(分辨率) 设备
- 我可以使用应用程序 Tasker 更改大小(分辨率)(这 应用程序有 android.permission.WRITE_SECURE_SETTINGS) 但它 不可能改变密度。 Tasker 中的变化密度为 仅适用于 root。
- 应用程序第二个屏幕(也有 android.permission.WRITE_SECURE_SETTINGS 并且可以下载 Github 上的源代码)可以改变我的 AVD 上的分辨率和密度 在我的 Galaxy S8 上无需 ROOT
- 通过应用程序终端仿真器,我可以更改大小和密度 仅具有ROOT权限
- 应用程序第二个屏幕,该网站也提到了它: 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
存在,但无法访问。您可以使用该字符串常量的实际值
所以代码是:
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/