Android如何在App中启动系统闹钟

由于不同Android手机厂商提供的系统闹钟包名都不一致,所以只能通过过滤当前手机所有的应用,以确定闹钟应用的包名,进而启动它。

这里采用的过滤规则是:系统应用 && 应用的PackageName包含"widget" 和 "clock"

1、布局文件  activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context=".MainActivity"> 

  <Button
    android:id="@+id/start_system_clock_bt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="启动系统闹钟" /> 

</RelativeLayout> 

2、MainActivity.java

package com.demo.cxc.systemclocksample; 

import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; 

import java.util.ArrayList;
import java.util.List; 

public class MainActivity extends AppCompatActivity {
  private Button startSystemClockButton = null; 

  private List<PackageInfo> allPackageInfos;//系统安装所有软件
  private List<PackageInfo> clockPackageInfos;//系统时钟软件 

  private static final int HANDLE_MESSAGE_KEY = 1001;
  private Handler myHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      super.handleMessage(msg);
      if (msg != null) {
        switch (msg.what) {
          case HANDLE_MESSAGE_KEY:
            Toast.makeText(getApplicationContext(), "--app scan over--", Toast.LENGTH_SHORT).show();
            Log.d("CXC", "--app scan over--");
            break; 

          default:
            break; 

        } 

      } 

    }
  }; 

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

    //begin scan installed applications;
    //// TODO: 16/1/15
    new Thread(new ScanInstalledAppsRunnable()).start();
  } 

  private void initViews() {
    startSystemClockButton = (Button) findViewById(R.id.start_system_clock_bt);
    startSystemClockButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //// TODO: 16/1/15
        startSystemClock();
      }
    });
  } 

  private void initData() {
    clockPackageInfos = new ArrayList<PackageInfo>();
  } 

  class ScanInstalledAppsRunnable implements Runnable {
    @Override
    public void run() {
      allPackageInfos = getPackageManager()
          .getInstalledPackages(0); 

      if (allPackageInfos == null || allPackageInfos.size() == 0) {
        //// TODO: 16/1/15 todo nothing
        return;
      } 

      if (clockPackageInfos == null) {
        clockPackageInfos = new ArrayList<PackageInfo>();
      } 

      PackageInfo tempPackageInfo = null;
      for (int i = 0; i < allPackageInfos.size(); i++) {
        tempPackageInfo = allPackageInfos.get(i);
        if (tempPackageInfo != null) { 

          if (isSystemApplication(tempPackageInfo.applicationInfo) &&
              isClockApplication(tempPackageInfo.packageName)) {
            clockPackageInfos.add(tempPackageInfo);
          } 

        }
      } 

      Message message = myHandler.obtainMessage();
      message.what = MainActivity.HANDLE_MESSAGE_KEY;
      myHandler.sendMessage(message);
    }
  } 

  private boolean isSystemApplication(ApplicationInfo applicationInfo) {
    boolean isSystemApp = false;
    if (applicationInfo != null) {
      if ((applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0
          || (applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
        isSystemApp = true; 

      }
    }
    return isSystemApp;
  } 

  private boolean isClockApplication(String packageName) {
    boolean isClockApp = false;
    if (packageName != null && packageName.contains("clock") && !packageName.contains("widget")) {
      isClockApp = true;
    }
    return isClockApp;
  } 

  private void startSystemClock() {
    if (clockPackageInfos == null || clockPackageInfos.size() == 0) {
      Toast.makeText(getApplicationContext(), "--启动系统闹钟失败1--", Toast.LENGTH_SHORT).show();
      return;
    } 

    Log.d("CXC", "---clock package size :" + clockPackageInfos.size());
    Log.d("CXC", "---clock package [0] :" + clockPackageInfos.get(0).packageName);
    try {
      Intent startSysClockIntent = getPackageManager().getLaunchIntentForPackage(clockPackageInfos.get(0).packageName);
      startActivity(startSysClockIntent);
    } catch (Exception e) {
      Toast.makeText(getApplicationContext(), "--启动系统闹钟失败2--", Toast.LENGTH_SHORT).show();
    } 

  } 

} 

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

您可能感兴趣的文章:

  • Android手机闹钟服务AlarmManagerk开发案例
  • 简单实现Android闹钟程序 附源码
  • Android闹钟设置的解决方案
  • Android编程闹钟设置方法详解
  • Android自定义View 实现闹钟唤起播放闹钟铃声功能
  • 简单实现Android闹钟功能
  • Android闹钟机制实现定时任务功能
  • Android仿正点闹钟时间齿轮滑动效果
  • Android使用CountDownTimer类实现倒计时闹钟
  • android用闹钟定时做http请求推送的解决方案
(0)

相关推荐

  • Android使用CountDownTimer类实现倒计时闹钟

    下面使用CountDownTimer类实现倒计时小闹钟,CountDownTimer类其实很简单,一般只需重写其onFinish和onTick方法就可以实现倒计时小闹钟,代码如下: MainActivity: package com.home.brewclock; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.os.CountDownT

  • android用闹钟定时做http请求推送的解决方案

    设计思路 如果在开发当中需要做push接入,而产品又要求不允许用第三方sdk(百度push,友盟push),而且又没有网络编程的经验,这个时候怎么办?这里就给大家分享下用http请求解决这个问题. 大体的设计思路是,写一个service(为了保证长时间运行不被kill,就将其定义到另外的进程当中去),在这个service里面启动闹钟,每隔一段时间(这个时间可以自己定义)去请求服务器,如果有新的push消息,就通知给用户. 具体实现 貌似很简单定义一个闹钟不断轮循请求服务器一句话,却在实际开发中要

  • Android闹钟机制实现定时任务功能

    Android的闹钟实现机制, 需要调用AlarmManager.set()将闹铃时间记录到系统中,当闹铃时间到后,系统会给应用程序发送广播,我们只需要去注册广播接收器就可以了. 本文分三部分讲解如何实现闹钟: 目录: 1. 设置闹铃时间; 2. 接收闹铃事件广播; 3. 重开机后重新计算并设置闹铃时间; 1. 设置闹铃时间(毫秒) private void setAlarmTime(Context context, long triggerAtMillis) { AlarmManager am

  • Android编程闹钟设置方法详解

    本文实例讲述了Android编程闹钟设置方法.分享给大家供大家参考,具体如下: 闹钟在生活中最常见了,在Android中可以通过AlarmManager来实现闹钟,AlarmManager类专门用来设置在某个指定的时间去完成指定的时间.AlarmManager就会通过onReceive()方法去执行这些事件,就算系统处于待机状态,同样不会影响运行.可以通过Context.getSystemService方法来获得该服务.AlarmManager中的方法不少,如下: 方法 说明 Cancel 取消

  • Android手机闹钟服务AlarmManagerk开发案例

    AlarmManager通常用来开发手机闹钟,并且它是一个全局定时器,可在指定时间或指定周期启动其他组件(包括Activity,Service,BroadcastReceiver) 获取AlarmManager对象: getSystemService(Service.ALARM_SERVICE) 调用其中的方式设置定时器启动指定组件: set(int type,long triggerAtTime,PendingIntent operation)设置在TriggerAtTime时间启动由oper

  • Android仿正点闹钟时间齿轮滑动效果

    看到正点闹钟上的设置时间的滑动效果非常好看,自己就想做一个那样的,在网上就开始搜资料了,看到网上有的齿轮效果的代码非常多,也非常难懂,我就决定自己研究一下,现在我就把我的研究成果分享给大家.我研究的这个效果出来了,而且代码也非常简单,通俗易懂.效果图如下: 首先是MainActivity的布局文件,这个布局文件非常简单,就是一个Button:activity_main.xml文件,代码如下: <?xml version="1.0" encoding="utf-8&quo

  • 简单实现Android闹钟程序 附源码

    这个应用实现了简单的闹钟功能,关闭程序的状态中也可以进行闹钟的提醒. 这里遗留了一个问题: 如果我通过应用本身关闭程序,是可以实现我上述所说的功能,但是如果我在手机进程管理中实现应用程序的关闭操作,这个提醒就不起作用了,我很疑惑的是,我通过应用程序本身关闭了后,在进程中也是查看不到这个应用了的.所以哪位知道的帮留个言指点下,谢谢. ClockDemo.java package com.example.clock; import java.util.Calendar; import android

  • Android闹钟设置的解决方案

    Android设置闹钟并不像IOS那样这么简单,做过Android设置闹钟的开发者都知道里面的坑有多深.下面记录一下,我解决Android闹钟设置的解决方案. 主要问题 1.API19开始AlarmManager的机制修改. 2.应用程序被Kill掉后,设置的闹钟不响. 3.6.0以上进入Doze模式会使JobScheduler停止工作. 4.手机设置重启后,闹钟失效问题. API19以上AlarmManager机制的修改 API19之前AlarmManager提供了三个设置闹钟的方法,由于业务

  • 简单实现Android闹钟功能

    闹钟的简单实现,只有显示时间和设置闹钟. AlarmView package com.example.lenovo.clock2; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.TimePickerDialog; import android.content.Context; import android.content.DialogInterface; import a

  • Android自定义View 实现闹钟唤起播放闹钟铃声功能

    先上图看一下闹钟唤期页面的效果 实现的功能: 1:转动的图片根据天气情况更换 2:转动时间可以设置,转动结束,闹铃声音就结束 3:光圈颜色渐变效果 直接上代码啦: package com.yuekong.sirius.extension.customview; import android.animation.Animator; import android.animation.ValueAnimator; import android.content.Context; import andro

随机推荐