Pra*_*mar 7 android copy-paste webview android-intent long-press
在我的活动中,我有一个Web视图,在manifest.xml中,我已经声明了这样的intent过滤器
<activity
android:name=".ui.socialNetwork.MySocialNetworkActivity"
android:configChanges="orientation|screenSize"
android:process=":fb"
android:screenOrientation="portrait" >
</activity>
<activity-alias
android:targetActivity=".ui.socialNetwork.MySocialNetworkActivity"
android:name=".AliasMySocialNetworkActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.PROCESS_TEXT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity-alias>
Run Code Online (Sandbox Code Playgroud)
这不是发射器活动.这里使用的intent过滤器用于Web视图上的复制粘贴工具栏长按.这很好用.除此之外,我想使用Webview.setOnLongClickListener()获取其他选项,我实现了这样.
webView = (WebView) findViewById(R.id.webview);
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName compName =
new ComponentName(getPackageName(), getPackageName() + ".AliasMySocialNetworkActivity");
pm.setComponentEnabledSetting(
compName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
webView.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
WebView.HitTestResult hitResult = null;
hitResult = webView.getHitTestResult();
if (hitResult != null && hitResult.getExtra() != null) {
final String hitRes = hitResult.getExtra();
if (hitResult.getType() == WebView.HitTestResult.IMAGE_TYPE || hitResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
Intent ImageSaveIntent = new Intent(getApplicationContext(), SaveImage.class);
ImageSaveIntent.putExtra("putImage", hitRes);
startActivity(ImageSaveIntent);
}
if (hitResult.getType() != WebView.HitTestResult.IMAGE_TYPE || hitResult.getType() != WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName compName =
new ComponentName(getPackageName(), getPackageName() + ".AliasMySocialNetworkActivity");
pm.setComponentEnabledSetting(
compName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
}
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
我的问题是
如果我在没有webview.setOnLongClickListener()的情况下单独使用intent过滤器,我可以复制粘贴webview中的文本
如果我单独使用webview.setOnLongClickListener(),我可以做我的其他选项,它工作正常.
如果我实现了intent过滤器和webview.setOnLongClickListener(),我无法从webview复制粘贴文本.webview.setOnLongClickListener()将正常工作.在这里我理解这两个功能都取决于longPress,但我希望两者一起工作.
我搜索了TextType的Webview.HitResult选项,但它没有这样的选项. https://developer.android.com/reference/android/webkit/WebView.HitTestResult.html
请帮我解决这个问题.
And*_*nko 10
您可以使用Activity Alias执行此操作(以编程方式从android清单中禁用intent过滤器):
1)将AndroidManifest.xml中的(例如AliasMySocialNetworkActivity)添加到MySocialNetworkActivity并将intent-filter移动到它们.它看起来像那样:
<activity-alias
android:targetActivity=".MySocialNetworkActivity"
android:name=".AliasMySocialNetworkActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.PROCESS_TEXT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity-alias>
Run Code Online (Sandbox Code Playgroud)
2)添加此代码以在需要时抑制别名活动中的intent-filter
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName compName =
new ComponentName(getPackageName(), getPackageName() + ".AliasMySocialNetworkActivity");
pm.setComponentEnabledSetting(
compName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)
3)在需要时恢复intent-filter:
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName compName =
new ComponentName(getPackageName(), getPackageName() + ".AliasMySocialNetworkActivity");
pm.setComponentEnabledSetting(
compName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)
更新
其实你不需要Alias,只需使用PackageManager.COMPONENT_ENABLED_STATE_DISABLED/PackageManager.COMPONENT_ENABLED_STATE_ENABLED
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName compName =
new ComponentName(getPackageName(), getPackageName() + ".MySocialNetworkActivity");
pm.setComponentEnabledSetting(
compName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)
直接对你的活动.谢谢@pskink.
| 归档时间: |
|
| 查看次数: |
3704 次 |
| 最近记录: |