If you want to share any post in twitter along with image in android Please follow the below steps
Before that you have to create an application in twitter developer console.
https://dev.twitter.com/apps
Then you will get 'Consumer Key' and 'Consumer Secret' from 'Keys and Access Tokens' tab.
now start the android coding.
If you are using Android Studio
http://twitter4j.org/maven2/org/twitter4j/twitter4j-core/4.0.1/
Add these permission in Manifest file.
Now Here is the final MainActivity.java file
AndroidManifest.xml file
activity_webview.xml
WebViewActivity.java
Here is the DOWNLOAD link for the project.
Before that you have to create an application in twitter developer console.
https://dev.twitter.com/apps
Then you will get 'Consumer Key' and 'Consumer Secret' from 'Keys and Access Tokens' tab.
now start the android coding.
If you are using Android Studio
dependencies {
compile 'org.twitter4j:twitter4j-core:4.0.3'
}
If you are using Eclipse then you have to download "twitter4j-core-4.0.1.jar" file from the below linkcompile 'org.twitter4j:twitter4j-core:4.0.3'
}
http://twitter4j.org/maven2/org/twitter4j/twitter4j-core/4.0.1/
Add these permission in Manifest file.
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
Now Here is the final MainActivity.java file
package com.syntax.twittershare;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.InputStream;
import twitter4j.StatusUpdate;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
public class MainActivity extends AppCompatActivity {
Button button_Twitter;
//Twitter Share ----- START
private static SharedPreferences sharedPreferences;
private static final String PREF_NAME = "sample_twitter_pref";
private static final String PREF_KEY_OAUTH_TOKEN = "oauth_token";
private static final String PREF_KEY_OAUTH_SECRET = "oauth_token_secret";
private static final String PREF_KEY_TWITTER_LOGIN = "is_twitter_loggedin";
private static final String PREF_USER_NAME = "twitter_user_name";
private String consumerKey = null;
private String consumerSecret = null;
private String callbackUrl = null;
private String oAuthVerifier = null;
private static Twitter twitter;
private static RequestToken requestToken;
AccessToken accessToken;
String verifier = null;
String toastMessage = "";
private static String TAG = "twitter_share";
Toast toast;
private static Activity activity;
//Twitter Share ----- END
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity = this;
//Twitter Share ----- START
sharedPreferences = getSharedPreferences(PREF_NAME, 0);
consumerKey = getString(R.string.twitter_consumer_key);
consumerSecret = getString(R.string.twitter_consumer_secret);
callbackUrl = getString(R.string.twitter_callback);
oAuthVerifier = getString(R.string.twitter_oauth_verifier);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
boolean isLoggedIn = sharedPreferences.getBoolean(PREF_KEY_TWITTER_LOGIN, false);
if(isLoggedIn) {
Toast.makeText(MainActivity.this, "user already loggedin", Toast.LENGTH_SHORT).show();
} else {
Uri uri = getIntent().getData();
if(uri != null && uri.toString().startsWith(callbackUrl)) {
String verifier = uri.getQueryParameter(oAuthVerifier);
try {
AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
long userId = accessToken.getUserId();
final User user = twitter.showUser(userId);
final String username = user.getName();
saveTwitterInfo(accessToken);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//Twitter Share ----- END
button_Twitter = (Button) findViewById(R.id.button_Twitter);
button_Twitter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isNetworkAvailable()){
loginToTwitter();
}else {
toastMessage = "Internet not available, Please try again later";
try{
toast.getView().isShown(); // true if visible
toast.setText(toastMessage);
} catch (Exception e) { // invisible if exception
toast = Toast.makeText(MainActivity.this, toastMessage, Toast.LENGTH_SHORT);
}
toast.show();
// inTwitterShareFailed();
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//Twitter Share ----- START
if(resultCode == Activity.RESULT_OK && requestCode == 100) {
Log.e(TAG,"Start Twitter Share");
verifier = data.getExtras().getString(oAuthVerifier);
try {
accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
long userId = accessToken.getUserId();
final User user = twitter.showUser(userId);
String username = user.getName();
saveTwitterInfo(accessToken);
} catch (Exception e) {
e.printStackTrace();
}
}else {
Log.e(TAG,"Twitter Share Failed");
// inTwitterShareFailed();
}
//Twitter Share ----- END
}
//Twitter Share ----- START
private void loginToTwitter() {
Log.e(TAG, "loginToTwitter() called with: " + "");
boolean isLoggedIn = sharedPreferences.getBoolean(PREF_KEY_TWITTER_LOGIN, false);
if(!isLoggedIn) {
final ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(consumerKey);
builder.setOAuthConsumerSecret(consumerSecret);
final Configuration configuration = builder.build();
final TwitterFactory factory = new TwitterFactory(configuration);
twitter = factory.getInstance();
try {
requestToken = twitter.getOAuthRequestToken(callbackUrl);
final Intent intent = new Intent(this, WebViewActivity.class);
intent.putExtra(WebViewActivity.EXTRA_URL, requestToken.getAuthenticationURL());
startActivityForResult(intent, 100);
} catch (TwitterException e) {
e.printStackTrace();
}
} else {
Toast.makeText(MainActivity.this, "You already logged in", Toast.LENGTH_SHORT).show();
twitterShare();
}
}
public void twitterShare(){
new updateTwitterStatus().execute("Share text");
}
private void saveTwitterInfo(AccessToken accessToken) {
long userId = accessToken.getUserId();
User user;
try {
user = twitter.showUser(userId);
String username = user.getName();
SharedPreferences.Editor e = sharedPreferences.edit();
e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken());
e.putString(PREF_KEY_OAUTH_SECRET, accessToken.getTokenSecret());
e.putBoolean(PREF_KEY_TWITTER_LOGIN, true);
e.putString(PREF_USER_NAME, username);
e.commit();
} catch (TwitterException e) {
e.printStackTrace();
}
}
class updateTwitterStatus extends AsyncTask {
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Posting to Twitter...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(String... params) {
String status = params[0];
try {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(consumerKey);
builder.setOAuthConsumerSecret(consumerSecret);
String access_token = sharedPreferences.getString(PREF_KEY_OAUTH_TOKEN, "");
String acces_token_secret = sharedPreferences.getString(PREF_KEY_OAUTH_SECRET, "");
AccessToken accessToken = new AccessToken(access_token, acces_token_secret);
Twitter twitter = new TwitterFactory(builder.build()).getInstance(accessToken);
StatusUpdate statusUpdate = new StatusUpdate(status);
InputStream is = getResources().openRawResource(+R.drawable.shareimage);
statusUpdate.setMedia("shareimage.png", is);
twitter4j.Status response = twitter.updateStatus(statusUpdate);
} catch (TwitterException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
pDialog.dismiss();
Log.e(TAG,"Twitter Share Succeed");
Toast.makeText(MainActivity.this, "Posted to Twitter!", Toast.LENGTH_SHORT);
// inTwitterShareSuccessed();
}
}
//Twitter Share ----- END
//Network Checking
public static boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
}
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.InputStream;
import twitter4j.StatusUpdate;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
public class MainActivity extends AppCompatActivity {
Button button_Twitter;
//Twitter Share ----- START
private static SharedPreferences sharedPreferences;
private static final String PREF_NAME = "sample_twitter_pref";
private static final String PREF_KEY_OAUTH_TOKEN = "oauth_token";
private static final String PREF_KEY_OAUTH_SECRET = "oauth_token_secret";
private static final String PREF_KEY_TWITTER_LOGIN = "is_twitter_loggedin";
private static final String PREF_USER_NAME = "twitter_user_name";
private String consumerKey = null;
private String consumerSecret = null;
private String callbackUrl = null;
private String oAuthVerifier = null;
private static Twitter twitter;
private static RequestToken requestToken;
AccessToken accessToken;
String verifier = null;
String toastMessage = "";
private static String TAG = "twitter_share";
Toast toast;
private static Activity activity;
//Twitter Share ----- END
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity = this;
//Twitter Share ----- START
sharedPreferences = getSharedPreferences(PREF_NAME, 0);
consumerKey = getString(R.string.twitter_consumer_key);
consumerSecret = getString(R.string.twitter_consumer_secret);
callbackUrl = getString(R.string.twitter_callback);
oAuthVerifier = getString(R.string.twitter_oauth_verifier);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
boolean isLoggedIn = sharedPreferences.getBoolean(PREF_KEY_TWITTER_LOGIN, false);
if(isLoggedIn) {
Toast.makeText(MainActivity.this, "user already loggedin", Toast.LENGTH_SHORT).show();
} else {
Uri uri = getIntent().getData();
if(uri != null && uri.toString().startsWith(callbackUrl)) {
String verifier = uri.getQueryParameter(oAuthVerifier);
try {
AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
long userId = accessToken.getUserId();
final User user = twitter.showUser(userId);
final String username = user.getName();
saveTwitterInfo(accessToken);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//Twitter Share ----- END
button_Twitter = (Button) findViewById(R.id.button_Twitter);
button_Twitter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isNetworkAvailable()){
loginToTwitter();
}else {
toastMessage = "Internet not available, Please try again later";
try{
toast.getView().isShown(); // true if visible
toast.setText(toastMessage);
} catch (Exception e) { // invisible if exception
toast = Toast.makeText(MainActivity.this, toastMessage, Toast.LENGTH_SHORT);
}
toast.show();
// inTwitterShareFailed();
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//Twitter Share ----- START
if(resultCode == Activity.RESULT_OK && requestCode == 100) {
Log.e(TAG,"Start Twitter Share");
verifier = data.getExtras().getString(oAuthVerifier);
try {
accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
long userId = accessToken.getUserId();
final User user = twitter.showUser(userId);
String username = user.getName();
saveTwitterInfo(accessToken);
} catch (Exception e) {
e.printStackTrace();
}
}else {
Log.e(TAG,"Twitter Share Failed");
// inTwitterShareFailed();
}
//Twitter Share ----- END
}
//Twitter Share ----- START
private void loginToTwitter() {
Log.e(TAG, "loginToTwitter() called with: " + "");
boolean isLoggedIn = sharedPreferences.getBoolean(PREF_KEY_TWITTER_LOGIN, false);
if(!isLoggedIn) {
final ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(consumerKey);
builder.setOAuthConsumerSecret(consumerSecret);
final Configuration configuration = builder.build();
final TwitterFactory factory = new TwitterFactory(configuration);
twitter = factory.getInstance();
try {
requestToken = twitter.getOAuthRequestToken(callbackUrl);
final Intent intent = new Intent(this, WebViewActivity.class);
intent.putExtra(WebViewActivity.EXTRA_URL, requestToken.getAuthenticationURL());
startActivityForResult(intent, 100);
} catch (TwitterException e) {
e.printStackTrace();
}
} else {
Toast.makeText(MainActivity.this, "You already logged in", Toast.LENGTH_SHORT).show();
twitterShare();
}
}
public void twitterShare(){
new updateTwitterStatus().execute("Share text");
}
private void saveTwitterInfo(AccessToken accessToken) {
long userId = accessToken.getUserId();
User user;
try {
user = twitter.showUser(userId);
String username = user.getName();
SharedPreferences.Editor e = sharedPreferences.edit();
e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken());
e.putString(PREF_KEY_OAUTH_SECRET, accessToken.getTokenSecret());
e.putBoolean(PREF_KEY_TWITTER_LOGIN, true);
e.putString(PREF_USER_NAME, username);
e.commit();
} catch (TwitterException e) {
e.printStackTrace();
}
}
class updateTwitterStatus extends AsyncTask
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Posting to Twitter...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(String... params) {
String status = params[0];
try {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(consumerKey);
builder.setOAuthConsumerSecret(consumerSecret);
String access_token = sharedPreferences.getString(PREF_KEY_OAUTH_TOKEN, "");
String acces_token_secret = sharedPreferences.getString(PREF_KEY_OAUTH_SECRET, "");
AccessToken accessToken = new AccessToken(access_token, acces_token_secret);
Twitter twitter = new TwitterFactory(builder.build()).getInstance(accessToken);
StatusUpdate statusUpdate = new StatusUpdate(status);
InputStream is = getResources().openRawResource(+R.drawable.shareimage);
statusUpdate.setMedia("shareimage.png", is);
twitter4j.Status response = twitter.updateStatus(statusUpdate);
} catch (TwitterException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
pDialog.dismiss();
Log.e(TAG,"Twitter Share Succeed");
Toast.makeText(MainActivity.this, "Posted to Twitter!", Toast.LENGTH_SHORT);
// inTwitterShareSuccessed();
}
}
//Twitter Share ----- END
//Network Checking
public static boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
}
AndroidManifest.xml file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.syntax.twittershare">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".WebViewActivity"
android:label="@string/app_name" />
</application>
</manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.syntax.twittershare">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".WebViewActivity"
android:label="@string/app_name" />
</application>
</manifest>
activity_webview.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/urlContainer"
android:orientation="horizontal">
<WebView
android:id="@+id/weView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
</LinearLayout>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/urlContainer"
android:orientation="horizontal">
<WebView
android:id="@+id/weView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
</LinearLayout>
WebViewActivity.java
package com.syntax.twittershare;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebViewActivity extends Activity {
private WebView webView;
public static String EXTRA_URL = "extra_url";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
final String url = this.getIntent().getStringExtra(EXTRA_URL);
if(url == null) {
finish();
}
webView = (WebView) findViewById(R.id.weView);
webView.setWebViewClient(new MyWebViewClient());
webView.loadUrl(url);
}
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.contains(getResources().getString(R.string.twitter_callback))) {
Uri uri = Uri.parse(url);
String verifier = uri.getQueryParameter(getString(R.string.twitter_oauth_verifier));
Intent resultIntent = new Intent();
resultIntent.putExtra(getString(R.string.twitter_oauth_verifier), verifier);
setResult(RESULT_OK, resultIntent);
finish();
return true;
}
return false;
}
}
}
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebViewActivity extends Activity {
private WebView webView;
public static String EXTRA_URL = "extra_url";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
final String url = this.getIntent().getStringExtra(EXTRA_URL);
if(url == null) {
finish();
}
webView = (WebView) findViewById(R.id.weView);
webView.setWebViewClient(new MyWebViewClient());
webView.loadUrl(url);
}
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.contains(getResources().getString(R.string.twitter_callback))) {
Uri uri = Uri.parse(url);
String verifier = uri.getQueryParameter(getString(R.string.twitter_oauth_verifier));
Intent resultIntent = new Intent();
resultIntent.putExtra(getString(R.string.twitter_oauth_verifier), verifier);
setResult(RESULT_OK, resultIntent);
finish();
return true;
}
return false;
}
}
}
Here is the DOWNLOAD link for the project.
No comments:
Post a Comment