Oracle中开启某张表的审计(audit)
2014-06-14 23:04
281 查看
(1) 主界面(main.xml)实现:
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<LinearLayout xmlns:Android
=
"http://schemas.android.com/apk/res/android"
Android
:orientation =
"vertical"
Android
:layout_width =
"fill_parent"
Android
:layout_height =
"fill_parent"
>
<Button
Android
:id =
"@+id/enableCallTransfer"
Android
:layout_width =
"wrap_content"
Android
:layout_height =
"wrap_content"
Android
:text =
"设置呼叫转移"
/>
<Button
Android
:id =
"@+id/disableCallTransfer"
Android
:layout_width =
"wrap_content"
Android
:layout_height =
"wrap_content"
Android
:text =
"取消呼叫转移"
/>
</LinearLayout>
(2) 主Activity实现:
package
com.focus.manager;
import
java.lang.reflect.Method;
import
Android
.app.Activity;
import
Android
.content.BroadcastReceiver;
import
Android
.content.Context;
import
Android
.content.Intent;
import
Android
.content.IntentFilter;
import
Android
.media.AudioManager;
import
Android
.net.Uri;
import
Android
.os.Bundle;
import
Android
.os.Handler;
import
Android
.os.Message;
import
Android
.telephony.SmsMessage;
import
Android
.telephony.TelephonyManager;
import
Android
.util.Log;
import
Android
.view.View;
import
Android
.view.View.OnClickListener;
import
com.Android
.internal.telephony.ITelephony;
public
class
CallAndSMSInterceptorActivity
extends
Activity {
//要拦截的号码
private
final
static
String BLOCKED_NUMBER =
"15555215556"
;
private
IncomingCallReceiver mIncomingCallReceiver;
private
ITelephony mITelephony;
private
AudioManager mAudioManager;
//占线时转移,这里13800000000是空号,所以会提示所拨的号码为空号
private
final
String ENABLE_SERVICE =
"tel:**67*13800000000%23"
;
//占线时转移
private
final
String DISABLE_SERVICE =
"tel:%23%2367%23"
;
private
final
static
int
OP_REGISTER =
100
;
private
final
static
int
OP_CANCEL =
200
;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
mIncomingCallReceiver =
new
IncomingCallReceiver();
IntentFilter mIntentFilter =
new
IntentFilter();
//拦截电话
mIntentFilter.addAction(
"Android
.intent.action.PHONE_STATE"
);
//拦截短信
mIntentFilter.addAction(
"Android
.provider.Telephony.SMS_RECEIVED"
);
//注册BroadcastReceiver
registerReceiver(mIncomingCallReceiver, mIntentFilter);
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
//利用反射获取隐藏的endcall方法
TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
try
{
Method getITelephonyMethod = TelephonyManager.
class
.getDeclaredMethod(
"getITelephony"
, (Class[])
null
);
getITelephonyMethod.setAccessible(
true
);
mITelephony = (ITelephony) getITelephonyMethod.invoke(mTelephonyManager, (Object[])
null
);
}
catch
(Exception e) {
e.printStackTrace();
}
findViewById(R.id.enableCallTransfer).setOnClickListener(
new
OnClickListener(){
public
void
onClick(View view) {
//设置呼叫转移
Message message = mHandler.obtainMessage();
message.what = OP_REGISTER;
mHandler.dispatchMessage(message);
}
});
findViewById(R.id.disableCallTransfer).setOnClickListener(
new
OnClickListener(){
public
void
onClick(View view) {
//取消呼叫转移
Message message = mHandler.obtainMessage();
message.what = OP_CANCEL;
mHandler.dispatchMessage(message);
}
});
}
private
class
IncomingCallReceiver
extends
BroadcastReceiver{
@Override
public
void
onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d(
"mayingcai"
,
"Action:"
+ action);
if
(
"Android
.intent.action.PHONE_STATE"
.equals(action)){
//拦截电话
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
Log.i(
"mayingcai"
,
"State: "
+ state);
String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.d(
"mayingcai"
,
"Incomng Number: "
+ number);
if
(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){
//电话正在响铃
if
(number.equals(BLOCKED_NUMBER)){
//拦截指定的电话号码
//先静音处理
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
Log.d(
"mayingcai"
,
"Turn Ringtone Silent"
);
try
{
//挂断电话
mITelephony.endCall();
}
catch
(Exception e) {
e.printStackTrace();
}
//再恢复正常铃声
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}
}
}
else
if
(
"Android
.provider.Telephony.SMS_RECEIVED"
.equals(action)){
//拦截短信
SmsMessage sms = getMessagesFromIntent(intent)[
0
];
String number = sms.getOriginatingAddress();
Log.d(
"mayingcai"
,
"Incomng Number: "
+ number);
number = trimSmsNumber(
"+86"
, number);
//把国家代码去除掉
if
(number.equals(BLOCKED_NUMBER)){
abortBroadcast();
//这句很重要,中断广播后,其他要接收短信的应用都没法收到短信广播了
}
}
}
}
public
final
static
SmsMessage[] getMessagesFromIntent(Intent intent) {
Object[] messages = (Object[]) intent.getSerializableExtra(
"pdus"
);
byte
[][] pduObjs =
new
byte
[messages.length][];
for
(
int
i =
0
; i < messages.length; i++) {
pduObjs[i] = (
byte
[]) messages[i];
}
byte
[][] pdus =
new
byte
[pduObjs.length][];
int
pduCount = pdus.length;
SmsMessage[] msgs =
new
SmsMessage[pduCount];
for
(
int
i =
0
; i < pduCount; i++) {
pdus[i] = pduObjs[i];
msgs[i] = SmsMessage.createFromPdu(pdus[i]);
}
return
msgs;
}
public
final
static
String trimSmsNumber(String prefix, String number){
String s = number;
if
(prefix.length()>
0
&& number.startsWith(prefix)){
s = number.substring(prefix.length());
}
return
s;
}
private
Handler mHandler =
new
Handler() {
public
void
handleMessage(Message response) {
int
what = response.what;
switch
(what) {
case
OP_REGISTER:{
Intent i =
new
Intent(Intent.ACTION_CALL);
i.setData(Uri.parse(ENABLE_SERVICE));
startActivity(i);
break
;
}
case
OP_CANCEL:{
Intent i =
new
Intent(Intent.ACTION_CALL);
i.setData(Uri.parse(DISABLE_SERVICE));
startActivity(i);
break
;
}
}
}
};
}
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<LinearLayout xmlns:Android
=
"http://schemas.android.com/apk/res/android"
Android
:orientation =
"vertical"
Android
:layout_width =
"fill_parent"
Android
:layout_height =
"fill_parent"
>
<Button
Android
:id =
"@+id/enableCallTransfer"
Android
:layout_width =
"wrap_content"
Android
:layout_height =
"wrap_content"
Android
:text =
"设置呼叫转移"
/>
<Button
Android
:id =
"@+id/disableCallTransfer"
Android
:layout_width =
"wrap_content"
Android
:layout_height =
"wrap_content"
Android
:text =
"取消呼叫转移"
/>
</LinearLayout>
(2) 主Activity实现:
package
com.focus.manager;
import
java.lang.reflect.Method;
import
Android
.app.Activity;
import
Android
.content.BroadcastReceiver;
import
Android
.content.Context;
import
Android
.content.Intent;
import
Android
.content.IntentFilter;
import
Android
.media.AudioManager;
import
Android
.net.Uri;
import
Android
.os.Bundle;
import
Android
.os.Handler;
import
Android
.os.Message;
import
Android
.telephony.SmsMessage;
import
Android
.telephony.TelephonyManager;
import
Android
.util.Log;
import
Android
.view.View;
import
Android
.view.View.OnClickListener;
import
com.Android
.internal.telephony.ITelephony;
public
class
CallAndSMSInterceptorActivity
extends
Activity {
//要拦截的号码
private
final
static
String BLOCKED_NUMBER =
"15555215556"
;
private
IncomingCallReceiver mIncomingCallReceiver;
private
ITelephony mITelephony;
private
AudioManager mAudioManager;
//占线时转移,这里13800000000是空号,所以会提示所拨的号码为空号
private
final
String ENABLE_SERVICE =
"tel:**67*13800000000%23"
;
//占线时转移
private
final
String DISABLE_SERVICE =
"tel:%23%2367%23"
;
private
final
static
int
OP_REGISTER =
100
;
private
final
static
int
OP_CANCEL =
200
;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
mIncomingCallReceiver =
new
IncomingCallReceiver();
IntentFilter mIntentFilter =
new
IntentFilter();
//拦截电话
mIntentFilter.addAction(
"Android
.intent.action.PHONE_STATE"
);
//拦截短信
mIntentFilter.addAction(
"Android
.provider.Telephony.SMS_RECEIVED"
);
//注册BroadcastReceiver
registerReceiver(mIncomingCallReceiver, mIntentFilter);
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
//利用反射获取隐藏的endcall方法
TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
try
{
Method getITelephonyMethod = TelephonyManager.
class
.getDeclaredMethod(
"getITelephony"
, (Class[])
null
);
getITelephonyMethod.setAccessible(
true
);
mITelephony = (ITelephony) getITelephonyMethod.invoke(mTelephonyManager, (Object[])
null
);
}
catch
(Exception e) {
e.printStackTrace();
}
findViewById(R.id.enableCallTransfer).setOnClickListener(
new
OnClickListener(){
public
void
onClick(View view) {
//设置呼叫转移
Message message = mHandler.obtainMessage();
message.what = OP_REGISTER;
mHandler.dispatchMessage(message);
}
});
findViewById(R.id.disableCallTransfer).setOnClickListener(
new
OnClickListener(){
public
void
onClick(View view) {
//取消呼叫转移
Message message = mHandler.obtainMessage();
message.what = OP_CANCEL;
mHandler.dispatchMessage(message);
}
});
}
private
class
IncomingCallReceiver
extends
BroadcastReceiver{
@Override
public
void
onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d(
"mayingcai"
,
"Action:"
+ action);
if
(
"Android
.intent.action.PHONE_STATE"
.equals(action)){
//拦截电话
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
Log.i(
"mayingcai"
,
"State: "
+ state);
String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.d(
"mayingcai"
,
"Incomng Number: "
+ number);
if
(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){
//电话正在响铃
if
(number.equals(BLOCKED_NUMBER)){
//拦截指定的电话号码
//先静音处理
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
Log.d(
"mayingcai"
,
"Turn Ringtone Silent"
);
try
{
//挂断电话
mITelephony.endCall();
}
catch
(Exception e) {
e.printStackTrace();
}
//再恢复正常铃声
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}
}
}
else
if
(
"Android
.provider.Telephony.SMS_RECEIVED"
.equals(action)){
//拦截短信
SmsMessage sms = getMessagesFromIntent(intent)[
0
];
String number = sms.getOriginatingAddress();
Log.d(
"mayingcai"
,
"Incomng Number: "
+ number);
number = trimSmsNumber(
"+86"
, number);
//把国家代码去除掉
if
(number.equals(BLOCKED_NUMBER)){
abortBroadcast();
//这句很重要,中断广播后,其他要接收短信的应用都没法收到短信广播了
}
}
}
}
public
final
static
SmsMessage[] getMessagesFromIntent(Intent intent) {
Object[] messages = (Object[]) intent.getSerializableExtra(
"pdus"
);
byte
[][] pduObjs =
new
byte
[messages.length][];
for
(
int
i =
0
; i < messages.length; i++) {
pduObjs[i] = (
byte
[]) messages[i];
}
byte
[][] pdus =
new
byte
[pduObjs.length][];
int
pduCount = pdus.length;
SmsMessage[] msgs =
new
SmsMessage[pduCount];
for
(
int
i =
0
; i < pduCount; i++) {
pdus[i] = pduObjs[i];
msgs[i] = SmsMessage.createFromPdu(pdus[i]);
}
return
msgs;
}
public
final
static
String trimSmsNumber(String prefix, String number){
String s = number;
if
(prefix.length()>
0
&& number.startsWith(prefix)){
s = number.substring(prefix.length());
}
return
s;
}
private
Handler mHandler =
new
Handler() {
public
void
handleMessage(Message response) {
int
what = response.what;
switch
(what) {
case
OP_REGISTER:{
Intent i =
new
Intent(Intent.ACTION_CALL);
i.setData(Uri.parse(ENABLE_SERVICE));
startActivity(i);
break
;
}
case
OP_CANCEL:{
Intent i =
new
Intent(Intent.ACTION_CALL);
i.setData(Uri.parse(DISABLE_SERVICE));
startActivity(i);
break
;
}
}
}
};
}
相关文章推荐
- oracle开启audit(审计)
- oracle开启audit(审计)
- oracle开启audit审计功能
- nullnullOracle 审计audit 的技巧使用,追踪oracle后台数据库的DML动作
- [Oracle] 数据库安全之 - 审计Audit
- oracle数据审计 AUDIT
- Oracle 10g Audit(审计) --- 记录登录用户在Oracle中的所有操作(转)
- 【请教】Oracle中审计参数audit_trail的讨论
- Oracle 审计功能 Audit
- Oracle 审计audit 的技巧使用,追踪oracle后台数据库的DML动作
- Oracle Audit 审计 说明
- Oracle审计功能开启导致SYSTEM表空间不足
- Oracle 审计参数AUDIT_SYSLOG_LEVEL介绍
- Oracle 审计失败的用户登陆(Oracle audit)
- oracle 10g开启审计
- oracle audit(审计) 简单介绍
- Oracle Audit 审计 说明
- Oracle Audit 审计 说明
- Oracle 审计功能 Audit
- ORACLE AUDIT 审计