缺少额外的'意图中的数据

时间:2016-07-19 02:28:12

标签: android

我发送来自"活动的意图"接到"服务" (并传递数据)。我的代码有活动和服务(有接收者)。 Receiver声明如下

 <receiver android:name="xxx"
        android:enabled="true"  >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
           <!-- protected intents meant for os and not for us <action android:name="android.intent.action.ACTION_NEW_OUTGOING_CALL" android:priority="0" /> -->
        </intent-filter>

  </receiver>

活动定义如下

   <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

我回顾了 Use an intent to send data to my activity

我调用的意图是呼叫意图并传递目的地呼叫号码,使用以下代码

    Log.e(TAG,"Calling "+number);
    Intent callIntent = new Intent(Intent.ACTION_CALL); //ACTION_NEW_OUTGOING_CALL is deprecated in API 21, hence ACTION_CALL          
    callIntent.putExtra("PHONE_NUMBER",number);
    number = "tel:"+number;
    callIntent.setData(Uri.parse(number));
    startActivity(callIntent);

以上代码成功通过我的应用程序拨打电话。我也有一个接收器拦截呼叫,接收器拦截上述呼叫就好了。但是&#39;额外&#39;上述意图在接收方中丢失;我总是得到&#34; PHONE_NUMBER&#34;在以下代码中为null

@Override
public void onReceive(Context context, Intent intent) {
      //blah blah..
 savedNumber = intent.getExtras().getString("PHONE_NUMBER");
 if(savedNumber == null)
        savedNumber = intent.getStringExtra("PHONE_NUMBER");
 Log.e(TAG, " savedNumber = "+savedNumber);
}

我的错误是什么?为什么我会在接收器中获得意图,但是&#39; extras&#39;缺少(你可能已经注意到了,我试图从意图中获得两种方式)

3 个答案:

答案 0 :(得分:2)

试试这个:

Intent intent = context.getIntent();
savedNumber = intent.getStringExtra("PHONE_NUMBER");

答案 1 :(得分:0)

像这样开始服务 -

Intent callIntent=new Intent(this, Service.class); 
callIntent.putExtra("phonenumber",number);
this.startService(callIntent); 

然后从服务中检索数据;

data=(String) intent.getExtras().get("phonenumber"); 

您可以从onHandleIntent或onStartCommand Intent参数访问您的参数。

服务

protected void onStartCommand (Intent intent, int flags, int startId) {
data=(String) intent.getExtras().get("data"); 
}

IntentService

protected void onHandleIntent(Intent intent) {
data=(String) intent.getExtras().get("data"); 
}

这取决于您正在运行的服务类型。

答案 2 :(得分:0)

getIntent()是Activity类的方法。你可以在onReceive()方法中看到有一个intent参数,你可以从中获取字符串。

String number = null;
number = intent.getStringExtra("PHONE_NUMBER");

但我读到了这篇文章:How to pass Extra to BroadcastReceiver, when initiating ACTION_CALL 只有Android系统本身才能广播NEW_OUTGOING_CALL意图。 您无法为此Intent添加自己的额外内容。您需要提出另一种方法来做您想要完成的任何事情。