由于不同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"><Buttonandroid: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() {@Overridepublic 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;}}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initViews();initData();//begin scan installed applications;TODO: 16/1/15new Thread(new ScanInstalledAppsRunnable()).start();}private void initViews() {startSystemClockButton = (Button) findViewById(R.id.start_system_clock_bt);startSystemClockButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {TODO: 16/1/15startSystemClock();}});}private void initData() {clockPackageInfos = new ArrayList<PackageInfo>();}class ScanInstalledAppsRunnable implements Runnable {@Overridepublic void run() {allPackageInfos = getPackageManager().getInstalledPackages(0);if (allPackageInfos == null || allPackageInfos.size() == 0) {TODO: 16/1/15 todo nothingreturn;}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 如何在App中启动系统闹钟相关推荐

  1. android 闹钟开机启动,Android如何在App中启动系统闹钟

    由于不同Android手机厂商提供的系统闹钟包名都不一致,所以只能通过过滤当前手机所有的应用,以确定闹钟应用的包名,进而启动它. 这里采用的过滤规则是:系统应用 && 应用的Packa ...

  2. android在主程序中调用图片,009android初级篇之APP中使用系统相机相册等集成应用...

    009android初级篇之APP中使用系统相机相册等集成应用 android应用中使用相机功能,大致有两种方式实现: 直接调用系统内部的相机程序,显示的也是系统预设的界面(简单,只有简单的拍照功能) ...

  3. 如何在App中实现朋友圈功能之六快速实现下拉加载朋友圈功能——箭扣科技Arrownock

    如何在App中实现朋友圈功能 之六 快速实现下拉加载朋友圈功能 实现逻辑: 根据上次下拉刷新的时间从数据库加载出limit(比如10)条post,判断总数据条数: a. 如果总数据大于limit条,清 ...

  4. 如何在App中实现朋友圈功能之二快速实现用户信息的自定义——箭扣科技Arrownock...

    如何在App中实现朋友圈功能 之二 快速实现用户信息的自定义 自我关联社交元素: anSocial中很多的社交元素API,如帖子(Post).相册(Album).文件(File)等,这些API的可选参 ...

  5. 如何在App中实现朋友圈功能之四在朋友圈中添加发送图片功能——箭扣科技Arrownock

    如何在App中实现朋友圈功能 之四 在朋友圈中添加发送图片功能 实现概念: 当用户在界面点击发送按钮的时候,如果已经有选择好的图片,我们的做法是先上传图片到服务器,再将图片Id作为Post的属性上传. ...

  6. bcb 如何在DLL中捕捉系统级异常

    bcb 如何在DLL中捕捉系统级异常 http://topic.csdn.net/t/20031023/09/2385627.html -------------------------------- ...

  7. android input鼠标坐标,android - 如何在EditText中设置光标位置?

    android - 如何在EditText中设置光标位置? 有两个EditText,在加载页面时,第一个EditText中设置了一个文本,所以现在光标将在EditText的起始位置,我想在第二个Edi ...

  8. 外媒:微信小程序顺应“APP中启动APP”的行业潮流

    BI中文站 11月30日报道 上周,中国网络巨头腾讯的高级副总裁张小龙对外披露了一些照片,显示聊天工具微信开始整合"小程序".这一功能可以让微信的用户在无需下载软件的基础上,使用各 ...

  9. aws 删除ec2实例_如何在AWS中启动EC2实例

    aws 删除ec2实例 你好朋友, 在本教程中,我们将看到如何立即在AWS中旋转EC2实例. 您应该有权访问AWS控制台.如果您还没有AWS账户,则可以单击此处并在AWS上创建免费套餐. 如何在AWS ...

最新文章

  1. 转:C#中Monitor对象与Lock关键字的区别分析
  2. Numpy入门教程:08. 集合操作
  3. 用人话理解hash算法、特性、唯一性等
  4. ssh免密登录配置(两行命令搞定)
  5. html中content属性,CSS3的content属性用法详解
  6. AS3 Drawing API演讲稿
  7. nginx反向代理nexus私服
  8. 金融风控实战——有监督分箱
  9. java可视化模板——java可视化操作步骤
  10. ACM常见错误提示及可能的解决办法
  11. webviewjavascriptbridge android ios,js与ios交互使用WebViewJavascriptBridge如何写多个函数
  12. Cisco *** 完全配置指南-连载-PPTP和L2TP
  13. 商业WiFi“风来了”
  14. UBUNTU上安装numpy
  15. win10录屏_win10系统的电脑怎么录屏?这些录屏快捷键你都知道吗
  16. 注解之注解的基本概念
  17. 智能人物画像综合分析系统——Day3
  18. vue.js:590 [Vue tip]: Event “removeitem“ is emitted in component <TodoItems> but the handler is regi
  19. 计算机学士学位英文翻译,各类学士、硕士和博士学位英文翻译及缩写
  20. cve-2005-1794

热门文章

  1. 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...
  2. [转]JS调用Android里面的方法,Android调用JS里面的方法
  3. css display属性理解
  4. tcpdump抓取udp报文
  5. 关于JavaScript处理字符串的常见操作
  6. TypeScript 素描 - 模块解析、声明合并
  7. 跟小静读《jQuery权威指南》——目录
  8. 每日记载内容总结22
  9. 网站建设——从无到有
  10. 小东《迷路的情人》MV