打开和关闭广播接收器按钮点击在android



我正在做一个短信隐藏项目,它是广播接收器代码在下面

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();
 }

我在主活动中有两个按钮"打开"one_answers"关闭"。我需要的是,当我按下ON按钮时,它应该启动Bordcast接收器并开始隐藏短信,当我按OFF按钮时,我需要停止(广播接收器)隐藏消息过程,或者应该将短信返回收件箱*(当广播接收器关闭时会发生)*。现在我如何打开和关闭Boardcast接收器流程请帮助

应答后版本

我的活动课//

package com.an.oid;

public class OnoffActivity extends Activity {
int count =0;
Button a,b;
 ReceiverClass rc ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    a=(Button)findViewById(R.id.button1);
    b=(Button)findViewById(R.id.button2);
    rc= new ReceiverClass();
    a.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
             IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
             System.out.println("onnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn");

               registerReceiver(rc,filter);

        }
    });
    b.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
             unregisterReceiver(rc);
        }
    });
}
}

我的舱单//

<?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>

在得到答案后,我尝试了这个,但它不起作用?

只有当您使用在"活动"级别(而不是"清单"级别)注册接收器时,这才有可能

registerReceiver(BroadcastReceiver, IntentFilter)

单击按钮,您可以使用..注销它。。

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);
    }
        });

最新更新