У меня есть два вида деятельности и обслуживания. Я пытаюсь сделать прямой обмен, но он не работает (Android M прямого обмена
Первая активность, что передача данных
public class MainShareActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_share_main);
}
public void share(View view){
startService(new Intent(this, DirectSharePicker.class));
EditText etShare = (EditText) findViewById(R.id.sharedText);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, etShare.getText().toString());
startActivity(Intent.createChooser(intent, "Direct share demo"));
}
активность, что уловы SEND
public class CatchSendActivity extends AppCompatActivity {
public static final String EXTRA_USER_ID = "userId";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shared);
TextView textView = (TextView) findViewById(R.id.result);
Intent intent = getIntent();
int userID = intent.getIntExtra(EXTRA_USER_ID, -1);
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
textView.setText(userID + ": " + sharedText);
}
Целевая служба
public class DirectSharePicker extends ChooserTargetService {
@Override
public List<ChooserTarget> onGetChooserTargets(ComponentName componentName, IntentFilter intentFilter) {
List<ChooserTarget> response = new LinkedList<>();
Icon icon = Icon.createWithResource(this, R.id.icon);
for (int i = 0; i < 5; i++){
String title = "Target" + i;
Intent intent = new Intent(this, CatchSendActivity.class);
intent.putExtra(CatchSendActivity.EXTRA_USER_ID, i);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
ChooserTarget chooserTarget = new ChooserTarget(title, icon, i, pendingIntent);
response.add(chooserTarget);
}
return response;
}
И это мое проявление
<activity
android:name=".MainShareActivity"
android:label="@string/app_name"/>
<service
android:name=".DirectSharePicker"
android:label="SHARING!"
android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
<intent-filter>
<action android:name="android.service.chooser.ChooserTargetService" />
</intent-filter>
</service>
<activity
android:name=".CatchSendActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain" />
</intent-filter>
<meta-data
android:name="android.service.chooser.chooser_target_service"
android:value=".DirectSharePicker" />
</activity>
Но onGetChooserTargets никогда не вызывал.
Что произойдет, если вы просто использовать 'startActivity (умысел)' вместо 'startActivity (Intent. createChooser()) '? – ianhanniballake
@ianhanniballake, это странно, но я переместил этот код из модуля в приложение, и сейчас совместное использование работает хорошо. Зачем? Оо – Ufkoku
У меня такая же проблема. Как вы переместили его из модуля в приложение? –