我发送来自"活动的意图"接到"服务" (并传递数据)。我的代码有活动和服务(有接收者)。 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;缺少(你可能已经注意到了,我试图从意图中获得两种方式)
答案 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添加自己的额外内容。您需要提出另一种方法来做您想要完成的任何事情。