【问题标题】:Need to convert a String to a Intent that I can send?需要将字符串转换为我可以发送的 Intent 吗?
【发布时间】:2015-08-25 03:42:15
【问题描述】:

我需要在广播接收器的接收端使用什么代码将字符串转换为我可以发送的工作意图?所以简而言之,我需要将 intent1 转换为我可以发送的工作意图!提前谢谢大家!

编辑 所以我发现我存储通知意图的方法不起作用所以我想我现在的主要问题是如何获取通知意图并通过广播发送器发送它并在广播接收器中接收该意图然后能够发送该意图...感谢您对我的包容,我对如何实现这一点感到非常困惑,所以感谢这个社区帮助我

广播发送者

public void onNotificationPosted(StatusBarNotification sbn) {


    String pack = sbn.getPackageName();
    String ticker = sbn.getNotification().tickerText.toString();
    Bundle extras = sbn.getNotification().extras;
    String title = extras.getString("android.title");
    String text = extras.getCharSequence("android.text").toString();
    Intent intent = new Intent();
    intent.putExtra("action", notification.contentIntent);

    Log.i("Package", pack);
    Log.i("Ticker", ticker);
    Log.i("Title",title);
    Log.i("Text", text);

    Intent msgrcv = new Intent("Msg");
    msgrcv.putExtra("package", pack);
    msgrcv.putExtra("ticker", ticker);
    msgrcv.putExtra("title", title);
    msgrcv.putExtra("text", text);


    LocalBroadcastManager.getInstance(context).sendBroadcast(msgrcv);

广播接收器

public void onReceive(Context context, final Intent intent) {
            String pack = intent.getStringExtra("package");
            String title = intent.getStringExtra("title");
            String text = intent.getStringExtra("text");
            int seconds = Integer.parseInt(duration);

【问题讨论】:

    标签: java android android-intent broadcastreceiver android-pendingintent


    【解决方案1】:

    使用intent.getParcelableExtra()

    Intent intent1 = intent.getParcelableExtra("action");
    

    【讨论】:

    • 嘿,我不知道你是否看到了我的更新,但基本上我试图做的事情没有奏效。所以我想知道您是否知道如何正确编写代码以便能够通过广播发送方发送 Intent 然后接收它。
    • @SkylerMartin 为什么这不起作用? Intent 是可打包的,您可以将可打包的附加内容放在意图上,并在收到意图的任何地方获取它们。到目前为止,您的问题没有改变,并且没有新信息表明这不起作用(除了您不再将额外内容放在您正在广播的 msgrcv 意图上)。也许您应该详细说明您的问题;我看到了 3 个意图,但不知道它们都是什么意思,除了你向自己广播的那个。
    • 我收到此错误尝试在空对象引用上调用虚拟方法 'void android.app.PendingIntent.send()'
    • @SkylerMartin 如果上面的代码是最新的,那么您不会在msgrcv(您向自己广播的 Intent)上添加 Intent 作为额外内容。我看到您已经创建了另一个 Intent(上面名为 intent)并给出了一个名为“action”的额外名称,但我没有看到这个 Intent 在任何地方使用。确保你正在广播的意图有额外的;如果这不能解决您的问题,请更新(或至少澄清)您上面的代码,因为这是我们必须继续进行的唯一信息。
    【解决方案2】:

    试试这个:

    public void onNotificationPosted(StatusBarNotification sbn) {
    String pack=sbn.getPackageName();
    String ticker=sbn.getNotification().tickerText.toString();
    Bundle extras=sbn.getNotification().extras;
    String title=extras.getString("android.title");
    String text=extras.getCharSequence("android.text").toString();
    
    Log.i("Package", pack);
    Log.i("Ticker", ticker);
    Log.i("Title",title);
    Log.i("Text", text);
    Intent msgrcv = new Intent();
    msgrcv.putExtra("package", pack);
    msgrcv.putExtra("ticker", ticker);
    msgrcv.putExtra("title", title);
    msgrcv.putExtra("text", text);
    msgrcv.setAction ("myapp.broadcast.notification");
    context.sendBroadcast(msgrcv);
    

    广播接收器

    public void onReceive(Context context, final Intent intent) {
            String pack = intent.getStringExtra("package");
            String title = intent.getStringExtra("title");
            String text = intent.getStringExtra("text");
            int seconds = Integer.parseInt(duration);
    

    并且确保您的意图过滤器 <action/> 设置为 <action android:name="myapp.broadcast.notification"/>

    【讨论】:

    • 该代码应该可以很好地工作,但是我的 onReceive 代码中需要什么代码来获得意图?当你说我需要那个 Intent 过滤器时,它需要进入 Service 类还是 Main Activity 类?顺便感谢您的帮助!
    • 把我在Title Broadcast Receiver下的代码放在广播接收器类里面。至于动作标签。在您声明广播接收器的清单文件中,我假设在意图过滤器下添加
    • 如果您以编程方式声明了它们,或者您根本没有声明它们,请告诉我。并告诉我你的广播接收器的名称。
    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 2011-02-10
    • 1970-01-01
    • 2011-04-11
    • 2022-01-05
    • 2016-03-12
    • 1970-01-01
    • 2015-09-04
    相关资源
    最近更新 更多