Включите и выключите приемник трансляции по нажатию кнопки в Android - PullRequest
0 голосов
/ 14 февраля 2012

я делаю проект сокрытия смс, который является приемником вещания код указан ниже

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

У меня было две кнопки ВКЛ и ВЫКЛ в моей основной деятельности. Что мне нужно, так это то, что когда я нажимаю кнопку 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>

После получения anser я попробовал это, но оно не работает?

1 Ответ

4 голосов
/ 14 февраля 2012

Это возможно только в том случае, если вы зарегистрируете своего получателя на уровне активности (не в манифесте), используя

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

    }
        });
...