Java 直接共享目标未显示在共享选择器中
我正在考虑创建一个tasker插件,允许用户在android 6.0上定制他们的直接共享目标。我已经按照文档中的说明启动并运行了所有内容,但它们没有显示出来。非常感谢您的帮助 下面是manifest.xml:Java 直接共享目标未显示在共享选择器中,java,android,Java,Android,我正在考虑创建一个tasker插件,允许用户在android 6.0上定制他们的直接共享目标。我已经按照文档中的说明启动并运行了所有内容,但它们没有显示出来。非常感谢您的帮助 下面是manifest.xml: <activity android:name=".receiver.ShareReceiver" android:label="Test" android:icon="@drawable/ic_action_labels"> &
<activity android:name=".receiver.ShareReceiver"
android:label="Test"
android:icon="@drawable/ic_action_labels">
<intent-filter android:label="Test" android:icon="@drawable/ic_action_labels">
<action android:name="android.intent.action.SEND"/>
<data android:mimeType="text/plain"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data
android:name="android.service.chooser.chooser_target_service"
android:value=".ui.DirectShareService" />
</activity>
<activity android:name=".ui.ActivityIconSelector"
android:label="Icon Selector">
</activity>
以下是DirectShareService:
public class DirectShareService extends ChooserTargetService {
public SharedPreferences directShare;
public List<ChooserTarget> items;
public int numberOfItems;
public String title;
public String iconText;
@Override
public List<ChooserTarget> onGetChooserTargets(ComponentName targetActivityName, IntentFilter matchedFilter) {
Intent intent = new Intent(this, MainActivity.class);
return getItems(targetActivityName, intent);
}
public List<ChooserTarget> getItems(ComponentName targetActivityName, Intent intent) {
directShare = getSharedPreferences("Direct Share", 0);
numberOfItems = getRightAmount(directShare.getInt("Items", 0));
items = new ArrayList<>();
for (int i = 1; i <= numberOfItems; i++) {
switch (i) {
case 1:
title = directShare.getString("OneTitle", "Not Set");
iconText = directShare.getString("OneIcon", "Not Set");
items.add(getTarget(title, iconText, "", i, targetActivityName, intent));
break;
case 2:
title = directShare.getString("TwoTitle", "Not Set");
iconText = directShare.getString("TwoIcon", "Not Set");
items.add(getTarget(title, iconText, "", i, targetActivityName, intent));
break;
case 3:
title = directShare.getString("ThreeTitle", "Not Set");
iconText = directShare.getString("ThreeIcon", "Not Set");
items.add(getTarget(title, iconText, "", i, targetActivityName, intent));
break;
case 4:
title = directShare.getString("FourTitle", "Not Set");
iconText = directShare.getString("FourIcon", "Not Set");
items.add(getTarget(title, iconText, "", i, targetActivityName, intent));
break;
}
}
return items;
}
public ChooserTarget getTarget(String title, String icon, String command, int num, ComponentName targetActivityName, Intent intent) {
if (icon.equals("Not Set")) {
return new ChooserTarget(title, Icon.createWithResource(this, R.drawable.ic_action_labels), num, targetActivityName, intent.getExtras());
} else
return new ChooserTarget(title, Icon.createWithContentUri(icon), num, targetActivityName, intent.getExtras());
}
公共类DirectShareService扩展了ChooserTargetService{
公众股参考直接股;
公共清单项目;
公共物品;
公共字符串标题;
公共字符串iconText;
@凌驾
OnGetBooserTargets的公共列表(组件名称targetActivityName,IntentFilter matchedFilter){
意向意向=新意向(此,MainActivity.class);
返回getItems(targetActivityName、intent);
}
公共列表getItems(组件名称targetActivityName,意图){
directShare=GetSharedReferences(“直接共享”,0);
numberOfItems=getRightAmount(directShare.getInt(“Items”,0));
items=newarraylist();
对于(int i=1;i,您应该使用此构造函数提醒:
public ChooserTarget(CharSequence title, Icon icon, float score,
ComponentName componentName, @Nullable Bundle intentExtras);
-分数:此目标的排名分数介于0.0f和1.0f之间,包括0.0f和1.0f
在构造函数中,将检查分数:
if (score > 1.f || score < 0.f) {
throw new IllegalArgumentException("Score " + score + " out of range; "
+ "must be between 0.0f and 1.0f");
}
if(分数>1.f | |分数<0.f){
抛出新的IllegalArgumentException(“分数”+分数+”超出范围
+“必须介于0.0f和1.0f之间”);
}
所以请不要在你的代码中用“i”值来填分数!android.service.chooser.chooser\u target\u service
的元素是什么?还有,你是如何测试这个的?@Commonware我只是暂时把主要活动放在这里,同时测试它是否有效(更新了帖子以显示它)。我通过进入google+并分享帖子来测试这一点。“我只是暂时将主要活动放在原处,同时测试它是否有效”-AFAIK,ChooserTargetService
仅用于ACTION\u SEND
,可能ACTION\u SEND\u MULTIPLE
。这是“主要活动”实现其中的一个?@commonware不是,但我只是将其更改为让ACTION_SEND,它们仍然没有出现。我还用getTarget方法更新了帖子,需要注意的是,创建目标时需要一堆额外的东西,这与我在文档中看到的不同“我只是把它改成让ACTION_发送,但他们仍然没有出现“--您是否更改了测试方法,以执行一些可能导致此活动出现在选择器中的操作?请暂时忘记ChooserTargetService
。只需将此活动显示在选择器中即可。然后,将
添加回.FWIW,这是我上次尝试它时使用的,几个月前6.0发布时。