2

私の Android アプリでは、たまたま次のコードを使用して、TextView からテキストをコピーしました。

buttonCopy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String copyText;
copyText = textBox2.getText().toString();
myClip = ClipData.newPlainText("text", copyText);
myClipboard.setPrimaryClip(myClip);
Toast.makeText(getApplicationContext(), "Copied",     Toast.LENGTH_SHORT).show();
}
});

アプリに設定した最小 API レベルは API レベル 10 です。

myClip = ClipData.newPlainText("text", copyText);
myClipboard.setPrimaryClip(myClip);

最低 API レベル 11 が必要です。

案の定、私のアプリ ユーザーは次のレポートを送信しています

java.lang.NoClassDefFoundError: android.content.ClipboardManager
at com.nepali_unicode.nepalityping.MainActivity.onCreate(Unknown Source)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)

API レベル 10 の古いデバイスをサポートしたいのですが、古いデバイスのコピー ボタンを有効にするにはどうすればよいですか?

  • 必要な API レベルをサポートする、完全に異なる単一のコードを使用する必要がありますか?
  • または、API 10 を搭載したデバイスが別のコードを使用してテキストをコピーするようにできることはありますか?

私は助けに感謝します。私は初心者です。PHP プログラミングのバックグラウンドが、Android を学ぶきっかけになりました。Udacity の Android Development for Beginners コースを受講しました。やりながら学んでいます。ああ、私はたまたま Android Studio を使用しています。

4

1 に答える 1

2

必要な API レベルをサポートする、完全に異なる単一のコードを使用する必要がありますか?

android.text.ClipboardManagerの のより単純な API を使用できます。これは、すべての API レベルで機能するはずです。あなたの場合、それは単にsetText()テキストをクリップボードに置くために呼び出すだけです。

または、API 10 を搭載したデバイスが別のコードを使用してテキストをコピーするようにできることはありますか?

を使用Build.VERSION.SDK_INTして、使用している Android のバージョンを確認し、さまざまなことを行うことができます。

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) {
  // do the newer API
}
else {
  // do the older API
}

ここでの特定のケースでは、新しいコードはそれ以外のことをしていないように見えるためsetText()、使用するだけのsetText()方が簡単です。しかし、新しいクリップボード API によって提供されるより精巧な機能 (たとえば、HTML やプレーン テキストなど、さまざまな MIME タイプでコンテンツのバリエーションを提供する) を利用している場合は、上記のifテストを使用して、古いデバイスでは正常に機能を低下させます。

于 2015-09-24T21:27:21.930 に答える