這篇文章主要介紹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在App中啟動系統鬧鐘的案例”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。