Продолжаем изучать Intent(Намерения) в android. Сегодня мы рассмотрим отправку твитта через twitter из нашего приложения. Дополнительно рассмотрим то, как узнать установлено ли какое-то определенное приложение на нашем устройстве. Программа получилась немного сложнее, чем две предыдущие, но в целом все просто.
На форме нам понадобится edit и кнопка.
Для работы нашего приложения нам потребуется:
1)Определить - установлен ли twitter на нашем устройстве
2)Создать явное намерение
3)Запустить это намерение
Переходим к коду.
1)Дополнительные модули в разделе uses:
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.Net,
FMX.StdCtrls,
Androidapi.JNIBridge,
FMX.Helpers.Android, FMX.Edit;
2)Код кнопки отправить.
procedure TForm1.Button1Click(Sender: TObject);
const Twitter='com.twitter.android';
var
Manager:JPackageManager;
Info:JActivityInfo;
List:JList;
I:Integer;
ResolveInfo:JResolveInfo;
NativeCompName:JComponentName;
Intent:JIntent;
begin
Intent:=TJIntent.Create; //создаем навмерение
Intent.setAction(TJIntent.JavaClass.ACTION_SEND);//указываем действие - отправка данных
Intent.setType(StringToJString('text/plain'));//указываем mime-тип данных(mime-данные которые могут быть переданы через интернет)
Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT,StringToJString(edit1.text));//указали текст твита
Manager :=SharedActivity.getPackageManager;//получение информации обо всех установленных приложениях
List:=Manager.queryIntentActivities(Intent,0);//записываем в переменную List все приложения способные выполнить нашу активность
for I:=0 to List.size-1 do
begin
ResolveInfo:=TJResolveInfo.Wrap((List.get(i)as ILocalObject).GetObjectID);//получаем данные...
Info:=TJActivityInfo.Wrap((ResolveInfo.activityInfo as ILocalObject).GetObjectID);// ...названия приложений способных на нашу активность
if SameText(JStringToString(Info.packageName),Twitter)then//сравниваем строки "twitter(константа com.twitter.android)" и полученные данные
//если пакет приложения='com.twitter.android' тогда...
begin
NativeCompName:=TJComponentName.JavaClass.init
(ResolveInfo.activityInfo.applicationInfo.packageName,ResolveInfo.activityInfo.name); //. получили интерфейс ComponentName для Twitter
Intent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER);//категория означающая, что наша активность может быть начальной в списке
//ApplicationLauncher
Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or//намерение станет началом новой задачи или...
TJIntent.JavaClass.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);// если активность уже была запущена, то она станет первой в списке.
Intent.setComponent(NativeCompName);//необходимый для использования компонент активности
SharedActivity.startActivity(Intent);//запуск активности
end;
end;
end;
Если вы все сделали правильно, то приложение обязательно заработает. Удачи!