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

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

1、布局文件  activity_main.xml

    

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 allPackageInfos;//系统安装所有软件   private List 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();   }     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 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();     }     }  } 

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

更多相关文章

  1. Android入门(7):活动的启动模式
  2. Android(安卓)N Preview前瞻
  3. android 4.3 操作源码实现系统截屏(暂无移植性)
  4. Android之Service自启动流程
  5. android 关于闹钟
  6. Android(安卓)ADB命令大全(通过ADB命令查看wifi密码、MAC地址、
  7. Mac系统下对Android(安卓)apk进行反编译
  8. Android系统移植与调试之------->如何修改Android设备的桌面背景
  9. android 启动白屏问题完美解决

随机推荐

  1. windows下mysql 5.7.20 安装配置方法图文
  2. mysql 5.7.23 安装配置方法图文教程
  3. mysql 8.0.12 安装配置教程
  4. Mysql无法选取非聚合列的解决方法
  5. mysql的定时任务实例教程
  6. MySQL分页Limit的优化过程实战
  7. mysql增量备份及断点恢复脚本实例
  8. 在golang中操作mysql数据库的实现代码
  9. centos7.4系统中yum源安装mysql 5.6
  10. Navicat修改MySQL数据库密码的多种方法