phone緊急電話を呼び出す

5095 ワード

緊急電話を呼び出し、
緊急電話のインタフェースを解決して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;
}

 
サービスは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;
	}