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;
}
}
}
}
Google Android SDK开发范例大全笔记 二的更多相关文章
- Google Android SDK开发范例大全笔记 一
方法讲解 1 获取手机分辨率方法 DisplayMetrics private void getDiaplayMetrics() { DisplayMetrics dm = new DisplayMe ...
- Google Android SDK开发范例------------20141119
一.Edit和Checkbox完成对登陆密码的查看:添加Edit的setOnCheckedChageListener和对CheckBox的状态通过isCHecked判断 大体代码如下 CheckBox ...
- Android SDK 开发指南
Android SDK 开发指南 视频详解 以下视频是对融云 Android SDK 开发使用的详细讲解,您可以在阅读文档时配合学习. 更多视频教程如下: CSDN 融云 Android SDK ...
- Android SDK开发与使用的那些事儿
前言 最近由于工作需要,将应用里的部分功能独立了出来,封装成 SDK 提供给合作伙伴使用.由于经验不足,网上也没多少写这方面内容的文章,遇到了不少的坑,决定记录下来. SDK 其实,刚说到要写SDK也 ...
- Android 蓝牙开发(整理大全)
Android蓝牙开发 鉴于国内Android蓝牙开发的例子很少,以及蓝牙开发也比较少用到,所以找的资料不是很全. (一): 由于Android蓝牙的通信都需要用到UUID,如果由手机发起搜索,当搜索 ...
- 配置Android SDK 开发环境(转)
1. 下载Eclipse 在前面我们配置好了JDK环境后,就可以开始配置Android的集成开发环境了,官方Google推荐的集成开发环境为Eclipse,所以我们就以Eclipse作为集成开发环境. ...
- 基于虹软人证核验 2.0 Android SDK开发集成入门
一.功能介绍虹软人证核验 2.0 SDK(以下简称SDK)包含人脸检测.人脸跟踪.人证核验等能力,主要实现人证的1:1比对.其中暴露对外的功能方法有:active 引擎激活init 引擎初始化inpu ...
- GOOGLE VR SDK开发VR游戏,VR播放器之中的一个
近期一年来,VR虚拟现实和AR增强现实技术的宣传甚嚣尘上.事实上VR,AR技术非常早就有了,一直没有流行开来.不可否认价格是影响技术推广的最大壁垒. 谷歌对VR最大的贡献是提供了便宜的谷歌眼镜,依照G ...
- Android SDK开发常用工具的使用及其异常处理
由于以下操作都是命令操作,所以在执行以下操作之前确保环境变量 ANDROID_HOME 指向的是正确的Android SDK的路径: 一.启动Android SDK Manager: android ...
随机推荐
- mac用BootCamp装windows装完之后驱动问题
刚装完会有一个临时盘里面找到BootCamp文件夹然后运行setup.exe,装完即可.
- lr12 websocket
loadrunner12以上版本支持websocket,在http/html协议录制时可以直接录制websocket相关内容信息. 网上找的一个测试websocket网址:http://www.blu ...
- 关于Java面试
Java基础知识复习 1. 简单讲一下Java跨平台的原理 由于操作系统(Windows.Linux)支持的指令集,不是完全一致的.就会让我们程序在不同的操作系统上执行不同的代码.Java开发了不同操 ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
1. 框架代码 用 PyCharm 新建一个名为 SimplePaintApp 的项目,然后新建一个名为 simple_paint_app.py 的 Python 源文件, 在代码编辑器中,输入以下框 ...
- php如何解决中文乱码问题?
为什么会出现中文乱码? 很多新手朋友学习PHP的时候,发现程序中的中文在输出的时候会出现乱码的问题,那么为什么会出现这种乱码的情况呢?一般来说,乱码的出现有2种原因,一种是由于编码(charset) ...
- vue組件傳值及vuex的使用
https://blog.csdn.net/u011175079/article/details/79161029 https://blog.csdn.net/sisi_chen/article/de ...
- 使用ffmpeg视频切片并加密
想达到的目的:将一个mp4视频文件切割为多个ts片段,并在切割过程中对每一个片段使用 AES-128 加密,最后生成一个m3u8的视频索引文件: 电脑环境 Fedora,已经安装了最新的ffmpeg: ...
- 【JVM】JVM内存结构 VS Java内存模型 VS Java对象模型
原文:JVM内存结构 VS Java内存模型 VS Java对象模型 Java作为一种面向对象的,跨平台语言,其对象.内存等一直是比较难的知识点.而且很多概念的名称看起来又那么相似,很多人会傻傻分不清 ...
- Redis知识整理
Redis知识整理 转自:https://www.cnblogs.com/rjzheng/p/9096228.html 1.单线程模型 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返 ...
- crontab 误删恢复
某台服务器某账号的 crontab 任务被清空,原因不明.同时,该服务器上的 crontab 任务备份未开启.故思考如何恢复 crontab 任务. 经查,CentOS 系统的 crontab 任务的 ...