我必须在我的应用中停用 AIRPLANE MODE
和DATE TIME SETTINGS
,因为我使用了这些意图过滤器但是none
他们works
对我来说
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.settings.AIRPLANE_MODE_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.settings.DATE_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
但早些时候我使用Settings
以下
intent-filter
<intent-filter >
<action android:name="android.settings.SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
答案 0 :(得分:4)
对于版本4.2及更高版本,您无法以编程方式控制飞行模式。
只有当用户拥有有根设备时,您才能这样做。
如API DOC中所述:
“Settings.System定义的某些设备设置现在为read-only
。如果您的应用尝试将更改设置为已移至Settings.Global
的Settings.System中定义的设置,则写入操作在Android 4.2
及更高版本上运行时会无声地失败。
即使您android:targetSdkVersion
和android:minSdkVersion
的值低于17
,您的应用也无法修改在{{1}上运行时已移至Settings.Global
的设置而且更高。“
答案 1 :(得分:2)
TLDR:不要这样做。
想想如果用户无法启用飞行模式会发生什么,如果他们想要/应该 无法从您的应用更改重要的系统设置。
我建议:
修改强> 它看起来像这样:
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void checkAirplaneMode() {
int mode;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
Log.v(TAG, "work with new api.");
mode = Settings.Global.getInt(getActivity().getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0);
} else {
Log.v(TAG, "work with old api.");
mode = Settings.System.getInt(getActivity().getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0);
}
Log.v(TAG, "airplane mode: " + mode);
if(mode == 1 /* airplane mode is on */) {
new AlertDialog.Builder(getActivity()).setTitle("Sorry!")
.setMessage("This app doesn't work with Airplane mode.\n"
+ "Please disable Airplane mode.\n")
.setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));
getActivity().finish();
}
})
.setNegativeButton("Close app", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getActivity().finish();
}
})
.show();
}
}
这里有一点。
Build.VERSION.SDK_INT
以使用Settings.Global
获取更新的设备。飞机模式移至此处。 startActivity(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));