网络设备管理相关相关

代码地址

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;
}
} }
}
												

Google Android SDK开发范例大全笔记 二的更多相关文章

  1. Google Android SDK开发范例大全笔记 一

    方法讲解 1 获取手机分辨率方法 DisplayMetrics private void getDiaplayMetrics() { DisplayMetrics dm = new DisplayMe ...

  2. Google Android SDK开发范例------------20141119

    一.Edit和Checkbox完成对登陆密码的查看:添加Edit的setOnCheckedChageListener和对CheckBox的状态通过isCHecked判断 大体代码如下 CheckBox ...

  3. Android SDK 开发指南

    Android SDK 开发指南 视频详解 以下视频是对融云 Android SDK 开发使用的详细讲解,您可以在阅读文档时配合学习.   更多视频教程如下: CSDN 融云 Android SDK ...

  4. Android SDK开发与使用的那些事儿

    前言 最近由于工作需要,将应用里的部分功能独立了出来,封装成 SDK 提供给合作伙伴使用.由于经验不足,网上也没多少写这方面内容的文章,遇到了不少的坑,决定记录下来. SDK 其实,刚说到要写SDK也 ...

  5. Android 蓝牙开发(整理大全)

    Android蓝牙开发 鉴于国内Android蓝牙开发的例子很少,以及蓝牙开发也比较少用到,所以找的资料不是很全. (一): 由于Android蓝牙的通信都需要用到UUID,如果由手机发起搜索,当搜索 ...

  6. 配置Android SDK 开发环境(转)

    1. 下载Eclipse 在前面我们配置好了JDK环境后,就可以开始配置Android的集成开发环境了,官方Google推荐的集成开发环境为Eclipse,所以我们就以Eclipse作为集成开发环境. ...

  7. 基于虹软人证核验 2.0 Android SDK开发集成入门

    一.功能介绍虹软人证核验 2.0 SDK(以下简称SDK)包含人脸检测.人脸跟踪.人证核验等能力,主要实现人证的1:1比对.其中暴露对外的功能方法有:active 引擎激活init 引擎初始化inpu ...

  8. GOOGLE VR SDK开发VR游戏,VR播放器之中的一个

    近期一年来,VR虚拟现实和AR增强现实技术的宣传甚嚣尘上.事实上VR,AR技术非常早就有了,一直没有流行开来.不可否认价格是影响技术推广的最大壁垒. 谷歌对VR最大的贡献是提供了便宜的谷歌眼镜,依照G ...

  9. Android SDK开发常用工具的使用及其异常处理

    由于以下操作都是命令操作,所以在执行以下操作之前确保环境变量 ANDROID_HOME 指向的是正确的Android SDK的路径: 一.启动Android SDK Manager: android ...

随机推荐

  1. Python进阶3---python类型注解、functools

    函数定义的弊端 函数注解Function Annotations 业务应用 inspect模块 #示例 import inspect def add(x,y:int,*args,**kwargs) - ...

  2. BEX5下新建任务到待办任务

    List<OrgUnit> list = new ArrayList<OrgUnit>(); // 1.查询出执行者 String sql = "select t.f ...

  3. kafka相关问题集锦

    参考地址:https://blog.csdn.net/gao23191879/article/details/80815078?utm_source=blogxgwz5 你在写java 版的 kafk ...

  4. HashMap底层实现原理

    HashMap底层实现 HashMap底层数据结构如下图,HashMap由“hash函数+数组+单链表”3个要素构成 通过写一个迷你版的HashMap来深刻理解 MyMap接口,定义一个接口,对外暴露 ...

  5. Python 面向对象高阶-----metaclass

    Python 面向对象高阶-----metaclass 前言 类也是对象,既然类是对象,那就自然是某个东西的实例化,这个东西就是type 首先看下type是怎么回事 type type最常用的方法就是 ...

  6. re 模块 分组特别说明

    关于分组优先以及 " | " 的细致练习 from django.test import TestCase import re # Create your tests here. ...

  7. 在mobaxterm内连接deb使用lrzsz进行文件传输

    lrzsz随手传文件还是挺方便的. 1.apt install lrzsz 2.rz 3.右键 或者control右键选择 send file useing Z-modem 选择文件上传 接收同理

  8. golang 代码笔记

    锁 互斥锁,g0获取锁,到释放锁之间,g1去获取锁失败,阻塞,g0释放锁之后g1获取锁成功,gn阻塞. package main import ( "fmt" "sync ...

  9. Logstash替换字符串,解析json数据,修改数据类型,获取日志时间

    在某些情况下,有些日志文本文件类json,但它的是单引号,具体格式如下,我们需要根据下列日志数据,获取正确的字段和字段类型 {'usdCnyRate': '6.728', 'futureIndex': ...

  10. Js中常用知识点(typeof、instanceof、动态属性、变量作用域)

    1.Js中各类型的常量表示形式:Number:number     String:string    Object:objec 2.typeof运算符在Js中的使用:用于判断某一对象是何种类型,返回值 ...