如果数字> 50,我想关闭飞机模式,我实现了这段代码(来自Toggle airplane mode in Android),但是当我执行了一个强制关闭时,任何人都可以帮忙吗?
if(num>50){
// read the airplane mode setting
boolean isEnabled = Settings.System.getInt(
getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) == 1;
// toggle airplane mode
Settings.System.putInt(
getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1);
// Post an intent to reload
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", !isEnabled);
sendBroadcast(intent);
}
o.k。我实现了预感,但我想改变if语句:
if num>=50 and airplane mode=on toggle it off
if airplane mode=off and num<50 toggle it on
有人可以帮我写新代码吗? (我是新手)
答案 0 :(得分:8)
您很可能未向WRITE_SETTING
添加AndroidManifest.xml
权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
另请注意代码:
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", !isEnabled);
sendBroadcast(intent);
不应该工作,因为根据ACTION_AIRPLANE_MODE_CHANGED
上的文档:
这是受保护的意图,只能由系统发送。
即使您目前可以在没有系统权限的情况下发送此广播,但在将来的Android版本中可能会发生变化。
答案 1 :(得分:3)
确保设置了在Android清单中切换飞行模式的权限。
答案 2 :(得分:1)
参考以下代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter intentFilter = new IntentFilter("android.intent.action.SERVICE_STATE");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("AirplaneMode", "Service state changed");
Toast.makeText(getApplicationContext(), "Service state changed", Toast.LENGTH_LONG).show();
boolean isEnabled = isAirplaneModeOn(context);
/* setSettings(context, isEnabled?1:0);
Intent intent_mode = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent_mode.putExtra("state", !isEnabled);
context.sendBroadcast(intent_mode);*/
if(isEnabled==true)
{ setSettings(context, isEnabled?1:0);
Toast.makeText(getApplicationContext(), "Flight mode on", Toast.LENGTH_LONG).show();
Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0);
Intent newIntent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
newIntent.putExtra("state", false);
sendBroadcast(newIntent);
}
else
{ setSettings(context, isEnabled?1:0);
Toast.makeText(getApplicationContext(), "Flight mode off", Toast.LENGTH_LONG).show();
}
}
@SuppressLint("NewApi")
private void setSettings(Context context, int value) {
// TODO Auto-generated method stub
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
Settings.System.putInt(
context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, value);
} else {
Settings.Global.putInt(
context.getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, value);
}
}
@SuppressLint("NewApi")
public boolean isAirplaneModeOn(Context context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
return Settings.System.getInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) != 0;
} else {
return Settings.Global.getInt(context.getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
}
}
};
registerReceiver(receiver, intentFilter);
}
//permissions needed:
// //