栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android抢红包助手开发全攻略

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android抢红包助手开发全攻略

背景:新年之际,微信微博支付宝红包是到处飞,但是,自己的手速总是比别人慢一点最后导致红包没抢到,红包助手就应运而生。
需求:收到红包的时候进行提醒,然后跳转到红包的界面方便用户。
思路:获取“读取通知信息”权限,然后开启服务监控系统通知,判断如果是微信红包就进行提醒(声音),然后跳转到红包所在的地方。 
界面:

界面分为两部分,一部分是可以对App进行操作的,下面是一个可以滑动的界面,提示用户如何是软件正常工作,布局代码如下:





 

  

  

 

 

  

  

 

 

  

  
 

 

app打开的时候开启一个服务,编写一个NotificationListenerService的子类并实现onNotificationPosted和onNotificationRemoved方法,前面的方法会在收到通知的时候调用 

// 编写一个NotificationListenerService的子类并实现onNotificationPosted和onNotificationRemoved方法
// 这两个方法在从SDK版本21的时候开始变成了非抽象,不重写则不能兼容21以下设备
public class NotificationService extends NotificationListenerService {

 private KeyguardManager.KeyguardLock kl;

 @Override
 public void onNotificationPosted(StatusBarNotification sbn) {
  // 主界面设置的信息保存在SharedPreferences中,在这里进行获取
  SharedPreferences sharedPreferences = getSharedPreferences("userdata", MODE_PRIVATE);

  // 判断消息是否为微信红包
  if (sbn.getNotification().tickerText.toString().contains("[微信红包]") && sbn.getPackageName
    ().equals("com.tencent.mm")) {

   // 读取设置信息,判断是否该点亮屏幕并解开锁屏,解锁的原理是把锁屏关闭掉
   if (sharedPreferences.getBoolean("isUnlock",true)) {
    KeyguardManager km = (KeyguardManager) getSystemService(getApplicationContext()
      .KEYGUARD_SERVICE);
    kl = km.newKeyguardLock("unlock");

    // 把系统锁屏暂时关闭
    kl.disableKeyguard();
    PowerManager pm = (PowerManager) getSystemService(getApplicationContext()
      .POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP |
      PowerManager.SCREEN_DIM_WAKE_LOCK, "bright");
    wl.acquire();
    wl.release();
   }

   try {
    // 打开notification所对应的pendingintent
    sbn.getNotification().contentIntent.send();

   } catch (PendingIntent.CanceledException e) {
    e.printStackTrace();
   }

   // 判断是否该播放提示音
   if (sharedPreferences.getBoolean("isMusic",true)){
    MediaPlayer mediaPlayer = new MediaPlayer().create(this, R.raw.heihei);
    mediaPlayer.start();
   }

   // 这里监听一下系统广播,判断如果屏幕熄灭就把系统锁屏还原
   IntentFilter intentFilter = new IntentFilter();
   intentFilter.addAction("android.intent.action.SCREEN_OFF");
   ScreenOffReceiver screenOffReceiver = new ScreenOffReceiver();
   registerReceiver(screenOffReceiver, intentFilter);

  }

 }

 class ScreenOffReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
   if (kl != null) {
    // 还原锁屏
    kl.reenableKeyguard();
   }
  }
 }

 @Override
 public void onNotificationRemoved(StatusBarNotification sbn) {
  super.onNotificationRemoved(sbn);
 }
} 

主的activity,注释在代码中了,就不详细说了 

public class MainActivity extends AppCompatActivity implements CompoundButton
  .OnCheckedChangeListener, View.OnClickListener,SeekBar.onSeekBarChangeListener {

 private LinearLayout root;
 private CheckBox isMusic;
 private CheckBox isUnlock;
 private SharedPreferences.Editor editor;
 private SharedPreferences sharedPreferences;
 private Button setPermision;
 private SeekBar seekBar;
 private AudioManager audioManager;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  // 获取控件实例
  root = (LinearLayout) findViewById(R.id.root);
  isMusic = (CheckBox) findViewById(R.id.isMusic);
  isUnlock = (CheckBox) findViewById(R.id.isUnlock);
  setPermision = (Button) findViewById(R.id.setPermision);
  seekBar = (SeekBar) findViewById(R.id.seekbar);

  // 注册监听
  isMusic.setonCheckedChangeListener(this);
  isUnlock.setonCheckedChangeListener(this);
  setPermision.setonClickListener(this);
  seekBar.setonSeekBarChangeListener(this);

  // 读取设置信息
  sharedPreferences = getSharedPreferences("userdata", MODE_PRIVATE);
  editor = sharedPreferences.edit();
  boolean music = sharedPreferences.getBoolean("isMusic", true);
  boolean unlock = sharedPreferences.getBoolean("isUnlock", true);
  isMusic.setChecked(music);
  isUnlock.setChecked(unlock);

  // 获得Audiomanager,控制系统音量
  audioManager = (AudioManager) getSystemService(this.AUDIO_SERVICE);
  seekBar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
  seekBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));

  // 监听系统媒体音量改变,并改变界面上的Seekbar的进度
  IntentFilter intentFilter = new IntentFilter();
  intentFilter.addAction("android.media.VOLUME_CHANGED_ACTION");
  VolumReceiver receiver = new VolumReceiver();
  registerReceiver(receiver,intentFilter);

  // 开启服务
  Intent intent = new Intent(MainActivity.this, NotificationService.class);
  startService(intent);
 }

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  // 判断返回键点击,提示用户是否确认退出
  if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
   Snackbar snackbar = Snackbar.make(root, "退出软件", Snackbar.LENGTH_LONG)
     .setAction("确认", new View.onClickListener() {
      @Override
      public void onClick(View v) {
MainActivity.this.finish();
      }
     });
   snackbar.show();
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }

 @Override
 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  // checkbox的点击监听
  switch (buttonView.getId()) {
   case R.id.isMusic:
    editor.putBoolean("isMusic", isChecked);
    editor.commit();
    break;
   case R.id.isUnlock:
    editor.putBoolean("isUnlock", isChecked);
    editor.commit();
    break;
  }

 }

 @Override
 public void onClick(View v) {
  switch (v.getId()){
   case R.id.setPermision:
    // 打开系统里面的服务,方便用户直接赋予权限
    Intent intent = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
    startActivity(intent);
    break;
  }

 }

 @Override
 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
 }

 @Override
 public void onStartTrackingTouch(SeekBar seekBar) {
 }

 @Override
 public void onStopTrackingTouch(SeekBar seekBar) {
  // seekbar的监听,滑动停止就修改系统媒体音量
  audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,seekBar.getProgress(),0);
 }

 // 音量广播接收
 class VolumReceiver extends BroadcastReceiver{
  @Override
  public void onReceive(Context context, Intent intent) {
   seekBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
  }
 }
} 

Mainfest 




 
 
 

 
  
   
    

    
   
  
  
   
    
   
  
 

 

gradle添加依赖,因为用了Snackbar 

dependencies {
 compile fileTree(dir: 'libs', include: ['*.jar'])
 testCompile 'junit:junit:4.12'
 compile 'com.android.support:appcompat-v7:23.1.1'
 compile 'com.android.support:design:23.1.1'
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/162190.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号