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

    }
}

 

















转载于:https://www.cnblogs.com/qiangge-python/p/10397895.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值