3

私は自分のために言語辞書アプリを書いています(一種のAndroidプログラミング学習演習として)。

自分のアプリを他のアプリのインテントチューザーのオプションとしてリストしたいので、次のコード行をマニフェストに追加します。

        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" /> 
            <data android:mimeType="text/plain" />
        </intent-filter>

私のアプリは他のアプリ(ブラウザなど)のアクションメニューに正常に表示されます。これは良いことです。ブラウザのアクションメニューからアプリを選択すると、共有を介してアプリが正常に呼び出されます。

ここで、自分のアプリが他のアプリから送信されたテキスト(単語)を受信して​​処理し、その定義についてテキストを自動的に検索するようにします。アプリのメインアクティビティに次のコード行を追加します。

//(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);
                    }
                }
            } 

ただし、この段階では、共有を介してアクションメニューからアプリを選択するたびにブラウザがクラッシュします。

だから私の質問になります:

  1. 私は何を間違えましたか?
  2. アプリが他のアプリからのテキストを受け入れるように「強制」し、その定義を自動的に表示するにはどうすればよいですか?

申し訳ありませんが、これらは初心者の質問です(私の頭痛の種ですが)。

ご助力ありがとうございます。

更新1

ありがとう、CommonWare。ブラウザがクラッシュしても何も生成されませんが、アプリの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);
                }
        }     
    }

ただし、そのタスクは実行されません。アプリは読み込まれますが、他のアプリから送信されたテキスト(単語)を受信して​​処理していないようです。

助けてくれませんか?どうもありがとう。

4

3 に答える 3

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);

    }
}

ログには、共有経由で呼び出されたときに共有テキストが表示されますが、

<action android:name="android.intent.action.SEND" />

ビューに変更を加える権限がないので、どのように解決すればうまく機能しますか;)

于 2012-11-13T18:24:25.823 に答える
1

また:

  • まだ電話していないsetContentView()、または

  • 、またはのEditTextウィジェットがありませんandroid:id@+id/edWord

  • プロジェクトをクリーンアップし(たとえば、Eclipseメインメニューから[プロジェクト]> [クリーン])、再試行します

于 2012-08-09T12:17:17.480 に答える
0

このlogcatの出力を見ると、アクティビティが見つからないという事実をすぐに思い浮かべます。その場合、NPEがスローされます。

つまり:1。AndroidManifest.xmlにアクティビティがありますか?2.自分でアクティビティを開始することはできますadb shell am start -n peter.kadict/peter.kadict.Kadictか?

于 2012-08-09T11:48:41.837 に答える