无法从intent.getParcelableExtra(Intent.EXTRA_STREAM)获取捕获的屏幕截图的URI!

时间:2016-10-28 11:03:07

标签: android android-intent screenshot intentfilter

当我从URI对话框中选择我的应用时,我试图获取刚捕获的screenshot Open With。但是我总是在提供的代码示例中从intent.getParcelableExtra(Intent.EXTRA_STREAM)获取null。

这是我的intent filter

实施了两个intent-filter s

第一个:使我的活动成为主要和发射器。

第二个:使其成为图像查看器。(在系统上将此活动注册为图像查看器)

<intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
   <action android:name="android.intent.action.VIEW" />
   <category android:name="android.intent.category.DEFAULT" />
   <data android:mimeType="image/*" />
</intent-filter>

这就是我试图从调用我的活动的意图中获取URI的方式。

Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();

if (Intent.ACTION_VIEW.equals(action) && type != null) {
    if (type.startsWith("image/")) {
        Uri mediaUri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
        // Here mediaUri is always null 
    }
}

2 个答案:

答案 0 :(得分:1)

Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();

if (Intent.ACTION_VIEW.equals(action) && type != null) {
    if (type.startsWith("image/")) {
        Uri mediaUri = (Uri)intent.getParcelableExtra(Intent.EXTRA_STREAM);
        // Here mediaUri is always null 
    }
}

答案 1 :(得分:1)

引用the documentation for ACTION_VIEW

  

输入:getData()是从中检索数据的URI。

因此,请将您的代码更改为:

Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();

if (Intent.ACTION_VIEW.equals(action) && type != null) {
    if (type.startsWith("image/")) {
        Uri mediaUri = intent.getData();
    }
}