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

标签 android broadcastreceiver

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

这是广播接收器 Activity ,它检查来电电话的状态并负责广播 Intent

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 的值发送到 Activity 。下面是接收activity-Test Activity的代码。

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 list 文件

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

我无法通过测试 Activity 打印 start_time 的值。我错过了什么还是出了什么问题??请帮助 谢谢

最佳答案

创建名为 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>

关于android - 如何将数据从广播接收器发送到android中的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11940637/

相关文章:

android - 发送 jdwp 跟踪请求失败!

android - LocationManager getProviders(true) 不返回提供者

android - 是否有有序的广播接收器列表?

android - 从我的应用程序登录到 Facebook 适用于模拟器,但不适用于设备

android - 软件渲染不支持 Oreo 中的硬件位图

android - onBackPressed 将用户带回主 Activity

android - 广播接收器未收到 USB 权限

android - HttpURLConnection.setConnectTimeout 不工作

android - com.google.firebase.iid.FirebaseInstanceIdReceiver 是否需要导出?

android - 唯一标识一个警报管理器并重新安排它