溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android在App中啟動(dòng)系統(tǒng)鬧鐘的案例

發(fā)布時(shí)間:2021-02-19 10:10:23 來(lái)源:億速云 閱讀:167 作者:小新 欄目:移動(dòng)開發(fā)

這篇文章主要介紹Android在App中啟動(dòng)系統(tǒng)鬧鐘的案例,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

由于不同Android手機(jī)廠商提供的系統(tǒng)鬧鐘包名都不一致,所以只能通過(guò)過(guò)濾當(dāng)前手機(jī)所有的應(yīng)用,以確定鬧鐘應(yīng)用的包名,進(jìn)而啟動(dòng)它。

這里采用的過(guò)濾規(guī)則是:系統(tǒng)應(yīng)用 && 應(yīng)用的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="啟動(dòng)系統(tǒng)鬧鐘" /> 
 
</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;//系統(tǒng)安裝所有軟件 
  private List<PackageInfo> clockPackageInfos;//系統(tǒng)時(shí)鐘軟件 
 
  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(), "--啟動(dòng)系統(tǒng)鬧鐘失敗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(), "--啟動(dòng)系統(tǒng)鬧鐘失敗2--", Toast.LENGTH_SHORT).show(); 
    } 
 
 
  } 
 
}

以上是“Android在App中啟動(dòng)系統(tǒng)鬧鐘的案例”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI