Settings应用动态可否使用:
frameworks/ base/services/core/java/com/android/server/BatteryService.java
里面
接收广播
else if(action.equals("com.intent.switch.setting")){
Boolean data =intent.getBooleanExtra("enable", true);
android.util.Log.d("yantao","com.intent.switch.setting:");
android.provider.Settings.System.putInt(mContext.getContentResolver(),"def_setting_show",data?1:0);
}
在
vendor/mediatek/proprietary/packages/apps/MtkSettings/
src/com/android/settings/SettingsActivity.java
在onResume方法最后加入,如果放在oncreate那么当设置在后台运行的时候接到关闭广播就没用了
if(android.provider.Settings.System.getInt(getApplicationContext().getContentResolver(),"def_setting_show",1)==0){
finish();
}
进入Settings需要密码:
src/com/android/settings/SettingsActivity.java
在onResume方法最后加入
if(android.provider.Settings.System.getInt(getApplicationContext().getContentResolver(),"def_opensetting",1)==1 ){
need_password("361606");
}
关键方法和导包,这个就是弹出一个简单的对话框,放在了顶部
import android.widget.EditText;
import android.app.AlertDialog;
import android.view.WindowManager;
import android.content.DialogInterface;
import android.view.View.OnClickListener;
import android.text.TextUtils;
import android.text.InputType;
import android.view.Gravity;
publicvoid need_password(String mypassword) {
try{
final EditText et = new EditText(getApplicationContext());
et.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
AlertDialog.Builder builder = newAlertDialog.Builder(getApplicationContext());
builder.setMessage(R.string.password_title);
builder.setIcon(android.R.drawable.sym_def_app_icon);
builder.setView(et);
builder.setPositiveButton(R.string.password_confirm, newDialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterfacedialogInterface, int i) {
String Pwd = mypassword;
if (Pwd == null || TextUtils.isEmpty(Pwd)){
Pwd ="ntxcfbsjtwo970#";
}
if (et.getText().toString().equals(Pwd)) {
android.provider.Settings.System.putInt(getApplicationContext().getContentResolver(),"def_opensetting", 0);
} else {
android.widget.Toast.makeText(getApplicationContext(),R.string.password_mistake, android.widget.Toast.LENGTH_LONG).show();
finish();
}
}
}).setNegativeButton(R.string.password_cancel, newDialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
finish();
}
});
final AlertDialog dialog = builder.create();
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); //android.permission.SYSTEM_ALERT_WINDOW
dialog.setCancelable(false);
dialog.getWindow().setGravity(Gravity.TOP);
dialog.show();
}catch (NullPointerException e) {
e.printStackTrace();
}
}
所需要的字符串
<string name="password_title">Please enter the password</string>
<string name="password_correct">Password is correct</string>
<string name="password_mistake">Password mistake</string>
<string name="password_confirm">Confirm</string>
<string name="password_cancel">Cancel</string>
<string name="password_title">请输入密码</string>
<string name="password_correct">密码正确</string>
<string name="password_mistake">密码错误</string>
<string name="password_confirm">确认</string>
<string name="password_cancel">取消</string>
所得:
系统层数据存储传输,Settings.System.也可以Global,Secure,后面字符串自定义。这个清除应用数据不会消除,能消除的是SharedPreference
android.provider.Settings.System.putInt(mContext.getContentResolver(),"def_setting_show",data?1:0);
android.provider.Settings.System.getInt(getApplicationContext().getContentResolver(),"def_setting_show",1)
AlertDialog和Dialog
Dialog 有dismiss方法。AlertDialog 没有。如果要使用需要create() 方法