将浏览器页面共享到我的应用程序并获取屏幕截图
Sharing a browser page to my app and getting the screenshot
我无法从 Intent 中获取一些信息。例如,当用户使用 google chrome 浏览互联网,然后单击菜单按钮并按下共享时,就会生成意图。之后会出现能够过滤意图的应用程序列表。
收到意图后,我已经转储了内容,这是输出:
07-18 12:03:13.825 24548-24548/com.example.expandtest I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@423bdbc0 time:41381656
07-18 12:03:30.935 24548-24548/com.example.expandtest E/Activity﹕ Dumping Intent start
07-18 12:03:30.935 24548-24548/com.example.expandtest E/Activity﹕ [android.intent.extra.SUBJECT=dick swaab - Google Search]
07-18 12:03:30.935 24548-24548/com.example.expandtest E/Activity﹕ [android.intent.extra.TEXT=https://www.google.nl/search?q=dick+swaab&oq=dick+swaab&aqs=chrome..69i57.5033j0j4&client=ms-android-huawei&sourceid=chrome-mobile&espv=1&ie=UTF-8]
07-18 12:03:30.945 24548-24548/com.example.expandtest E/Activity﹕ [share_screenshot_as_stream=content://com.android.chrome.FileProvider/images/screenshot/1437213810717-617998691.jpg]
07-18 12:03:30.945 24548-24548/com.example.expandtest E/Activity﹕ Dumping Intent end
因此查看内容,显然是在您使用浏览器中的共享按钮时截取的屏幕截图。看到这个让我也想提取屏幕截图,而不仅仅是 URL。
但是当我尝试提取图像的 Uri 时,它给了我 null。这行代码准确的说:
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
尽管转储的意图内容清楚地显示有可用的屏幕截图,但我无法提取它。转储还显示图像 URI 是一个流,所以我想我应该可以用上面的行提取它,但我做错了。
所以我尝试了不同的方法,但唯一可行的方法是以与我在输出中转储内容相同的方式提取 URI 部分,这意味着手动提取字符串的 URI 部分。但是如果我能用 android 的方式做到这一点,我认为它看起来会好得多。
我尝试过的:
创建时:
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
handleSendText(intent); // Handle text being sent
}
if (type.startsWith("image/")) {
handleSendImage(intent); // Handle single image being sent
}
}
dumpIntent(intent);
获取数据的方法:
void handleSendText(Intent intent) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if (sharedText != null) {
// Update UI to reflect text being shared
Log.d(LOG_TAG, "handle text");
//String uRL = intent.getStringExtra(Intent.EXTRA_TEXT);
mArticleURL.setText(sharedText);
// Uri imageUri = null;
// i tried using the handleSendImage code here to see if it would work
try {
//imageUri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
// imageUri is always null
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
//Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
Log.d(LOG_TAG, "image exists");
mWebThumbNail.setImageURI(null);
mWebThumbNail.setImageURI(imageUri);
}
} catch (Throwable t) {
Log.d(LOG_TAG, "no image available" + t.getMessage());
}
}
}
void handleSendImage(Intent intent) {
Log.d(LOG_TAG, "handle image");
Uri imageUri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
if (imageUri != null) {
//Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
Log.d(LOG_TAG, "image exists");
mWebThumbNail.setImageURI(null);
mWebThumbNail.setImageURI(imageUri);
}
}
public static void dumpIntent(Intent i) {
Bundle bundle = i.getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
Iterator<String> it = keys.iterator();
Log.e(LOG_TAG, "Dumping Intent start");
while (it.hasNext()) {
String key = it.next();
Log.e(LOG_TAG, "[" + key + "=" + bundle.get(key) + "]");
}
Log.e(LOG_TAG, "Dumping Intent end");
}
}
如果有人能指出我的缺点我会很高兴!
为了完整起见,这是我的清单
<activity
android:name=".ShareLink"
android:label="Add to LinkHub" >
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
问题不应该出现在清单中,因为我已经 google 了解了很多。不过,我总是有可能漏掉一些东西。
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);.
你试过了吗
Uri imageUri = (Uri) intent.getParcelableExtra( "share_screenshot_as_stream");
改为?
我无法从 Intent 中获取一些信息。例如,当用户使用 google chrome 浏览互联网,然后单击菜单按钮并按下共享时,就会生成意图。之后会出现能够过滤意图的应用程序列表。
收到意图后,我已经转储了内容,这是输出:
07-18 12:03:13.825 24548-24548/com.example.expandtest I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@423bdbc0 time:41381656
07-18 12:03:30.935 24548-24548/com.example.expandtest E/Activity﹕ Dumping Intent start
07-18 12:03:30.935 24548-24548/com.example.expandtest E/Activity﹕ [android.intent.extra.SUBJECT=dick swaab - Google Search]
07-18 12:03:30.935 24548-24548/com.example.expandtest E/Activity﹕ [android.intent.extra.TEXT=https://www.google.nl/search?q=dick+swaab&oq=dick+swaab&aqs=chrome..69i57.5033j0j4&client=ms-android-huawei&sourceid=chrome-mobile&espv=1&ie=UTF-8]
07-18 12:03:30.945 24548-24548/com.example.expandtest E/Activity﹕ [share_screenshot_as_stream=content://com.android.chrome.FileProvider/images/screenshot/1437213810717-617998691.jpg]
07-18 12:03:30.945 24548-24548/com.example.expandtest E/Activity﹕ Dumping Intent end
因此查看内容,显然是在您使用浏览器中的共享按钮时截取的屏幕截图。看到这个让我也想提取屏幕截图,而不仅仅是 URL。
但是当我尝试提取图像的 Uri 时,它给了我 null。这行代码准确的说:
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
尽管转储的意图内容清楚地显示有可用的屏幕截图,但我无法提取它。转储还显示图像 URI 是一个流,所以我想我应该可以用上面的行提取它,但我做错了。
所以我尝试了不同的方法,但唯一可行的方法是以与我在输出中转储内容相同的方式提取 URI 部分,这意味着手动提取字符串的 URI 部分。但是如果我能用 android 的方式做到这一点,我认为它看起来会好得多。
我尝试过的:
创建时:
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
handleSendText(intent); // Handle text being sent
}
if (type.startsWith("image/")) {
handleSendImage(intent); // Handle single image being sent
}
}
dumpIntent(intent);
获取数据的方法:
void handleSendText(Intent intent) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if (sharedText != null) {
// Update UI to reflect text being shared
Log.d(LOG_TAG, "handle text");
//String uRL = intent.getStringExtra(Intent.EXTRA_TEXT);
mArticleURL.setText(sharedText);
// Uri imageUri = null;
// i tried using the handleSendImage code here to see if it would work
try {
//imageUri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
// imageUri is always null
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
//Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
Log.d(LOG_TAG, "image exists");
mWebThumbNail.setImageURI(null);
mWebThumbNail.setImageURI(imageUri);
}
} catch (Throwable t) {
Log.d(LOG_TAG, "no image available" + t.getMessage());
}
}
}
void handleSendImage(Intent intent) {
Log.d(LOG_TAG, "handle image");
Uri imageUri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
if (imageUri != null) {
//Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
Log.d(LOG_TAG, "image exists");
mWebThumbNail.setImageURI(null);
mWebThumbNail.setImageURI(imageUri);
}
}
public static void dumpIntent(Intent i) {
Bundle bundle = i.getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
Iterator<String> it = keys.iterator();
Log.e(LOG_TAG, "Dumping Intent start");
while (it.hasNext()) {
String key = it.next();
Log.e(LOG_TAG, "[" + key + "=" + bundle.get(key) + "]");
}
Log.e(LOG_TAG, "Dumping Intent end");
}
}
如果有人能指出我的缺点我会很高兴!
为了完整起见,这是我的清单
<activity
android:name=".ShareLink"
android:label="Add to LinkHub" >
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
问题不应该出现在清单中,因为我已经 google 了解了很多。不过,我总是有可能漏掉一些东西。
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);.
你试过了吗
Uri imageUri = (Uri) intent.getParcelableExtra( "share_screenshot_as_stream");
改为?