4

createChooser() 대화 상자를 사용하여 사용자에게 어떤 앱을 선별했는지 감지하고 싶습니다. 그래서 이렇게 내 BroadcastReceiver 서브 클래스를 만들었습니다createChooser (context, intent, IntentSender)가 실행 된 후에 BroadcastReceiver가 호출되지 않습니다.

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class ShareBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("INFORMATION", "Received intent after selection: "+intent.getExtras().toString()); 
    } 
} 
또한

내 안드로이드 매니페스트 파일로 내 수신기를 추가했습니다 : 여기

<application> 
... 
... 
... 
    <receiver android:name=".helpers.ShareBroadcastReceiver" android:exported="true"/> 
</application> 

그리고는 createChooser를 호출하는 코드는 대화 상자 :

Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND); 
sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
sendIntent.setType("image/png"); 

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) { 
    Log.d("INFORMATION", "The current android version allow us to know what app is chosen by the user."); 

    Intent receiverIntent = new Intent(this,ShareBroadcastReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, receiverIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
    sendIntent = Intent.createChooser(sendIntent,"Share via...", pendingIntent.getIntentSender()); 
} 
startActivity(sendIntent); 

비록 이것이 명시적인 PendingIntentintent-filter없이 직접 ShareBroadcastReceiver 클래스 이름을 사용하고 있기 때문에 사용자가 선택기 대화 상자를 클릭 한 직후에 내 브로드 캐스트 수신기가 콜백되지 않고 무엇이 잘못 되었습니까?

답변

3

코드에 문제가 없습니다. 로그에서

Log.d("INFORMATION", "Received intent after selection: "+intent.getExtras().get(Intent.EXTRA_CHOSEN_COMPONENT));

당신은 내가 구글이 계속 선택 내 경우에는이 같은 것을 (볼 수 있습니다 : 당신은 당신의 의도의 "EXTRA_CHOSEN_COMPONENT"키를 잡으려고 ShareBroadcastReceiveronReceive 방법에 한 줄을 변경해야) :

ComponentInfo{com.google.android.keep/com.google.android.keep.activities.ShareReceiverActivity}