2014년 9월 3일 수요일

Android_Intent방식을 활용한 Social 기능 구현_Filter 적용하기.

Explain.
앞서, intent기능을 활용한 social기능 구현하는법을 포스팅하였습니다.
이번에는 각 intent마다 필터링을 하여
각 app 마다 맞춰줘야할 템플릿을 맞춰주는것을 포스팅.


Code.
public void Share()
{
 File videoFile = new File("My Video File Path");

 Intent shareIntent = new Intent(Intent.ACTION_SEND);
 
 shareIntent.setType("video/mp4");
 shareIntent.putExtra(Intent.EXTRA_SUBJECT, "My Video");  
 shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(videoFile));
 shareIntent.putExtra(Intent.EXTRA_TEXT, "Enjoy the Video");
 

 PackageManager pm = getPackageManager();
 Intent sendIntent = new Intent(Intent.ACTION_SEND);
 sendIntent.setType("text/plain");
 
 Intent openInChooser = Intent.createChooser(shareIntent, "select app to share"); 
// shareIntent를 기본으로한 chooser 생성.
 
 List<ResolveInfo> resInfo = pm.queryIntentActivities(shareIntent, 0); 
// share intent를 지원하는 resolveinfo 를 받아온다.
 List<LabeledIntent> intentList = new ArrayList<LabeledIntent>(); 
// 추가 intent를 담을 공간.
 
 for(ResolveInfo ri : resInfo) 
// 위에서 받아온 resolveinfo 반복(foreach)
 {
  String packageName = ri.activityInfo.packageName; 
  
  if(packageName.contains("android.email")){ 
// 위에서 생성한 intent는 email 용이므로 intent에 email package를 넣어준다.
   shareIntent.setPackage(packageName);
  } else { // 그외의 의경우
   Intent intent = new Intent();
   intent.setComponent(new ComponentName(packageName, ri.activityInfo.name));
   intent.setAction(Intent.ACTION_SEND);
   intent.setType("video/mp4");
      if(packageName.contains("youtube")) // 현재 youtube filter적용 예시.
      {
       Log.d("SHARE", "In Youtube : " + packageName);
       ContentValues content = new ContentValues(4);
       content.put(Video.VideoColumns.TITLE, "My Video Title");
       content.put(Video.VideoColumns.DATE_ADDED,
        System.currentTimeMillis() / 1000);
       content.put(Video.Media.MIME_TYPE, "video/mp4");
       content.put(MediaStore.Video.Media.DATA, videoFile.getAbsolutePath());
       ContentResolver resolver = getBaseContext().getContentResolver();
       Uri uri = resolver.insert(MediaStore.Video.Media.INTERNAL_CONTENT_URI, content); 
       // Extnernal 형식의 path의 경우 EXTERNAL_CONTENT_URI 사용
       
       intent.setType("video/*");
       intent.putExtra(Intent.EXTRA_STREAM, uri);
      }
      else // Youtube가 아닌 경우.
      {
       Log.d("SHARE", "Other : " + packageName);
       intent.putExtra(Intent.EXTRA_SUBJECT, "Video");  
       intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(videoFile));
       intent.putExtra(Intent.EXTRA_TEXT, "Enjoy the Video");
      }

      intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm), ri.icon));
  }

 }

 LabeledIntent[] extraIntents = intentList.toArray( new LabeledIntent[ intentList.size() ]);

 openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
 startActivity(openInChooser);

}
Categories: ,

0 개의 댓글:

댓글 쓰기