我想从活动中访问并启动广播接收器并执行某些操作

时间:2013-02-05 11:20:54

标签: android

我正在尝试开发一个Android应用,我想在通话时从手机发送信息。

目的地号码来自应用程序数据库。

我已经完成了直到那部分,但我无法在我的活动中访问广播接收器:

public class PARENT_CALLActivity extends Activity 
{
/** Called when the activity is first created. */

String PARENT=null;
EditText edparent;
Button submit;
String parent_number;

public static final String BROADCAST = "sha.pcall.android.action.broadcast";



@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    edparent=(EditText)findViewById(R.id.editText1);
    submit=(Button)findViewById(R.id.btnsubmit);


    submit.setOnClickListener(new OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub


            PARENT=edparent.getText().toString();   

            MyDabasehandler db=new MyDabasehandler(getApplicationContext());

            if(db.getContact().equals(null))
            {
                db.addContact(new Contacts(PARENT));

            }
            else
            {
                db.editContact();
            }

            Intent intent = new Intent(getApplicationContext(),LocationUpdateReceiver.class);
            sendBroadcast(intent);

             finish();
        }

    });       
}

public class LocationUpdateReceiver extends BroadcastReceiver 
{

    @Override
    public void onReceive(Context context, Intent intent)
    {

        String outgoing_number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

        Toast.makeText(context, outgoing_number, Toast.LENGTH_LONG).show();
    }

    }

}

1 个答案:

答案 0 :(得分:0)

如果您通过扩展广播接收器创建单独的类,我建议您在单独的类文件中执行此操作。如果您只想在活动打开时接收广播,请创建一个私有广播接收器变量。喜欢这个问题:

Where to register a BroadcastReceiver (Activity lifecycle fun)

在后一种情况下,您可以使用名为registerreceiver的此方法注册广播接收器变量。 Here is the link

这一切实际上取决于要求。如果您想要接收广播,即使您的应用已关闭(或活动不在前台),您还需要在清单文件中注册广播接收器,如下所示:

    <receiver 
        android:name="com.example.myapp.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="com.example.myapp" />
        </intent-filter>
    </receiver>

这是谷歌云消息广播接收器的一个例子。您还需要添加意图过滤器,以指定要接收的广播类型。在上面的例子中,广播接收器可以通过动作接收(参见intent-filter标签)两个意图:

"com.google.android.c2dm.intent.RECEIVE" 

"com.google.android.c2dm.intent.REGISTRATION"

完成此操作后,您可以在覆盖广播接收器的onReceive()方法中完成任务。

希望这有帮助。