调用紧急电话,
解决紧急电话界面 按home键,回到锁屏界面的
Button bt1 = (Button) findViewById(R.id.bt1);
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("test", "___" + isTopActivy());
ComponentName comp = new ComponentName("com.android.phone",
"com.android.phone.EmergencyDialer");
Intent intentM = new Intent();
intentM.setComponent(comp);
startActivity(intentM);
Intent intent = new Intent();
intent.setClass(PhoneDemoActivity.this, PhoneService.class);
intent.setAction(PhoneService.LOCK);
startService(intent);
}
});
Button bt2 = (Button) findViewById(R.id.bt2);
bt2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(PhoneDemoActivity.this, PhoneService.class);
intent.setAction(PhoneService.CANCEL_LOCK);
startService(intent);
}
});
问题。
得到栈顶的activity :使用SingleTask加载模式:
public String isTopActivy(){
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);
String cmpNameTemp = null;
if(null != runningTaskInfos){
cmpNameTemp = (runningTaskInfos.get(0).topActivity).toString();
Log.e("cmpname","cmpname:"+cmpNameTemp);
}
return cmpNameTemp;
}
service每隔500毫秒启动服务检测:
public static final String LOCK = "SET_LOCK" ;
public static final String CANCEL_LOCK = "CANCEL_LOCK" ;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
if(intent != null){
String action = intent.getAction();
Log.d("test", "action_" + action);
if(action.equals(LOCK)){
setAlarm();
String phoneEm = isTopActivy();
String pStr = "ComponentInfo{com.android.phone/com.android.phone.EmergencyDialer}" ;
String lStr = "ComponentInfo{com.phone/com.phone.PhoneDemoActivity}" ;
String launch2 = "ComponentInfo{com.android.launcher/com.android.launcher2.Launcher}" ;
// if(phoneEm.equals(launch2)){
if(phoneEm.equals(pStr) || phoneEm.equals(lStr)){
}else {
Intent intent2 = new Intent();
intent2.setClass(this, PhoneDemoActivity.class);
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent2);
}
Log.d("test", "!phoneEm.equals(phoneEm)_" + !phoneEm.equals(phoneEm));
Log.d("test", "!phoneEm.equals(lStr)_" + !phoneEm.equals(lStr));
Log.d("test", "phoneEm_" + phoneEm);
}else if(action.equals(CANCEL_LOCK)){
cancelAlarm();
}
}
}
private int i = 0;
private int j = 0;
private void setAlarm(){
Log.d("test", "setAlarm_" + i++);
Intent i = new Intent();
i.setClass(this, PhoneService.class);
i.setAction(LOCK);
PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
AlarmManager alarmMgr = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + 500,500, pi);
}
private void cancelAlarm(){
Log.d("test", "cancelAlarm_" + j++);
Intent i = new Intent();
i.setClass(this, PhoneService.class);
i.setAction(LOCK);
PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
AlarmManager alarmMgr = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmMgr.cancel(pi);
}
/***/
public String isTopActivy(){
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);
String cmpNameTemp = null;
if(null != runningTaskInfos){
cmpNameTemp = (runningTaskInfos.get(0).topActivity).toString();
// Log.e("cmpname","cmpname:"+cmpNameTemp);
}
return cmpNameTemp;
}