答案 0 :(得分:5)
他们通过ACTION_PROCESS_TEXT
添加了支持<intent-filter>
的活动:
<intent-filter >
<action android:name="android.intent.action.PROCESS_TEXT"/>
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
在发送到活动的Intent
上(通过getIntent()
获得),EXTRA_PROCESS_TEXT
会保留一些文字,如果文字是只读的,EXTRA_PROCESS_TEXT_READONLY
会保留该文字。当用户选择启动此活动的菜单选项时,文本将突出显示。
活动将通过startActivityForResult()
调用。结果Intent
可以有自己的EXTRA_PROCESS_TEXT
值,这将是替换文本。
答案 1 :(得分:1)
一个完整的例子:
AndroidManifest.xml - 特定于活动的代码:
<activity
android:name=".Activity"
android:label="@string/app_name" >
<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.PROCESS_TEXT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
在 Activity.java 中 - 特定于onResume()的代码:
@Override
protected void onResume() {
super.onResume();
// Get Intent
Intent intent = getIntent();
// Clear the intent to prevent again receiving on resuming Main
setIntent(new Intent());
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M &&
intent.getAction().equals(Intent.ACTION_PROCESS_TEXT) &&
intent.hasExtra(Intent.EXTRA_PROCESS_TEXT)) {
// Text received for processing in readonly - i.e. from non-editable EditText
boolean textToProcessIsReadonly = intent.getBooleanExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, false);
// Text received for processing
CharSequence textToProcess = intent.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT);
}
}
在 Activity.java 中 - 发回已处理文本的代码:
private void sendProcessedText() {
Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_PROCESS_TEXT, textProcessed);
setResult(RESULT_OK, intent);
super.finish();
}