如何将数据从广播接收器发送到android中的活动

时间:2012-08-13 19:04:11

标签: android broadcastreceiver

这是我想要做的。我创建了一个broadcastreceiver类,它通过callrecieve活动检测来电。现在,一旦来电,我想找到它的当前时间并通过另一个活动显示它。我用过这个意图。但是,当我接到电话时,我仍然无法获得所需的时间值。我已经发布了我正在使用的所有代码。任何帮助都会很棒

这是广播接收器活动,它检查电话的来电状态,并负责广播意图

package com.mohit;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;


public class callreceive extends Activity {
public class receive extends BroadcastReceiver {


    long start_time,end_time,dif_sec;
    int flag=0;

  @Override
  public void onReceive(Context context, Intent intent) {
    Bundle extras = intent.getExtras();
    if (extras != null) {
      String state = extras.getString(TelephonyManager.EXTRA_STATE);

      Log.w("DEBUG", state);
      if ((state.equals(TelephonyManager.EXTRA_STATE_IDLE))&&flag==0) 
      {
        flag=1;
        start_time=System.currentTimeMillis();
        Intent intent1 = new Intent();//(callreceive.this,TestActivity.class);
        intent1.setAction(Intent.ACTION_SEND);
        intent1.putExtra("start_time",start_time);
        startActivity(intent1);

        }
    }
  }
}
}    

现在我想在执行循环后立即将start_time的值发送给活动。以下是接收活动 - 测试活动的代码。

package com.mohit;

import com.mohit.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class TestActivity extends Activity {

    TextView output1,output2;
    long start_time,end_time;
    int flag=0;
    long dif_sec=0;

      @Override
        public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main);
             output1=(TextView)findViewById(R.id.textView1);


             Intent extras = getIntent();
              if (extras!=null)
              {

                  if (flag==0)
                  {
                      flag=1;
                 dif_sec=extras.getLongExtra("start_time",0);
                  }
              }
              output1.setText(String.valueOf(dif_sec));

              }

} 

这是android清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mohit"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

    <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity android:name="TestActivity" >
        <intent-filter>
                <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>
    </activity>


     <activity android:name="callreceive" >
    <receiver android:name="receive" >
        <intent-filter>
    <action android:name="android.intent.action.SEND" />
    <action android:name="android.intent.action.PHONE_STATE"></action>
    <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>
    </activity>

 </application>

</manifest>

我无法通过测试活动打印start_time的值。我错过了什么或者是错的吗? Plz帮助 THANX

1 个答案:

答案 0 :(得分:6)

创建名为NewActivity的新Activity。并这样做:

public class callreceiver extends BroadcastReceiver {


    long start_time;
    int flag=0;

    @Override
     public void onReceive(Context context, Intent intent) {
     Bundle extras = intent.getExtras();
     if (extras != null) {
     String state = extras.getString(TelephonyManager.EXTRA_STATE);

     Log.w("DEBUG", state);
     if ((state.equals(TelephonyManager.EXTRA_STATE_RINGING))&&flag==0) 
     {
     flag=1;
     start_time=System.currentTimeMillis();
     Intent intent = new Intent(context,NewActivity.class);
     intent.putExtra("start_time",start_time)
     startActivity(intent);
     }
     }

现在,创建一个获取额外内容的新类:

public class ILoveUrielFrankelActivity extends Activity {
    private TextView mTextView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         Bundle extras = getIntent().getExtras();
         long displayTime = extras.getLong("start_time");
         TextView mTextView = (TextView)findViewById(R.id.uriel);
         mTextView.setText(displayTime);
  }

和res / layout / main.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/uriel"/>

</LinearLayout>