我正在开发一个应用程序,在该应用程序中,用户可以将某些内容发布到 Twitter,也可以拍照以添加到推文中。我是Fabric和Retrofit的新手,所以我对如何实现图像上传以及如何使用状态服务的更新功能使用上传的图像有一些疑问。(我知道 TweetComposer 允许轻松发布带有推文的图像,但我不想要额外的 Twitter UI 元素,而且我还希望能够以编程方式设置与推文关联的位置,这在 TweetComposer 中是不可能的)。
到目前为止,我了解到,为了在使用状态服务更新方法发布的推文中包含图像,我们需要先将图像本身上传到 Twitter。我发现通过 REST API 上传图像是通过使用以下 URL 完成的:
https://upload.twitter.com/1.1/media/upload.json
我还发现可以自定义 Fabric 中提供的 Twitter API 客户端来访问服务端点。
class MyTwitterApiClient extends TwitterApiClient {
public MyTwitterApiClient(TwitterSession session) {
super(session);
}
/**
* Provide CustomService with defined endpoints
*/
public CustomService getCustomService() {
return getService(CustomService.class);
}
}
// example users/show service endpoint
interface CustomService {
@GET("/1.1/users/show.json")
void show(@Query("user_id") long id, Callback<User> cb);
}
Run Code Online (Sandbox Code Playgroud)
但是,我很乐意得到更多解释。首先,我如何更改 API 客户端中的域(到upload.twitter.com)以及我应该在回调中期望什么类型?
另外,如果图像上传成功并且我设法获取了它的 ID,我如何使用它将此媒体对象附加到由状态服务的更新功能创建的推文?我还没有在文档中找到任何附加实体的方法。
到目前为止,我有这个:
public class MyTwitterApiClient extends TwitterApiClient {
public MyTwitterApiClient(TwitterSession …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个应用程序,用户可以在其中拍照并将其上传到 Twitter 服务器(通过媒体/上传端点)以将该媒体实体附加到帖子(也从应用程序发送)。我正在使用 Fabric 访问 Twitter REST API。我的问题是,每当我尝试上传图像时,都会出现管道损坏错误。
这是我的代码的一些部分:
我上传图片的自定义服务:
public interface UploadMediaService {
@Multipart
@POST("/1.1/media/upload.json")
void upload(@Part("media") TypedFile file, @Part("additional_owners") String owners, com.twitter.sdk.android.core.Callback<JSONObject> cb);
}
Run Code Online (Sandbox Code Playgroud)
上传图片文件:
File photo = new File(mCurrentPhotoPath);
TypedFile typedFile = new TypedFile("application/octet-stream", photo);
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://upload.twitter.com")
.setLogLevel(RestAdapter.LogLevel.FULL)
.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Authorization", createSignature(session));
}
})
.build();
UploadMediaService service = restAdapter.create(UploadMediaService.class);
service.upload(typedFile, null, new Callback<JSONObject>() {
@Override
public void success(Result<JSONObject> twitterMediaResult) {
try {
Log.v("success", twitterMediaResult.data.getString("media_id_string"));
MyTwitterApiClient myclient …Run Code Online (Sandbox Code Playgroud) 我有以下问题:我正在开发一个应用程序,用户可以在其中拍照(附加到帖子),图片保存到外部存储.我希望这张照片也出现在图片库中,我正在使用Media Scanner意图,但它似乎不起作用.我在编写代码时遵循官方Android开发人员指南,所以我不知道出了什么问题.
部分代码:
用于捕获图像的意图:
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
Toast.makeText(getActivity(), ex.getMessage(), Toast.LENGTH_SHORT).show();
}
// Continue only if the File was successfully created
if (photoFile != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, …Run Code Online (Sandbox Code Playgroud)