У меня есть приложение с двумя действиями: MainActivity, которое содержит поле ввода URL-адреса, где пользователь может ввести URL-адрес видео YouTube и нажать кнопку отправки, чтобы запустить второе действие VideoActivity, которое отображает некоторую информацию об этом видео (извлекается с другого веб-сервера).
Приложение также имеет функцию получения намерений через приложение Youtube.Когда пользователь нажимает кнопку «Поделиться» в приложении Youtube, мое приложение появляется в списке «Поделиться».После нажатия кнопки «Поделиться» в приложении Youtube, MainActivity следует перевести на передний план, а URL-адрес должен быть размещен в поле URL-адреса MainActivity.
Однако это верно только для первого общего ресурса.Если приложение находится в фоновом режиме, когда пользователь делится с приложением Youtube, его перенаправляют на любое последнее видимое действие, будь то MainActivity или VideoActivity (и даже если это MainActivity, URL-адрес не публикуется в поле URL-адреса,но поле остается в том же состоянии, в котором оно было, когда приложение было в последний раз видно).
Вот мой текущий AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.youcmt.youdmcapp">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:launchMode="singleTop">
<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/plain"/>
</intent-filter>
</activity>
<activity
android:name=".VideoActivity"
android:parentActivityName=".MainActivity"/>
<service
android:name=".FetchVideoService"
android:exported="false"/>
</application>
</manifest>
Вот мой код MainActivity.java:
public class MainActivity extends AppCompatActivity {
private ResponseReceiver mReceiver;
private EditText mUrlEditText;
private Button mSearchButton;
private ProgressBar mProgressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
mUrlEditText = findViewById(R.id.url_search_et);
Intent intent = getIntent();
if (intent.getType()!=null &&
intent.getType().equals("text/plain")) {
Bundle extras = getIntent().getExtras();
String value = extras.getString(Intent.EXTRA_TEXT);
if(value!=null)
{
mUrlEditText.setText(value);
}
}
mProgressBar = findViewById(R.id.progress_bar);
mSearchButton = findViewById(R.id.search_button);
mSearchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
askForVideo(mUrlEditText.getText().toString());
mSearchButton.setVisibility(View.INVISIBLE);
mProgressBar.setVisibility(View.VISIBLE);
} catch (Exception e) {
mUrlEditText.setText("");
mUrlEditText.setHint(e.getMessage());
e.printStackTrace();
}
}
});
}
@Override
protected void onResume() {
super.onResume();
//register the ResponseReceiver
mReceiver = new ResponseReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(FETCH_VIDEO_INFO);
registerReceiver(mReceiver, intentFilter);
}
private void askForVideo (String url) throws Exception {
try {
Intent intent = FetchVideoService.newIntent(this, url);
startService(intent);
} catch (Exception e) {
mUrlEditText.setText(e.getMessage());
}
}
public class ResponseReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra(EXTRA_VIDEO_STATUS, FAIL);
mProgressBar.setVisibility(View.INVISIBLE);
mSearchButton.setVisibility(View.VISIBLE);
if(status==FAIL)
{
mUrlEditText.setText("");
mUrlEditText.setHint("Error retrieving video!");
}
else if(status==SUCCESS) {
Video video = intent.getParcelableExtra(EXTRA_VIDEO);
Intent videoActivityIntent =
VideoActivity.newIntent(getApplicationContext(), video);
startActivity(videoActivityIntent);
}
}
}
@Override
protected void onPause() {
unregisterReceiver(mReceiver);
super.onPause();
}
}
Я не думаю, что какие-либо другие файлы будут полезны для понимания проблемы.Хотя многим создателям приложений приходится иметь дело с этим, я не могу найти ответы на эту проблему.Пожалуйста, прокомментируйте, если считаете, что мне нужно добавить дополнительную информацию, и заранее благодарю за любую помощь!
Обновление: тестирование показывает, что после первого использования «Поделиться» с YouTube (и с учетом того, что приложение остается в фоновом режиме), MainActivity больше не получает никаких новых намерений о дальнейших акциях.Тем не менее, мое приложение как-то вышло на первый план.Это очень смущает меня.