#java #android #android-intent
#java #Android #android-намерение
Вопрос:
Если я нажму кнопку «Поделиться», которая появляется при длительном нажатии на текст, я хочу отправить текст в другие действия моего приложения. Я перехожу к другому действию, но нужный мне текст не доставляется. В чем проблема?
Это код действия, который записывает текст, который я хочу доставить.
открытый класс MainActivity расширяет AppCompatActivity {
EditText editText;
Intent sendIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText);
sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_VIEW);
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendIntent.putExtra("TEXT", editText.getText().toString());
sendIntent.setType("text/*");
}
});
}
}
Это фильтр намерений моего XML-кода.
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER" />
<data android:mimeType = "text/*"/>
</intent-filter>
Это часть, которая получает намерение действия, от которого я хочу получать данные.
Намерение receiveIntent = GetIntent(); url = receiveIntent.getStringExtra(«ТЕКСТ»);
WebView.getSettings().setJavaScriptEnabled(true); WebView.loadUrl(url); Это часть с намеренным фильтром XML-кода действия, в котором я хочу получать данные.
<activity android:name=".MyWebBrowser"
android:label="MyWebBrowser">
<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.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/*"/>
</intent-filter>
Комментарии:
1. Куда вы отправляете намерение? Вы должны использовать startActivity(sendIntent) где-нибудь, чтобы передать это намерение в действие, которое вы хотите?
2. @DanBaruch Я хочу отправлять данные через общий ресурс, который появляется при повторном нажатии на текст. Так почему не следует использовать intent?
3. Вы должны использовать intent . Но вам нужно отправить намерение, просто создав его, вы ничего не добьетесь. Вам нужно вызвать startActivity(sendIntent)
4. @DanBaruch Я также пробовал startActivity, но это работает только при первом запуске приложения. Возможно ли получить текст в EditText, который будет доставлен при нажатии share?
Ответ №1:
Вот простой пример для вас:
Вместо долгого нажатия editText
я просто использую кнопку, но, тем не менее, логика остается почти такой же:
// MainActivity. Отсюда мы отправляем текст из EditText во SecondActivity.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
EditText editText = findViewById(R.id.editText);
Intent intent = new Intent(this, SecondActivity.class);
intent.setAction("MyIntentAction");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent.putExtra("TEXT", editText.getText().toString());
startActivity(intent);
finish();
}
});
}
}
// SecondActivity. Получает и отображает текст из MainActivity.
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
TextView textView = findViewById(R.id.textView);
Intent intent = getIntent();
if(intent.getAction().equals("MyIntentAction")) {
String str = intent.getStringExtra("TEXT");
textView.setText(str);
}
}
}
// Для обнаружения длинного щелчка добавьте следующий код в MainActivity:
editText.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
intent.putExtra("TEXT", editText.getText().toString());
startActivity(intent);
finish();
return true;
}
});
Комментарии:
1. Большое вам спасибо за ответ, но я должен сделать это в ситуации, когда я делаю длительное нажатие, а не способ создания кнопки. Есть ли какой-нибудь способ для этого?
2. @SeHoon отредактировал мой пост, добавив код для длительного нажатия.
3. Я понял. Большое спасибо.
4. @SeHoon если ответ вам помог, пожалуйста, отметьте его как
accepted answer
использующий галочку слева рядом с моим ответом. Это очень ценится.5. Извините. Мой вопрос не был решен. Кажется, я написал это сложно. Я хотел отправить его в другое действие, нажав кнопку «Поделиться», которая появляется при выделении текста. Это был не просто длинный щелчок.
Ответ №2:
Я вижу, что вы используете два действия LAUNCHER
с MAIN
в вашем манифесте. Пожалуйста, используйте только один в вашем manifest
.
Чтобы передать данные в другое действие в вашем приложении, вы можете попробовать использовать startActivity
и поместить свои данные в данные намерения:
-
При выполнении действия для открытия
MyWebBrowser
:val intent = Intent(context, MyWebBrowser::class.java) intent.putExtra("TEXT", yourtext) startActivity(intent)
-
Получите текст в своем
MyWebBrowser
:
override fun onCreate(savedInstanceState: Bundle?) {
...
val TEXT = intent.getStringExtra("TEXT")
textView.text = TEXT
}
Комментарии:
1. Я уже знаю о startActivity. Что я хочу знать, так это как управлять кнопкой «Поделиться», когда я долго нажимаю текст. Если я поступлю так, как вы мне сказали, значение intent уже равно нулю до того, как текст будет выделен, и я загрузил фильтр намерений, чтобы использовать неявное намерение, а не явное намерение.
2. Извините, но я пока не совсем понимаю. Какое намерение равно нулю? MainActivity или BrowserActivity?
3. Активность браузера.
4. @SeHoon Попробуйте получить текст в вашем намерении из
onCreate
метода иonNewIntent
. Я думаю, может быть, здесь что-то не так.