我正在为自己编写语言词典应用程序(作为一种Android编程学习练习)。
我希望我的应用程序在其他应用程序的意图选择器中列为选项,因此我将这些代码行添加到我的清单中:
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
我的应用已成功显示在其他应用(例如浏览器)的操作菜单中,这很好。当我从浏览器操作菜单中选择时,我的应用程序也通过Share成功调用。
现在我希望我的应用程序接收并处理从其他应用程序发送的文本(一个单词),然后自动查看文本以查找其定义。我将以下代码行添加到我的应用程序的主要活动中:
//(under onCreate)
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
EditText edittext = (EditText) findViewById(R.id.edWord);
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if (sharedText != null) {
edittext.setText(sharedText);
}
}
}
但是,在此阶段,每次通过“共享”从操作菜单中选择我的应用程序时,浏览器都会崩溃。
所以谈到我的问题:
很抱歉这些都是noobie问题(不过我很头疼)。
非常感谢你的帮助。
更新1
谢谢,CommonWare。当浏览器崩溃但我选择&#34;分享&#34;从我的应用程序的Web视图,我得到这个日志猫:
08-09 18:17:23.726: W/dalvikvm(1111): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
08-09 18:17:23.776: E/AndroidRuntime(1111): FATAL EXCEPTION: main
08-09 18:17:23.776: E/AndroidRuntime(1111): java.lang.RuntimeException: Unable to start activity ComponentInfo{peter.kadict/peter.kadict.Kadict}: java.lang.NullPointerException
08-09 18:17:23.776: E/AndroidRuntime(1111): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
08-09 18:17:23.776: E/AndroidRuntime(1111): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
08-09 18:17:23.776: E/AndroidRuntime(1111): at android.app.ActivityThread.access$600(ActivityThread.java:122)
08-09 18:17:23.776: E/AndroidRuntime(1111): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
08-09 18:17:23.776: E/AndroidRuntime(1111): at android.os.Handler.dispatchMessage(Handler.java:99)
08-09 18:17:23.776: E/AndroidRuntime(1111): at android.os.Looper.loop(Looper.java:137)
08-09 18:17:23.776: E/AndroidRuntime(1111): at android.app.ActivityThread.main(ActivityThread.java:4340)
08-09 18:17:23.776: E/AndroidRuntime(1111): at java.lang.reflect.Method.invokeNative(Native Method)
08-09 18:17:23.776: E/AndroidRuntime(1111): at java.lang.reflect.Method.invoke(Method.java:511)
08-09 18:17:23.776: E/AndroidRuntime(1111): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-09 18:17:23.776: E/AndroidRuntime(1111): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-09 18:17:23.776: E/AndroidRuntime(1111): at dalvik.system.NativeStart.main(Native Method)
08-09 18:17:23.776: E/AndroidRuntime(1111): Caused by: java.lang.NullPointerException
08-09 18:17:23.776: E/AndroidRuntime(1111): at peter.kadict.Kadict.onCreate(Kadict.java:449)
08-09 18:17:23.776: E/AndroidRuntime(1111): at android.app.Activity.performCreate(Activity.java:4465)
08-09 18:17:23.776: E/AndroidRuntime(1111): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
08-09 18:17:23.776: E/AndroidRuntime(1111): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
08-09 18:17:23.776: E/AndroidRuntime(1111): ... 11 more
更新2
此代码通过 CommonsWare 解决了这个问题。
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if (sharedText != null) {
setContentView(R.layout.main);
EditText edittext = (EditText) findViewById(R.id.edWord);
edittext.setText(sharedText);
}
}
}
但它没有完成任务:应用程序已加载但似乎没有接收和处理从其他应用程序发送的文本(单词)。
你能帮帮忙吗?非常感谢。答案 0 :(得分:1)
或者:
您尚未拨打setContentView()
或
您的EditText
小部件android:id
@+id/edWord
或
清理项目(例如,项目&gt;从Eclipse主菜单中清除)并再次尝试
答案 1 :(得分:1)
所以我遇到了同样的问题,我不知道这些活动有什么问题,所以我通过获取共享文本并将其放入一个新的意图来解决问题,以便用它来做我想做的事情
这是我的代码
public class GetFromShared extends Activity {
TextView tex;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Intent intent = this.getIntent();
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
Log.d("Shared text is", sharedText);
Intent rooy = new Intent(getApplicationContext(),
BayenELText.class);
rooy.putExtra("GotText", sharedText);
startActivity(rooy);
}
}
}
}
接收课程
public class BayenELText extends Activity {
TextView blabla;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.getsharedtext);
blabla = (TextView) findViewById(R.id.etSharedText);
Bundle extras = getIntent().getExtras();
String hloho = extras.getString("GotText");
blabla.setText(hloho);
}
}
日志显示共享文本,当它从share via调用时,但我想到的是Intent过滤器,当它被
调用时<action android:name="android.intent.action.SEND" />
没有permmision来对视图进行任何更改,以便我如何解决它并且工作正常;)
答案 2 :(得分:0)
当我看到这个logcat输出时,我立即想到无法找到活动的事实。如果是这种情况,将会抛出NPE。
所以:
1.您的AndroidManifest.xml中是否有活动?
2.是否可以使用adb shell am start -n peter.kadict/peter.kadict.Kadict
自己开始活动?