Как я могу передать данные в действие в моем приложении?

#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 . Я думаю, может быть, здесь что-то не так.