【问题标题】:Get app package name selected by user for sharing using 'Intent.ACTION_SEND'获取用户选择的应用程序包名称以使用“Intent.ACTION_SEND”进行共享
【发布时间】:2017-02-22 12:27:09
【问题描述】:

我正在使用以下代码来分享文字

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(Intent.EXTRA_TEXT, "share test");
startActivity(Intent.createChooser(sharingIntent, "Share using"));

我想知道用户选择要分享的应用的包名。 我已经尝试使用 IntentSender 为 5.1+ 设备使用以下代码

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.putExtra(Intent.EXTRA_TEXT, "share test");
sharingIntent.setType("text/plain");

Intent receiver = new Intent(this, BroadcastTest.class);
receiver.putExtra("test", "test");

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
Intent chooser = Intent.createChooser(sharingIntent, "Share using", pendingIntent.getIntentSender());
startActivity(chooser);

下面是广播接收器

public class BroadcastTest extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        for (String key : intent.getExtras().keySet()) {
            Log.d(getClass().getSimpleName(), " " + intent.getExtras().get(key));
        }
    }
}

参考了这个答案https://stackoverflow.com/a/38342788/6053724,但没有调用 BroadcastReceiver 的 onReceive()。 为了让它发挥作用,我有什么遗漏吗?

更新:发现上述代码在 5.1(api 22) 上运行良好,但在 6.0(api 23) 上,在拿起应用程序进行分享时不会立即收到广播,或者有时广播会丢失。

【问题讨论】:

  • 您是否通过registerReceiver() 或清单在某处注册了BroadcastReceiver
  • 是的。我已将其添加到清单中。

标签: android android-pendingintent android-broadcastreceiver


【解决方案1】:

【讨论】:

  • 谢谢@piotr。但我不允许使用任何库或自定义 UI 作为选择器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2016-04-12
相关资源
最近更新 更多