【Android】自制静音App,解决他人手机外放问题

契源

看到一个粉丝留言,吐槽舍友深夜手机外放,打扰别人休息,想设计一款软件阻止舍友行径。于是我就来简单设计一下。

在这里插入图片描述

需求实现分析

实际上,我之前有篇博文提到过一个类似的Android APP,主要功能是将手机声音强制开到最大,然后播放背景音乐。再之前的那个基础上,删除音乐文件,然后将手机声音调小就满足了此需求。

效果演示

这个软件很快就做出来了,效果演示如下:

轻轻一键,世界清净了

软件下载地址:https://www.pgyer.com/ikCz
软件源码:https://github.com/zstar1003/Mute

具体功能分析

软件本身比较简单,主要包含下面几个部分

音量调节

软件核心功能是设置音量为0,这在Android中,可以使用AudioManager这个类中的相关API,核心代码:

am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
//启动线程循环设置音量
new Thread() {
	@TargetApi(Build.VERSION_CODES.P)
          public void run() {
		//这儿是耗时操作,完成之后更新UI;
		while(true){
                  final int m = am.getStreamMinVolume(AudioManager.STREAM_MUSIC);  //设置静音
			runOnUiThread(new Runnable(){
					@Override
					public void run() {
						//更新UI
						am.setStreamVolume(AudioManager.STREAM_MUSIC, m, AudioManager.FLAG_PLAY_SOUND);
					}
				});
			try {
				sleep(500);
			} catch (InterruptedException e) {}
		}
	}
}.start();

监听按钮

此次功能是监听返回主页,调节音量按钮,监听到之后弹出气泡框提示

核心代码:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
	if(keyCode==KeyEvent.KEYCODE_HOME || keyCode == KeyEvent.KEYCODE_BACK || keyCode== KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP){
		Toast toast = Toast.makeText(this,null,Toast.LENGTH_LONG);
		toast.setText("别试了,没用的!");
           toast.show();
		return true;
	}
	return super.onKeyDown(keyCode, event);
}

按钮点击

在主页上加了个功能,点击按钮切换图片,并且达到指定次数后,退出软件

//按钮点击事件
final Button bt = findViewById(R.id.activitymainButton);
final ImageView kt = findViewById(R.id.kt);
bt.setOnClickListener(new View.OnClickListener(){
		@Override
		public void onClick(View p1) {
			if(num != 0){
				num--;
				bt.setText("对不起,我错了\n"+"再点"+num+"下就关闭程序");
			}else{
				finish();
			}
                  if(num % 2 == 0){
                      kt.setImageResource(R.drawable.xu1);
                  }else{
                      kt.setImageResource(R.drawable.xu2);
                  }
              }
	});

隐藏标题栏/修改通知栏颜色

下面再做点小优化,让UI看起来更舒适

隐藏标题栏:

requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);

修改通知栏颜色:

Window window = this.getWindow();
window.setStatusBarColor(0xFFcfde29);

按钮美化

按钮美化,在drawable中,新建一个按钮皮肤xml文件,为按钮点击和非点击状态设置不同颜色

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="#64AFFA"/>
            <corners android:radius="10dp"/>
            <padding
                android:bottom="2dp"
                android:left="33dp"
                android:right="33dp"
                android:top="2dp">
            </padding>
        </shape>
    </item>
    <item android:state_pressed="false">
        <shape>
            <solid android:color="#99CCFF"/>
            <corners android:radius="10dp"/>
            <padding
                android:bottom="2dp"
                android:left="33dp"
                android:right="33dp"
                android:top="2dp">
            </padding>
        </shape>
    </item>
</selector>

拓展思考

开发过程中,我发现部分手机已经做的相当“智能”,即便监听阻止返回按键,手机还是可以轻易调出清除进程等方式来退出软件。

我试图想把软件做的更“流氓”一些,想到了以下思路:

  • 加入一个系统级服务,不停地设置音量静音
  • 加入一个系统级服务,监听Activity是否被Kill,若被Kill则重启
  • 加入一个系统级服务,监听开机广播,开机自启软件
  • 在软件界面中增加更多手势的识别,以防止用户呼出软件管理界面

不过经过一番调研,以上思路均无办法实现,很多能找到的方法基本都不适配Android10以后的版本,在手机厂商的不断迭代中,除非将软件加入到系统的白名单,否则还是会被用户所管理。

最后总结,此软件仅供娱乐,解决舍友手机外放问题靠软件手段无法从根源上解决,在此呼吁读者在非单人空间切勿手机外放,影响他人生活休息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zstar-_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值