2015-06-24 2 views
2

У меня есть два вида деятельности и обслуживания. Я пытаюсь сделать прямой обмен, но он не работает (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 никогда не вызывал.

+0

Что произойдет, если вы просто использовать 'startActivity (умысел)' вместо 'startActivity (Intent. createChooser()) '? – ianhanniballake

+0

@ianhanniballake, это странно, но я переместил этот код из модуля в приложение, и сейчас совместное использование работает хорошо. Зачем? Оо – Ufkoku

+0

У меня такая же проблема. Как вы переместили его из модуля в приложение? –

ответ

0

Из документации на Android Developer Pages:

Создатель цели может поставить рейтинговую оценку. Предполагается, что эта оценка относится к другим целям, предоставленным одним и тем же запросом. Оценки должны быть в диапазоне от 0.0f (маловероятное соответствие) до 1.0f (очень релевантное соответствие). Очки для набора целей не нужно подводить к 1.

Попробуйте положить некоторые действительный счет вместо «я», так как я могу пойти Шифрование до 4 в соответствии с вашим кодом.

Кроме того, поставить полное название классов и услуг в очевидном например

<service 
    android:name="com.your.package.DirectSharePicker" 
    ... 

Вместо

<service 
    android:name=".DirectSharePicker" 
    ... 
Смежные вопросы