思路:点击按钮,开启一个服务,在服务里直接调用打电话“10086”,在服务中监听电话状态,通话状态用遮挡物遮住,挂断则消失并停止该服务,如果想盖住360的防窃听,可以延迟0.8s在把遮盖物显示出来,就可以遮住。
demo下载地址
代码如下:http://download.csdn.net/detail/u012303938/8624721
MainAcitivy.class
package com.example.testdemo;
import android.support.v4.app.Fragment;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
Tappliacation.add(this);
button1=(Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent=new Intent(MainActivity.this,MyServeice.class);
startService(intent);
// Intent intent=new Intent(MainActivity.this,MainActivity.class);
// startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
MyService.class
package com.example.testdemo;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
public class MyServeice extends Service{
View view;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
view=View.inflate(this, R.layout.list, null);
listionpho();
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+"10086"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("num", "10086");
startActivity(intent);
}@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
// Intent intents=new Intent(MyServeice.this,MainActivity.class);
// intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// startActivity(intents);
return super.onStartCommand(intent, flags, startId);
}
private void show() {
// TODO Auto-generated method stub
WindowManager manager=(WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR ;
int screenWidth = WindowManager.LayoutParams.MATCH_PARENT;
int screenHeigh = 800;
// 设置行为选项
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.TYPE_STATUS_BAR;
params.gravity=Gravity.TOP;
params.y=20;
params.width = WindowManager.LayoutParams.FILL_PARENT;
params.height = screenHeigh;
//设置显示初始位置 屏幕左上角为原点
// topWindow显示到最顶部
manager.addView(view, params);
}
private void listionpho() {
// TODO Auto-generated method stub
TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener listener=new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
// TODO Auto-generated method stub
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
if (view != null && view.isShown()) {
WindowManager windowManager = (WindowManager) getApplicationContext()
.getSystemService(WINDOW_SERVICE);
windowManager.removeView(view);
Log.i("test", "停止该服务");
stopSelf();
}
// manager=null;
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
//manager.removeView(view);
//显示悬浮窗
show();
break;
default:
break;
}
}
};
telManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}
}