0

さて、ここに私の問題があります。Serviceプッシュ通知を受け取るがあります。これで、プッシュ通知の内容に応じて、クリックすると対応するアプリケーションが起動するはずです。

プッシュ通知の受信やサービスの使用に問題はありませんでしたが、作業できないのは、適切なアプリケーションを開いている部分だけです。

からアプリケーションを開くには、何をする必要がありますServiceか? このサービスでは複数のアプリが動作するため、これは動的である必要があります。

誰かが私を正しい方向に向けることができれば、それは素晴らしいことです.

PS。私はライブラリに入れたGCMサービスを使用しているので、私の複数のアプリで使用できます。これはGCMIntentService.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);
}
4

2 に答える 2

2

アプリケーションは、s を使用して起動できますIntentPendingIntent次のように、正しいオブジェクトを構築する必要があります。

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);

target package または target を知らなかった場合はActivity、次のコードを使用できます。

Intent startingIntent = context.getPackageManager().getLaunchIntentForPackage("target_app_package_name");
context.startActivity(startingIntent);
于 2012-10-19T09:53:57.077 に答える
1

ざっと見ただけで、対応するアプリケーションの完全なパッケージ名を取得できるようです。

次に、次のように、パッケージ名でアプリケーションを開始できます

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);

うーん!くだらないコメントでごめんなさい...コメントにコードを入れることができないようです:(

于 2012-10-19T09:56:31.350 に答える