网络设备管理相关相关

代码地址

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. 如何搭建SVN的客户端和使用

    1.下载安装TortoiseSVN 首先我们需要从官方网站下载TortoiseSVN客户端工具 可以选择32位和64位.也可以直接使用搜索引擎搜索TortoiseSVN 也会出现直接的下载方式.这里不 ...

  2. PowerShell-自定义函数(五)-参数互斥:ParameterSetName

    转自:https://blog.51cto.com/38088444/1920978 这一篇我们来讲一下参数的互斥,何谓参数互斥呢.用九胖风格的话说就是互怼,有我没你,有你没我. 例如我们为一个Pin ...

  3. [转帖]如何重置CentOS/RHEL 7中遗忘的根用户帐户密码

    如何重置CentOS/RHEL 7中遗忘的根用户帐户密码 https://www.cnblogs.com/swordxia/p/4389466.html 作者的blog质量很高呢 没看完 但是感觉 很 ...

  4. 三、调试IIS启动域名配置

    一.IIS配置启动VS以及域名 1.hosts配置 2.配置 注意: 1.Web和Api 端口在IIS都设置80即可,都可以同时运行不冲突,与vs的IIS express启动方式不同vs会指定不同的两 ...

  5. ibufds原语

    低压差分传送技术是基于低压差分信号(Low Volt-agc Differential signaling)的传送技术,从一个电路板系统内的高速信号传送到不同电路系统之间的快速数据传送都可以应用低压差 ...

  6. 进程间通信(队列、管道)、消费者模型和进程池(apply,apply_async,map)

    一.队列(先进先出) 进程间通信:IPC(Inter-Process Communication) 队列是使用管道和锁定实现,所以Queue是多进程安全的队列,使用Queue可以实现多进程之间的数据传 ...

  7. python doc格式转文本格式

    首先python是不能直接读写doc格式的文件的,这是python先天的缺陷.但是可以利用python-docx (0.8.6)库可以读取.docx文件或.txt文件,且一路畅通无阻. 这样的话,可以 ...

  8. ORACLE表数据误删除的恢复方法(提交事务也可以)

    ORACLE表数据误删除的恢复方法(提交事务也可以) 缓存加时间戳 开启行移动功能:ALTER TABLE tablename ENABLE row movement 把表还原到指定时间点:flash ...

  9. poj 3764 The xor-longest Path (01 Trie)

    链接:http://poj.org/problem?id=3764 题面: The xor-longest Path Time Limit: 2000MS   Memory Limit: 65536K ...

  10. 清北学堂Day2

    算数基本定理: 1.整数及其相关 2.唯一分解定理 对于任意的大于1的正整数N,N一定能够分解成有限个质数的乘积,即 其中P1<P2<...<Pk,a1,a2,...,ak>= ...