如何在Android中从广播接收器发送数据到活动界面

4
这里是我的需求:我创建了一个广播接收器类,通过来电接收活动检测来电。现在,当有电话来时,我想找到它的当前时间并通过另一个活动显示出来。我使用意图来实现此操作。但是,当我接收到电话时,仍然无法按要求获取时间值并显示。我发布了我正在使用的所有代码。任何帮助都将是极好的。
这是检查电话状态并负责广播意图的广播接收器活动。
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);

        }
    }
  }
}
}    

现在,我希望一旦if循环被执行,就能够将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的值。我有什么遗漏或是出现了问题吗?请帮忙解决。

1个回答

7

创建名为NewActivity的新活动。并执行以下操作:

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>

谢谢Uriel。您能否提供动态接收此意图的代码?我想通过一个活动打印start_time的值。 - aps109
嘿,这个不起作用... start_time 没有显示在安卓屏幕上。 - aps109
我并不懒惰,我已经按照你说的做了一切……但是当有人打电话给我时,它的时间戳仍然没有显示出来……我已经有了XML文件……只是当我接到电话时,时间戳的值没有被显示出来…… - aps109
我正在使用Android 2.1。这会有问题吗? - aps109
@uriel,我已经编辑了问题。我使用了上面列出的代码,请告诉我错误在哪里。 - aps109
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接