Google Android SDK开发范例大全笔记 二

网络设备管理相关相关

代码地址

1 WifiManager LocationManager分别控制 wifi及GPS

WifiManager 判断网络状态 ,LocationManager判断定位状态,ConnectivityManager 网络信息

public class Wifi_LocationActivity extends AppCompatActivity {

    private TextView tv_wifiStatus, tv_gpsStatus;
private Button btn_startWifi, btn_startGps, btn_startGame; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wifi__location);
findViews();
setListener();
checkWifiAndGpsStatus();
} private void findViews() {
tv_wifiStatus = findViewById(R.id.tv_wifistatus);
tv_gpsStatus = findViewById(R.id.tv_gpsstatus);
btn_startWifi = findViewById(R.id.btn_startwifi);
btn_startGps = findViewById(R.id.btn_startGPS);
btn_startGame = findViewById(R.id.btn_startGame);
} private void setListener() {
btn_startWifi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
if (android.os.Build.VERSION.SDK_INT <= 11) {
intent.setClassName("com.android.settings", "com.android.settings.Settings$WifiSettingsActivity");
} else {
intent.setClassName("com.android.settings", "com.android.settings.wifi.WifiSettings");
}
startActivityForResult(intent, 0);
} });
btn_startGps.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, 0);
}
});
btn_startGame.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new AlertDialog.Builder(Wifi_LocationActivity.this)
.setTitle("准备")
.setMessage("准备进入游戏")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
showWifiType();
}
}).show();
}
});
} private void checkWifiAndGpsStatus() {
boolean result = true;
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
if (!wifiManager.isWifiEnabled() && wifiManager.getWifiState() != WifiManager.WIFI_STATE_ENABLING) {
tv_wifiStatus.setText("未启动");
result = false;
} else {
tv_wifiStatus.setText("已启动");
} if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
|| !locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
tv_gpsStatus.setText("未启动");
result = false;
} else {
tv_gpsStatus.setText("已启动");
}
if (result) {
btn_startGame.setEnabled(true);
} else {
btn_startGame.setEnabled(false);
}
} @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
checkWifiAndGpsStatus();
} private void showWifiType() {
ConnectivityManager cm = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm.getActiveNetworkInfo() == null) {
tv_wifiStatus.setText("null");
} else {
if (cm.getActiveNetworkInfo().isAvailable()) {
tv_wifiStatus.setText(":" + cm.getActiveNetworkInfo().getTypeName());
} else {
tv_wifiStatus.setText("null");
}
}
} }

权限

     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

2.设备管理 DevicePolicyManager

参照地址 https://blog.csdn.net/black_bird_cn/article/details/79735794

SaveDeviceActivity 打开和关闭管理员权限
让当前应用带管理员权限
public class SaveDeviceActivity extends Activity{

    private DevicePolicyManager myDPM;
private ComponentName myDeviceAdminReceiver;
private Button btn_startDevice;
private Button btn_setDevice;
private Button btn_stopDevice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_save_device);
myDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
myDeviceAdminReceiver = new ComponentName(this,MyDeviceAdminReceiver.class);
findViews();
setListener();
}
private void findViews()
{
btn_startDevice = findViewById(R.id.btn_startDevice);
btn_setDevice = findViewById(R.id.btn_setDevice);
btn_stopDevice = findViewById(R.id.btn_stopDevice);
} private void setListener()
{
btn_startDevice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("panzqww","start Device+++++++++++++++++++++");
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,myDeviceAdminReceiver);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"提别说明:此画面为启动设备管理画面");
startActivityForResult(intent,1);
}
});
btn_setDevice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("panzqww","set Device+++++++++++++++++++++");
Intent intent2 = new Intent();
intent2.setClass(SaveDeviceActivity.this,DeviceSettingActivity.class);
intent2.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,myDeviceAdminReceiver);
startActivity(intent2);
}
});
btn_stopDevice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("panzqww","stop Device+++++++++++++++++++++");
myDPM.removeActiveAdmin(myDeviceAdminReceiver);
updateButtonStatus();
}
});
} private void updateButtonStatus() {
boolean active = myDPM.isAdminActive(myDeviceAdminReceiver);
if (active)
{
btn_startDevice.setEnabled(false);
btn_setDevice.setEnabled(true);
btn_stopDevice.setEnabled(true);
}else{
btn_startDevice.setEnabled(true);
btn_setDevice.setEnabled(false);
btn_stopDevice.setEnabled(false);
}
} @Override
protected void onResume() {
super.onResume();
updateButtonStatus();
} @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (resultCode)
{
case RESULT_OK:
Toast.makeText(SaveDeviceActivity.this,"启动成功",Toast.LENGTH_LONG).show();
updateButtonStatus();
break;
default:
Toast.makeText(SaveDeviceActivity.this,"取消启动",Toast.LENGTH_LONG).show();
updateButtonStatus();
break;
}
} }
MyDeviceAdminReceiver
public class MyDeviceAdminReceiver extends DeviceAdminReceiver {
private void showToast(Context context,CharSequence msg)
{
Toast.makeText(context,msg,Toast.LENGTH_LONG).show();
} @Override
public void onEnabled(Context context, Intent intent) {
super.onEnabled(context, intent);
showToast(context,"DeviceAdminReceiver 启动");
} @Override
public CharSequence onDisableRequested(Context context, Intent intent) {
return "DeviceAdminReceiver 是否确定停用";
} @Override
public void onDisabled(Context context, Intent intent) {
super.onDisabled(context, intent);
showToast(context,"DeviceAdminReceiver 停用");
} @Override
public void onPasswordChanged(Context context, Intent intent, UserHandle user) {
super.onPasswordChanged(context, intent, user);
showToast(context,"DeviceAdminReceiver 修改密码");
} @Override
public void onPasswordFailed(Context context, Intent intent, UserHandle user) {
super.onPasswordFailed(context, intent, user);
showToast(context,"DeviceAdminReceiver 密码错误");
} @Override
public void onPasswordSucceeded(Context context, Intent intent, UserHandle user) {
super.onPasswordSucceeded(context, intent, user);
showToast(context,"DeviceAdminReceiver 密码正确");
}
}

AndroidManifest.xml中配置广播接收器

<receiver
android:name=".MyDeviceAdminReceiver"
android:description="@string/app_name"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin" /> <intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>

新建xml目录并新建device_admin.xml文件

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
<expire-password />
<encrypted-storage />
<disable-camera />
</uses-policies>
</device-admin>
DeviceSettingActivity 实现DevicePolicyManager的一些具体操作
public class DeviceSettingActivity extends Activity implements View.OnClickListener{
private DevicePolicyManager myDPM;
private Button btn_lock,btn_resetPassword,btn_wipeData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_device_setting);
myDPM=(DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
findViews();
}
private void findViews()
{
btn_lock = findViewById(R.id.btn_lock);
btn_lock.setOnClickListener(this);
btn_resetPassword = findViewById(R.id.btn_resetPassword);
btn_resetPassword.setOnClickListener(this);
btn_wipeData = findViewById(R.id.btn_wipeData);
btn_wipeData.setOnClickListener(this);
} @Override
public void onClick(View view) {
switch (view.getId())
{
case R.id.btn_lock:
myDPM.lockNow();
break;
case R.id.btn_resetPassword:
/**
*当设置此flag时,resetPassword在锁屏状态下失去重置作用,即任何admin用户都必须先进入系统才能重置密码
public static final int RESET_PASSWORD_REQUIRE_ENTRY = 0x0001;
使用此flag必须是device owner,可在不需要密码的情况下启动设备,暂不清楚用法
public static final int RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT = 0x0002;
设为0表示可任意重置密码(无论是否解锁)
public static final int PASSWORD_QUALITY_UNSPECIFIED = 0;
*/
myDPM.resetPassword("",0);//如果要清除锁屏密码直接传入空字符。可能会报错,需要重启一下手机就可以
break;
case R.id.btn_wipeData:
/**
//双清存储数据(包括外置sd卡),wipeData后重启
public static final int WIPE_EXTERNAL_STORAGE = 0x0001;
//恢复出厂设置,使用此flag必须是device owner,否则将抛出SecurityException异常,而setDeviceOwner为隐藏API
public static final int WIPE_RESET_PROTECTION_DATA = 0x0002;
*/
myDPM.wipeData(1);
break;
}
}
}

3.执行adb shell的命令

public class ADBShellActivity extends AppCompatActivity {

    TextView tv_content;
EditText et_command;
Button btn_startShell;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_adbshell);
findViews();
setListener();
}
private void findViews()
{
tv_content = findViewById(R.id.tv_content);
et_command =findViewById(R.id.et_command);
btn_startShell = findViewById(R.id.btn_startShell);
et_command.setText("pm list package");
}
private void setListener()
{
btn_startShell.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String command = et_command.getText().toString();
if (!TextUtils.isEmpty(command))
{
tv_content.setText(command+":");
runAdbShellCommand(command);
}
}
});
}
private void runAdbShellCommand(String command)
{
Log.d("panzqww",command);
Process process = null;
try {
process = Runtime.getRuntime().exec(command);
StringBuilder output = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while((line = reader.readLine())!=null)
{
Log.d("panzqww","line = "+line);
output.append(line).append("\n");
}
reader.close();
int status = process.waitFor();
Log.d("panzqww","status" +status);
tv_content.setText(output.toString());
} catch (Exception e) {
e.printStackTrace();
tv_content.setText(command+":"+"权限不足");
}finally {
if (process != null)
{
process.destroy();
process = null;
}
} }
}
上一篇:linux学习第一天 (Linux就该这么学) 找到一本不错的Linux电子书,附《Linux就该这么学》章节目录


下一篇:Java多线程基础知识总结