Чтобы передавать данные в другие приложения, я использовал неявные намерения, как в примерах ниже:
Intent intent = new Intent();
intent.setAction("com.example.OpenURL");
intent.putExtra("URL_TO_OPEN", url_string);
sendOrderedBroadcastAsUser(intent);
Intent intent = new Intent();
intent.setAction("com.example.CreateUser");
intent.putExtra("Username", uname_string);
intent.putExtra("Password", pw_string);
sendBroadcast(intent);
Intent intent = new Intent();
intent.setAction("com.example.BackupUserData");
intent.setData(file_uri);
intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION);
sendBroadcast(intent);
Но это поведение больше не рекомендуется в Android 5.0
http://developer.android.com/about/versions/android-5.0-changes.html
привязка к сервису
Теперь метод Context.bindService() требует явного намерения и бросает исключение, если дано неявное намерение. Чтобы ваше приложение было безопасным, используйте явное намерение при запуске или привязке вашего Сервиса и не объявлять намерения фильтры для этой услуги.
С исходным кодом Android лучше обозначить класс ContextImpl:
private void validateServiceIntent(Intent service) {
if (service.getComponent() == null && service.getPackage() == null) {
if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP) {
IllegalArgumentException ex = new IllegalArgumentException(
"Service Intent must be explicit: " + service);
throw ex;
} else {
Log.w(TAG, "Implicit intents with startService are not safe: " + service
+ " " + Debug.getCallers(2, 3));
}
}
}
Как я могу справиться с этим?