Java 我可以在Android上覆盖自动超时吗?
我正在使用Twitter4J发布到Twitter,但你必须打开浏览器并从Twitter获取pin,我的应用才能做到这一点,也可以做到这一点,但当我返回到我的应用时,活动超时并自动关闭。有没有办法让我的活动保持开放?webview不起作用,因为Twitter不允许您使用常规路径进行授权Java 我可以在Android上覆盖自动超时吗?,java,android,twitter,android-activity,twitter4j,Java,Android,Twitter,Android Activity,Twitter4j,我正在使用Twitter4J发布到Twitter,但你必须打开浏览器并从Twitter获取pin,我的应用才能做到这一点,也可以做到这一点,但当我返回到我的应用时,活动超时并自动关闭。有没有办法让我的活动保持开放?webview不起作用,因为Twitter不允许您使用常规路径进行授权 public void TwitterSend () { // The factory instance is re-useable and thread safe. Twitter twitter
public void TwitterSend () {
// The factory instance is re-useable and thread safe.
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(consumer_token, consumer_secret);
//WebView webview = (WebView) findViewById(R.id.webview);
//webview.setVisibility(View.VISIBLE);
//ScrollView sc = (ScrollView) findViewById(R.id.scrollView1);
//sc.setVisibility(View.VISIBLE);
EditText edit = (EditText) findViewById(R.id.editText1);
edit.setVisibility(View.VISIBLE);
RequestToken requestToken = null;
try {
requestToken = twitter.getOAuthRequestToken();
System.out.println(requestToken.toString());
} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
AccessToken accessToken = null;
//webview.loadUrl("https://api.twitter.com/oauth/authorize");
Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse(requestToken.getAuthorizationURL()));
browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(browserIntent);
System.out.println("Open the following URL and grant access to your account:");
System.out.print("Enter the PIN(if aviailable) or just hit enter.[PIN]:");
String pin = edit.getText().toString();
CountDownTimer timer = new CountDownTimer(900000, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
}
};
timer.start();
while(pin.length()<7)
{
pin = edit.getText().toString();
}
System.out.print(pin);
try{
if(pin.length() > 0){
accessToken = twitter.getOAuthAccessToken(requestToken, pin);
}else{
accessToken = twitter.getOAuthAccessToken();
}
} catch (TwitterException te) {
if(401 == te.getStatusCode()){
System.out.println("Unable to get the access token.");
edit.setVisibility(View.GONE);
}else{
te.printStackTrace();
}
}
//persist to the accessToken for future reference.
Status status = null;
try {
SharedPreferences stats = getSharedPreferences(PREFS_NAME, 0);
String quote = stats.getString("shareQuote", "An error has occured. We are Sorry.");
status = twitter.updateStatus(quote);
} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//webview.setVisibility(View.GONE);
//edit.setVisibility(View.GONE);
}
Toast.makeText(getApplicationContext(), "Successfully updated the status to [" + status.getText() + "].", Toast.LENGTH_LONG).show();
System.out.println("Successfully updated the status to [" + status.getText() + "].");
// webview.setVisibility(View.GONE);
edit.setVisibility(View.GONE);
//sc.setVisibility(View.GONE);
/*WebView webview = (WebView) findViewById(R.id.webview);
webview.setVisibility(View.VISIBLE);
Twitter twitter=new TwitterFactory().getInstance();
twitter.setOAuthConsumer(consumer_token, consumer_secret);
AccessToken a = new AccessToken(oauth_token, oauth_token_secret);
twitter.setOAuthAccessToken(a);
try {
RequestToken requestToken = twitter.getOAuthRequestToken("https://api.twitter.com/oauth/request_token");
webview.loadUrl("https://api.twitter.com/oauth/authorize");
} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
}
public void TwitterSend(){
//工厂实例是可重用和线程安全的。
Twitter=new TwitterFactory().getInstance();
setOAuthConsumer(消费者令牌,消费者秘密);
//WebView WebView=(WebView)findViewById(R.id.WebView);
//设置可见性(View.VISIBLE);
//ScrollView sc=(ScrollView)findViewById(R.id.scrollView1);
//sc.setVisibility(View.VISIBLE);
EditText edit=(EditText)findViewById(R.id.editText1);
edit.setVisibility(View.VISIBLE);
RequestToken RequestToken=null;
试一试{
requestToken=twitter.getOAuthRequestToken();
System.out.println(requestToken.toString());
}捕获(twitter异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
AccessToken AccessToken=null;
//webview.loadUrl(“https://api.twitter.com/oauth/authorize");
Intent-browserint=newintent(“android.Intent.action.VIEW”,Uri.parse(requestToken.getAuthorizationURL());
browserIntent.setFlags(意图、标志、活动、新任务);
startActivity(浏览器内容);
System.out.println(“打开以下URL并授予对您帐户的访问权限:”;
System.out.print(“输入PIN(如果可用)或只需按Enter键。[PIN]:”;
字符串pin=edit.getText().toString();
倒计时计时器=新的倒计时计时器(900000,1000){
公共void onTick(长毫秒未完成){
}
公共无效onFinish(){
}
};
timer.start();
while(pin.length()0){
accessToken=twitter.getOAuthAccessToken(requestToken,pin);
}否则{
accessToken=twitter.getOAuthAccessToken();
}
}捕获(twitter异常){
如果(401==te.getStatusCode()){
System.out.println(“无法获取访问令牌”);
edit.setVisibility(View.GONE);
}否则{
te.printStackTrace();
}
}
//保存到accessToken以供将来参考。
状态=空;
试一试{
SharedReferences stats=GetSharedReferences(首选名称,0);
String quote=stats.getString(“shareQuote”,“发生错误。我们很抱歉”);
status=twitter.updateStatus(引号);
}捕获(twitter异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
//webview.setVisibility(View.GONE);
//edit.setVisibility(View.GONE);
}
Toast.makeText(getApplicationContext(),“已成功将状态更新为[”+status.getText()+“]”,Toast.LENGTH_LONG.show();
System.out.println(“已成功将状态更新为[“+status.getText()+”)”;
//webview.setVisibility(View.GONE);
edit.setVisibility(View.GONE);
//sc.setVisibility(View.GONE);
/*WebView WebView=(WebView)findViewById(R.id.WebView);
设置可见性(View.VISIBLE);
Twitter=new TwitterFactory().getInstance();
setOAuthConsumer(消费者令牌,消费者秘密);
AccessToken a=新的AccessToken(oauth_token,oauth_token_secret);
twitter.setOAuthAccessToken(a);
试一试{
RequestToken RequestToken=twitter.getOAuthRequestToken(“https://api.twitter.com/oauth/request_token");
webview.loadUrl(“https://api.twitter.com/oauth/authorize");
}捕获(twitter异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}*/
}
在安卓系统中,强迫活动保持开放状态通常是个坏主意-处理被破坏活动的最佳方法是确保正确处理所有活动的生命周期回调。此页面非常有用:
如果您正确保存了活动的状态,那么系统停止活动时就不会出现问题。所有这些代码都是必需的吗?试着只发布相关的片段,这样我们就可以更好地理解你。我最终编写了一个变通方案。谢谢你。它真的帮助我了解了活动是如何运作的。