打开和关闭android中的广播接收器打开按钮
我正在做一个短信隐藏项目,这是广播接收机 代码如下所示打开和关闭android中的广播接收器打开按钮,android,service,sms,Android,Service,Sms,我正在做一个短信隐藏项目,这是广播接收机 代码如下所示 package com.sms.sms; public class ReceiverClass extends BroadcastReceiver { SQLiteDatabase DiaryDB = null; String message,number; @Override public void onReceive(Context context, Intent intent) { Bundle bundle
package com.sms.sms;
public class ReceiverClass extends BroadcastReceiver
{
SQLiteDatabase DiaryDB = null;
String message,number;
@Override
public void onReceive(Context context, Intent intent)
{
Bundle bundle = intent.getExtras();
SmsMessage[ ] msgs = null;
String str = "";
if (bundle != null)
{
abortBroadcast();
//---retrieve the received message here ---
Object[ ] pdus = (Object[ ]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++)
{
msgs[i] = SmsMessage.createFromPdu((byte[ ])pdus[i]);
str += "SMS from " + msgs[i].getOriginatingAddress();
str += " :";
str += msgs[i].getMessageBody().toString();
str += "\n";
message = msgs[i].getMessageBody().toString();
number = msgs[i].getOriginatingAddress();
}
// ........first show sms here.....
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
String name = findNameByAddress(context, number);
if(name.equals(number))
name = "Unknown";
DiaryDB = context.openOrCreateDatabase("DIARY_DATABASE", context.MODE_PRIVATE, null);
DiaryDB.execSQL("CREATE TABLE IF NOT EXISTS Messages (TIMESTAMP DATE DEFAULT (DATETIME('now','localtime')), MESSAGE varchar, SENDER varchar, NAME varchar);");
System.out.println("table createdddddddddddddddddddddddddd");
DiaryDB.execSQL("INSERT INTO Messages(MESSAGE,SENDER,NAME) VALUES('" + message +"','"+ number +"','"+ name +"')");
DiaryDB.close();
updateName(context,name, number);
}
}
public String findNameByAddress(Context ct,String address)
{
Uri myPerson = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(address));
String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME };
Cursor cursor = ct.getContentResolver().query(myPerson, projection, null, null, null);
if (cursor.moveToFirst())
{
String name=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
Log.e("","Found contact name");
cursor.close();
return name;
}
cursor.close();
Log.e("","Not Found contact name");
return address;
}
public void updateName(Context ct, String name, String sender)
{
DiaryDB = ct.openOrCreateDatabase("DIARY_DATABASE", ct.MODE_PRIVATE, null);
DiaryDB.execSQL("UPDATE Messages SET NAME='"+name+"' WHERE SENDER='"+sender+"'");
DiaryDB.close();
}
我的舱单//
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.an.oid"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".OnoffActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.SEND_SMS">
</uses-permission>
<uses-permission android:name="android.permission.READ_SMS" />
</manifest>
在获得anser后,我尝试了这个方法,但它不起作用?只有在活动级别(非清单)使用 点击按钮后,您可以使用..取消注册
unregisterReceiver(BroadcastReceiver receiver)
编辑II
//注册按钮
register.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
IntentFilter filter = new IntentFilter(MY_ACTIVITY);
Sms2Activity rc = new Sms2Activity();
registerReceiver(rc,filter);
}
});
unregister.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
unregisterReceiver(rc);
}
});
//取消注册按钮
register.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
IntentFilter filter = new IntentFilter(MY_ACTIVITY);
Sms2Activity rc = new Sms2Activity();
registerReceiver(rc,filter);
}
});
unregister.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
unregisterReceiver(rc);
}
});
这只有在您使用在活动级别(非清单)注册接收方时才可能 点击按钮后,您可以使用..取消注册
unregisterReceiver(BroadcastReceiver receiver)
编辑II
//注册按钮
register.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
IntentFilter filter = new IntentFilter(MY_ACTIVITY);
Sms2Activity rc = new Sms2Activity();
registerReceiver(rc,filter);
}
});
unregister.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
unregisterReceiver(rc);
}
});
//取消注册按钮
register.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
IntentFilter filter = new IntentFilter(MY_ACTIVITY);
Sms2Activity rc = new Sms2Activity();
registerReceiver(rc,filter);
}
});
unregister.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
unregisterReceiver(rc);
}
});
我如何在我的按钮点击中实现它?请解释一下,请告诉我在按钮点击中应该做什么?IntentFilter filter=新建IntentFilter(我的活动);在这里,我应该在“我的活动”部分放置的内容是“android.provider.Telephony.SMS\u RECEIVED”,如果这是您的意图,那么是的!。。它将是android.provider.Telephony.SMS\u received我如何在我的按钮上实现它单击你能解释一下吗请告诉我在按钮单击中应该做什么?IntentFilter filter=new IntentFilter(我的活动);在这里,我应该在“我的活动”部分放置的内容是“android.provider.Telephony.SMS\u RECEIVED”,如果这是您的意图,那么是的!。。它将是android.provider.Telephony.SMS_receivedan指向解决方案的其他链接:指向解决方案的其他链接: