Android:意图通过通知传递给活动……我不知道';我没能在意向书中找到合适的临时演员

Android:意图通过通知传递给活动……我不知道';我没能在意向书中找到合适的临时演员,android,notifications,android-intent,flags,Android,Notifications,Android Intent,Flags,嗨,我正面临这个问题。我有一份包含2项活动的申请: -活动A(主要活动)显示车辆列表 -如果您单击项目列表,活动B将开始显示汽车的详细信息 在活动B中,您可以下载与该车相关的信息,负责下载的服务C将启动,通知栏中将添加一条通知。如果单击通知,您将看到活动B,其中显示了与特定车辆相关的详细信息 我的问题是:活动B通过这个额外的:carID获得了一个意图 因此,在onCreate中,它会读取此额外信息,并向db询问具体的车辆详细信息。 当我从活动A调用活动B时,一切正常。但当我从通知栏调用活动B时,

嗨,我正面临这个问题。我有一份包含2项活动的申请: -活动A(主要活动)显示车辆列表 -如果您单击项目列表,活动B将开始显示汽车的详细信息

在活动B中,您可以下载与该车相关的信息,负责下载的服务C将启动,通知栏中将添加一条通知。如果单击通知,您将看到活动B,其中显示了与特定车辆相关的详细信息

我的问题是:活动B通过这个额外的:carID获得了一个意图 因此,在onCreate中,它会读取此额外信息,并向db询问具体的车辆详细信息。 当我从活动A调用活动B时,一切正常。但当我从通知栏调用活动B时,它不会。它总是能得到我选择的第一辆车的详细信息。 例如,我下载法拉利的详细资料,然后是兰博基尼的详细资料

在我的通知中,我将看到2个通知,但它们都打开了显示法拉利详细信息的活动B

以下是我在服务C中创建通知的方式:

int icon = icona;  
CharSequence tickerText = message;              
long when = System.currentTimeMillis();         
Context context = getApplicationContext();      
CharSequence contentTitle = message;  
CharSequence contentText = appName;      
Intent notificationIntent;
notificationIntent = new Intent(this, ActivityB.class);
notificationIntent.putExtra("carId", carId);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,     PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
mNotificationManager.notify(NOT_ID, notification);
这就是我在活动B中获得意图的方式:

Intent myIntent = getIntent(); 
appId = myIntent.getIntExtra("carId", 0);
起初,我从通知中根本没有收到任何意图……然后我添加了pendingent.FLAG\u UPDATE\u CURRENT,正如您在上面看到的,我得到了它,但它始终是第一个。我已验证,我向每个意向添加了正确的carId,但我得到了另一个carId……每次打开通知时,都会显示此日志消息:

从非活动上下文调用startActivity;强制Intent.FLAG_ACTIVITY_NEW_任务用于:Intent{cmp=market.finestraprincipale/.ApplicationActivity bnds=[0101][320165](具有额外功能)}

有人能帮我吗……

(原始答案已修改,请参见编辑历史)

我不确定系统的哪一部分出现故障,所以我在这里发布了我的测试代码,我测试了代码是否正常工作。首先是
MyService
,然后是
TestActivity
,它在
DetailsActivity
中显示车辆详细信息:

CarService.java

公共类CarService扩展了IntentService
{
公共服务
{
超级(“汽车服务”);
}
受保护的手部内容无效(意图)
{
Bundle extras=intent.getExtras();
如果(附加==null)
{
Log.e(“CarService”、“HandleContent空附加服务”);
返回;
}
int carId=extras.getInt(“carId”);
字符串carName=extras.getString(“名称”);
Log.i(“CarService”,“Service on handleintent car=“+carName+”,ID=“+Integer.toString(carId));
意向通知意向;
notificationIntent=新的意图(this,DetailsActivity.class);
notificationIntent.putExtra(“carId”,carId);
notificationIntent.setFlags(Intent.FLAG\u活动\u新任务);
PendingEvent pending=PendingEvent.getActivity(此、carId、notificationIntent、PendingEvent.FLAG_UPDATE_CURRENT);
Notification notif=新通知(R.drawable.icon,carName,System.currentTimeMillis());
notif.flags |=Notification.FLAG_AUTO_CANCEL;
notif.setLatestEventInfo(getApplicationContext(),carName,“汽车详细信息”,待定);
NotificationManager mNotificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION\u服务);
通知经理。通知(carId,notif);
}
}

TestActivity.java(您的主要活动)

公共类TestActivity扩展活动实现OnClickListener
{
@在创建时覆盖公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
按钮btn=(按钮)findViewById(R.id.launch);
btn.setOnClickListener(此);
}
@覆盖公共void onClick(视图v)
{
startActivity(新意图(this,DetailsActivity.class));
}
}

test.xml(TestActivity.java的布局)



DetailsActivity.java(此处列出的汽车详细信息+启动汽车服务+返回此处的通知)

public class DetailsActivity扩展活动实现OnClickListener
{
私人字符串[]车=新字符串[]{“法拉利”、“兰博基尼”、“拉达”、“日产”、“欧宝”、“布加迪”};
私有int id=0;
@在创建时覆盖公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.details);
按钮btn=(按钮)findViewById(R.id.doit);
btn.setOnClickListener(此);
Bundle extras=getIntent().getExtras();
如果(附加值!=null)
{
最终int id=extras.getInt(“carId”);
Log.i(“详细活动”,“车辆ID:+ID”);
TextView tv=(TextView)findViewById(R.id.test_值);
tv.setText(“Car ID=“+Integer.toString(ID)+”,即“+cars[ID%6]);//ID%6防止在6次以上单击测试按钮时字符串数组崩溃
}
}
@覆盖公共void onClick(视图v)
{
意向意向=新意向(此,CarService.class);
意向。额外(“carId”,id);
intent.putExtra(“name”,cars[id%6]);//id%6防止在6次以上单击测试按钮时字符串数组崩溃
startService(意向);
++身份证;
}
}

details.xml(TestActivity.java的布局)



我希望所有这些都能正常工作,因为我在运行中做了一些小的更改。

您总是得到ID=0吗?一开始我总是得到ID=0……。然后我将这行挂起。getActivity(this,0,notificationIntent,0);到PendingEvent.getActivity(this,0,notificationIntent,PendingEvent.FLAG_UPDATE_CURRENT)