[ОБНОВЛЕНИЕ 2]: Привет еще раз,
после попытки прикрепить видео к электронному письму, я думаю (хотя и не уверен!), Что я немного ближе кмоя цель, но я обнаружил две проблемы ...
ПРОБЛЕМА 1: FILENAME НЕ ПОКАЗЫВАЕТСЯ ПРАВИЛЬНО : то, что я пытался, было вспомнить название видео, на которое я нажал, чтобы увидетькак я могу получить имя.Это то, что я сделал ...
vGrid.setOnItemClickListener(new OnItemClickListener() {
@Override // click on item and open options menu
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
String [] proj={MediaStore.Video.Media.DATA};
videocursor = managedQuery( MediaStore.Video.Media.EXTERNAL_CONTENT_URI, proj, null,null,null);
video_column_index = videocursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
videocursor.moveToPosition((int) vGrid.getSelectedItemId());
// And here we get the filename
String filename = videocursor.getString(video_column_index);
Toast.makeText(ShareGalleryView.this, filename, Toast.LENGTH_SHORT).show();
openOptionsMenu(); //Opens Options Menu by clicking on an item
}
});
... но вместо отображения только имени файла я получаю sdcard / filename.mp4, поэтому мой первый вопрос - как избавиться от "sdcard /«потому что, если я использую
videocursor.getString(video_column_index)
в
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(Environment.getExternalStorageDirectory(),videocursor.getString(video_column_index))));
для прикрепления видео к почте, я получаю следующий вывод Logcat:
07-18 18:53:47.518: ERROR/Mms/media(179): java.io.FileNotFoundException: /sdcard/sdcard/Video0004.mp4
Это была проблема 1 ... теперь проблема 2
[ПРОБЛЕМА 2] Я также обнаружил, что независимо от того, на какой кнопке я нажимаю, вывод имени файла всегда одинаков ипоказывает только «sdcard / Video0004.mp4», поэтому, когда я нажимаю на Video0010, он также показывает «sdcard / Video0004.mp4», поэтому моя вторая проблема заключается в том, как мне убедиться в том, что в моем коде отображается элемент, на который был нажата также прикрепленный к электронной почте и всегда первое видео.
Пожалуйста, пожалуйста, помогите мне ... Это действительно сбивает меня с толку ... и сейчас у меня нет идеи, как решить эти проблемы.
Iвыложу весь код ниже ... Спасибо
package com.mobilevideoeditor.moved;
import java.io.File;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class ShareGalleryView extends Activity {
private Cursor videocursor;
private int video_column_index;
GridView vGrid;
int count;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.videogrid);
//create new Grid View
vGrid=(GridView) findViewById(R.id.vgrid);
registerForContextMenu(vGrid);
vGrid.setAdapter(new VideoAdapter(this));
init_phone_video_grid();
vGrid.setOnItemClickListener(new OnItemClickListener() {
@Override // click on item and open options menu
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
String [] proj={MediaStore.Video.Media.DATA};
videocursor = managedQuery( MediaStore.Video.Media.EXTERNAL_CONTENT_URI, proj, null,null,null);
video_column_index = videocursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
videocursor.moveToPosition((int) vGrid.getSelectedItemId());
// And here we get the filename
String filename = videocursor.getString(video_column_index);
Toast.makeText(ShareGalleryView.this, filename, Toast.LENGTH_SHORT).show();
openOptionsMenu(); //Opens Options Menu by clicking on an item
}
});
}
private void init_phone_video_grid() {
System.gc();
String[] proj = {
MediaStore.Video.Media._ID,
MediaStore.Video.Media.DISPLAY_NAME,
MediaStore.Video.Media.DATA
};
videocursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, proj, null, null, null);
count = videocursor.getCount();
GridView vGrid=(GridView) findViewById(R.id.vgrid);
vGrid.setAdapter(new VideoAdapter(this));
}
@Override //creates options menu with menu-items
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_gallery_share, menu);
return super.onCreateOptionsMenu(menu);
}
@Override //what happens when a menu item is clicked
public boolean onOptionsItemSelected (MenuItem item){
try{
//Facebook
if (item.getItemId() == R.id.menu_facebook)
{
//TODO open fb
new AlertDialog.Builder(this)
.setTitle("No Service")
.setMessage("Sorry, Facebook is not supported yet!")
.setNeutralButton("Close", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}}).show();
return true;
}
//YouTube
else if (item.getItemId() == R.id.menu_youtube)
{
//TODO open YouTube
new AlertDialog.Builder(this)
.setTitle("No Service")
.setMessage("Sorry, YouTube is not supported yet!")
.setNeutralButton("Close", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}}).show();
return true;
}
else if (item.getItemId() == R.id.menu_email)
{
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setType("video/mp4");
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(Environment.getExternalStorageDirectory(),videocursor.getString(video_column_index))));
startActivity(i);
return true;
}
else if (item.getItemId() == R.id.menu_bluetooth)
{
// TODO send via bluetooth
new AlertDialog.Builder(this)
.setTitle("No Service")
.setMessage("Sorry, Bluetooth is not supported yet!")
.setNeutralButton("Close", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}}).show();
return true;
}
}
catch(Exception e)
{
e.printStackTrace();
}
return super.onContextItemSelected(item);
}
public class VideoAdapter extends BaseAdapter {
private Context vContext;
public VideoAdapter(Context c) {
vContext = c;
}
public int getCount() {
return count;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
System.gc();
TextView tv = new TextView(vContext.getApplicationContext());
String id = null;
if (convertView == null) {
video_column_index =
videocursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
videocursor.moveToPosition(position);
id = videocursor.getString(video_column_index);
tv.setText(id);
} else
tv = (TextView) convertView;
return tv;
}
}
}
Привет всем,
Я работаю над приложением Video, где вы можете нажать на видео с SD-карты,Это событие щелчка открывает меню (я использовал меню опций), которое предоставляет пользователю различные параметры обмена, например, электронную почту, Bluetooth и т. Д. Эта часть до сих пор работает нормально ... Что я сейчас пытаюсь сделать, это когда пользователь выбирает«Отправить по электронной почте» приложение должно открыть приложение электронной почты телефона через намерение (это также работает нормально) и должно непосредственно прикрепить видео, которое он щелкнул прежде, к новому письму.
[ОБНОВЛЕНИЕ] Последняя часть, где я застрял, потому что я не знаю, как получить имя файла изображения, по которому щелкнули, чтобы открыть изображение.Это часть в моем коде, где у меня возникла проблема (см. «НЕ ЗНАЮ, ЧТО СДЕЛАТЬ ЗДЕСЬ» )