首页 新闻 会员 周边

CHANGE_CONFIGURATION权限获取方式

0
悬赏园豆:50 [待解决问题]

项目中通过ActivityCompat.requestPermissions(thisActivity, permissions, requestCode)方法发起权限请求,但是一直没有权限弹窗,且logcat报错:

Caused by: java.lang.SecurityException: Permission Denial: updateConfiguration() from pid=29692, uid=10219 requires android.permission.CHANGE_CONFIGURATION

如下是AndroidManifest.xml文件

网上说需要root设置或者设置为系统应用才能获取到CHANGE_CONFIGURATION,请问还有别的办法获取到CHANGE_CONFIGURATION权限吗
(备注:目前在做通过app内部设置来修改系统语言)

狮子对你微笑的主页 狮子对你微笑 | 初学一级 | 园豆:2
提问于:2023-02-14 17:50
< >
分享
所有回答(1)
0

根据之前提供的AndroidManifest.xml文件,我帮您修改了一下权限声明,删除了不必要的系统级权限声明,并对其中重复声明的权限进行了处理。同时,我将在代码部分提供一个权限请求的示例。

修改后的AndroidManifest.xml文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.jz.settings"
android:sharedUserId="android.uid.system">

<!-- 删除重复声明的权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>

<!-- 删除不必要的系统级权限声明 -->
<!-- <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" tools:ignore="ProtectedPermissions"/> -->
<!-- <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" tools:ignore="ProtectedPermissions"/> -->

<!-- 保留必要的uses-feature声明 -->
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

<!-- 其他内容... -->

</manifest>
示例权限请求代码:
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

public class MainActivity extends AppCompatActivity {

// 请求权限的请求码
private static final int REQUEST_CODE_PERMISSIONS = 100;

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

    // 检查权限是否已经被授予
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // 权限未被授予,请求权限
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_CODE_PERMISSIONS);
    } else {
        // 权限已经被授予,执行需要权限的操作
        // 在这里执行需要权限的代码
    }
}

@Override
public void onRequestPermissionsResult(int requestCode,
                                       @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == REQUEST_CODE_PERMISSIONS) {
        // 权限请求结果回调
        if (grantResults.length > 0 &&
                grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 权限已经被授予,执行需要权限的操作
            // 在这里执行需要权限的代码
        } else {
            // 权限被拒绝,可以做相应的处理
        }
    }
}

}
以上代码是一个示例,用于在Activity启动时检查并请求ACCESS_FINE_LOCATION权限。您可以根据实际需要修改请求的权限和相应的逻辑。

请确保修改后的AndroidManifest.xml文件和示例代码都正确并放置在正确的位置。如果问题仍然存在,请提供更多代码或错误信息,以便我能更准确地帮助您解决问题。

小九九呀 | 园豆:383 (菜鸟二级) | 2023-07-22 11:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册