java.lang.SecurityException:权限拒绝:写入设置需要android.Permission.WRITE\u设置
这是我在5.0.0平台上构建airplan模式开/关的代码 下面是我的Activity.java源代码,请建议我需要在manifeat.xml中进行哪些更改才能访问权限java.lang.SecurityException:权限拒绝:写入设置需要android.Permission.WRITE\u设置,java,android,Java,Android,这是我在5.0.0平台上构建airplan模式开/关的代码 下面是我的Activity.java源代码,请建议我需要在manifeat.xml中进行哪些更改才能访问权限 package com.rjil.airplanemodeonoff; import android.content.Intent; import android.os.Build; import android.provider.Settings; import android.support.v7.app.AppCompa
package com.rjil.airplanemodeonoff;
import android.content.Intent;
import android.os.Build;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.ToggleButton;
public class MainActivity extends AppCompatActivity {
// constants
static final String STATUS_ON = "Airplane Mode: ON";
static final String STATUS_OFF = "Airplane Mode: OFF";
static final String TURN_ON = "Turn ON";
static final String TURN_OFF = "Turn OFF";
// controls
TextView TVAirplaneMode;
ToggleButton tBAirplane;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// load controls
TVAirplaneMode = (TextView)findViewById(R.id.TVAirplaneMode);
tBAirplane = (ToggleButton)findViewById(R.id.tBAirplane);
// update UI at first time loading
updateUI(isAirplaneMode());
// set click event for button
tBAirplane.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// check current state first
boolean state = isAirplaneMode();
// toggle the state
if (state) toggleAirplaneMode(0, state);
else toggleAirplaneMode(1, state);
// update UI to new state
updateUI(!state);
}
});
}
public void toggleAirplaneMode(int value, boolean state) {
// toggle airplane mode
//check the version
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { //if less than verson 4.2
Settings.System.putInt(
getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, value);
} else {
Settings.Global.putInt(
getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, value);
}
// broadcast an intent to inform
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", !state);
sendBroadcast(intent);
}
public void updateUI(boolean state) {
//set text according to state
if(state) {
TVAirplaneMode.setText(STATUS_ON);
tBAirplane.setText(TURN_OFF);
} else {
TVAirplaneMode.setText(STATUS_OFF);
tBAirplane.setText(TURN_ON);
}
}
public boolean isAirplaneMode() {
//check the version
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {//if less than verson 4.2
return Settings.System.getInt(getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) != 0;
} else {
return Settings.Global.getInt(getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
}
}
}
package com.rjil.airplanemodeonoff;
导入android.content.Intent;
导入android.os.Build;
导入android.provider.Settings;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.TextView;
导入android.widget.ToggleButton;
公共类MainActivity扩展了AppCompatActivity{
//常数
静态最终字符串状态_ON=“飞机模式:开”;
静态最终字符串状态\u OFF=“飞机模式:关闭”;
静态最终字符串打开\ u ON=“打开”;
静态最终字符串关闭\u OFF=“关闭”;
//控制
文本视图TVAirplaneMode;
切换按钮;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//负载控制
TVAirplaneMode=(TextView)findViewById(R.id.TVAirplaneMode);
TBPlanet=(切换按钮)findViewById(R.id.TBPlanet);
//第一次加载时更新UI
updateUI(isAirplaneMode());
//设置按钮的单击事件
TBAirline.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//首先检查当前状态
布尔状态=isAirplaneMode();
//切换状态
如果(状态)切换到GLEAIRPLANEMODE(0,状态);
else切换到IrPlaneMode(1,状态);
//将UI更新到新状态
更新(!state);
}
});
}
public void toggleAirplaneMode(int值,布尔状态){
//切换飞行模式
//检查版本
if(Build.VERSION.SDK_INT
写入安全设置不供第三方应用程序使用。无论您是在根版本还是生产版本上,系统/固件之外的任何应用程序都无法获得该权限
请检查答案写入安全设置不供第三方应用程序使用。无论您是在根版本还是生产版本上,系统/固件之外的任何应用程序都无法获得该权限
请检查答案您是否可以共享您的清单代码。
如果您进一步发现任何安全异常,它可能有助于查找您丢失的内容,并且您必须知道为什么我们需要在清单中保留权限声明。这是发生此类异常的另一种情况。请在此检查一次:您是否可以共享您的清单代码。
如果您进一步发现任何安全异常,它可能有助于查找您丢失的内容,并且您必须知道为什么我们需要在清单中保留权限声明。它们是发生此类异常的另一种情况,请在此检查一次: