Android:通过通知启动外部应用

cor*_*rin 2 android android-intent android-notifications

我正在尝试创建一个通知,单击该通知将打开一个外部应用程序。我看过创建通知将用户发送到另一个应用程序的文档。但是我似乎无法弄清楚如何将两者结合起来。问题是从通知启动应用程序的建议方法是创建如下待处理的意图

Intent intent = new Intent(this, MyActivity.class);
TaskStackBuilder stackBuidler = TaskStackBuilder.create(context);
stackBuilder.addParentStack(MyActivity.class); 
stackBuilder.addNextIntent(intent);
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
Run Code Online (Sandbox Code Playgroud)

但是要启动外部应用程序,您必须创建一个隐式意图,如下所示:

String uri = ...
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
Run Code Online (Sandbox Code Playgroud)

据我所知,有没有办法来创建这样的意图TaskStackBuilder,因为addParentStack()只需要一个Activity,一个Class,或ComponentName

我想这个问题可以归结为...是否有可能创建一个既有待处理又有隐式的意图?

我现在唯一能想到的解决方法是在我的应用程序中创建一个活动,除了启动外部应用程序外什么也不做。

我确实尝试通过URI创建意图,然后执行以下操作,但是当您单击通知时什么也没有发生:

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Run Code Online (Sandbox Code Playgroud)

use*_*313 5

好吧,很久以后,我想我为您找到了解决方案。对于所有其他正在寻找从您自己的自定义通知中启动外部应用程序的答案的人。这里是:

public void createMyNotification(String titl, String titlcont, String conti){
        Context context = getApplicationContext();
        PackageManager pm = context.getPackageManager();
        Intent LaunchIntent = null;
        String apppack = "com.mycompany.appack.apname.app";
        String name = "";
        try {
            if (pm != null) {
                ApplicationInfo app = context.getPackageManager().getApplicationInfo(apppack, 0);
                name = (String) pm.getApplicationLabel(app);
                LaunchIntent = pm.getLaunchIntentForPackage(apppack);
            }
            Toast.makeText(context,"Found it:" + name,Toast.LENGTH_SHORT).show();
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        Intent intent = LaunchIntent; // new Intent();
        PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
        Notification noti = new Notification.Builder(this)
                .setTicker(titl)
                .setContentTitle(titlcont)
                .setContentText(conti)
                .setSmallIcon(R.drawable.ic_launcher)
                .setContentIntent(pIntent).getNotification();
        noti.flags = Notification.FLAG_AUTO_CANCEL;
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(0, noti);
    }
Run Code Online (Sandbox Code Playgroud)

这不会使用其他活动来启动外部应用程序。