Java 从服务启动应用程序
好吧,这是我的问题。我有一个接收推送通知的Java 从服务启动应用程序,java,android,service,android-intent,Java,Android,Service,Android Intent,好吧,这是我的问题。我有一个接收推送通知的服务。现在,根据推送通知的内容,如果单击它,它应该启动相应的应用程序 我在接收推送通知或使用该服务时没有遇到任何问题,我唯一无法开始工作的是它打开正确应用程序的部分 要从服务打开应用程序,我需要做什么?这必须是动态的,因为将有多个应用程序使用此服务 如果有人能给我指出正确的方向那就太好了 另外,我正在使用GCM服务,我把它放进了一个库中,所以我可以在我的多个应用程序中使用它。这是gcminentservice.onMessage()函数,我需要在其中检查
服务
。现在,根据推送通知的内容,如果单击它,它应该启动相应的应用程序
我在接收推送通知或使用该服务时没有遇到任何问题,我唯一无法开始工作的是它打开正确应用程序的部分
要从服务
打开应用程序,我需要做什么?这必须是动态的,因为将有多个应用程序使用此服务
如果有人能给我指出正确的方向那就太好了
另外,我正在使用GCM服务,我把它放进了一个库中,所以我可以在我的多个应用程序中使用它。这是gcminentservice.onMessage()
函数,我需要在其中检查url的内容,然后为通知设置正确的意图:
@Override
protected void onMessage(Context arg0, Intent arg1)
{
Log.i(TAG, "new message = " + arg1.getExtras());
//Get a reference to the NotificationManager
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
//Instantiate the Notification
int icon = getResourseIdByName(arg0.getApplicationContext().getPackageName(), "drawable", "notification_icon");
CharSequence tickerText = arg1.getExtras().getString("tickertext");
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
//Define the notification's message and PendingIntent
Context context = getApplicationContext();
CharSequence contentTitle = arg1.getExtras().getString("contentTitle");
CharSequence contentText = arg1.getExtras().getString("contentText");
Intent notificationIntent = null;
if(arg1.getExtras().getString("url").isEmpty())
{
notificationIntent = new Intent(this, arg1.getExtras().getString("packageName").getClass());
}
else
{
notificationIntent = new Intent(this, MyWebView.class);
}
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notification.flags = Notification.FLAG_AUTO_CANCEL;
//Pass the Notification to the NotificationManager
int notificationId = Integer.parseInt(arg1.getExtras().getString("notificationId"));
mNotificationManager.notify(notificationId, notification);
}
可以使用
Intent
s启动应用程序。您需要构造正确的pendingent
对象,如下所示:
Intent targetIntent = new Intent(Intent.ACTION_MAIN, null);
targetIntent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName("target_app_package_name", "target_activity_class_name");
targetIntent.setComponent(cn);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, targetIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
如果您不知道目标软件包或目标活动
,可以使用以下代码:
Intent startingIntent = context.getPackageManager().getLaunchIntentForPackage("target_app_package_name");
context.startActivity(startingIntent);
可以使用
Intent
s启动应用程序。您需要构造正确的pendingent
对象,如下所示:
Intent targetIntent = new Intent(Intent.ACTION_MAIN, null);
targetIntent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName("target_app_package_name", "target_activity_class_name");
targetIntent.setComponent(cn);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, targetIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
如果您不知道目标软件包或目标活动
,可以使用以下代码:
Intent startingIntent = context.getPackageManager().getLaunchIntentForPackage("target_app_package_name");
context.startActivity(startingIntent);
好吧,简单看一下,您似乎能够获得相应应用程序的完整包名 然后,您可以通过包名启动应用程序,类似这样
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.your.packageName.in.String");
startActivity(LaunchIntent);
编辑:
为此,恕我直言,您只能从创建该通知的您自己的包启动一个活动。您可以从另一个应用程序包启动活动,但是您必须知道该包的活动类名,这通常是您不可能知道的
Intent clickIntent = new Intent(context,Activity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context,0,clickIntent,0);
这是创建通知时需要的
notification.setlatestEventInfo(context, "title","content",pendingIntent);
啊!对不起,我的评论很糟糕。。。我似乎无法在注释中添加代码:(好吧,简单看一下,您似乎能够获得相应应用程序的完整包名 然后,您可以通过包名启动应用程序,类似这样
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.your.packageName.in.String");
startActivity(LaunchIntent);
编辑:
为此,您只能从创建该通知的您自己的包启动活动。您可以从另一个应用程序包启动活动,但您必须知道该包的活动类名,这通常是您不可能知道的
Intent clickIntent = new Intent(context,Activity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context,0,clickIntent,0);
这是创建通知时需要的
notification.setlatestEventInfo(context, "title","content",pendingIntent);
呃!对不起,我的评论太糟糕了……我似乎无法在评论中添加代码:(但是我如何才能将其放入推送通知中?但是我如何才能将其放入推送通知中?它现在可以工作了。如果我使用这个:notificationIntent=arg0.getPackageManager().getLaunchIntentForPackage(arg1.getExtras().getString(“packageName”).toString());它现在可以工作了。如果我使用:notificationIntent=arg0.getPackageManager().getLaunchIntentForPackage(arg1.getExtras().getString(“packageName”).toString();