Android Activity onCreate从另一个活动返回时被调用两次
我有一个应用程序,在用户在webview活动中使用OAuth进行身份验证后生成音乐,看起来像这样:主播放器活动OAuth活动返回主播放器活动。但是,从OAuth活动调用onCreate方法两次,导致同时生成和播放两个音频曲目。 以下是main活动的部分代码:Android Activity onCreate从另一个活动返回时被调用两次,android,android-activity,Android,Android Activity,我有一个应用程序,在用户在webview活动中使用OAuth进行身份验证后生成音乐,看起来像这样:主播放器活动OAuth活动返回主播放器活动。但是,从OAuth活动调用onCreate方法两次,导致同时生成和播放两个音频曲目。 以下是main活动的部分代码: public class MainActivity extends Activity { int pitch=60; private static final float VISUALIZER_HEIGHT_DIP = 50f; Rando
public class MainActivity extends Activity {
int pitch=60;
private static final float VISUALIZER_HEIGHT_DIP = 50f;
Random rn;
boolean isRunning = true;
boolean isPlaying=false;
SeekBar fSlider;
double sliderval;
MediaPlayer mediaPlayer=new MediaPlayer();
ImageButton startStopButton;
ImageButton stopButton;
SeekBar vSlider;
VisualizerView mVisualizerView;
private Visualizer mVisualizer;
ImageButton connectButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// point the slider to the GUI widget
rn = new Random();
fSlider = (SeekBar) findViewById(R.id.frequency);
fSlider.setProgress(0);
vSlider= (SeekBar) findViewById(R.id.seekBar2);
vSlider.setMax(10);
vSlider.setProgress(0);
TextView viewinterval=(TextView) findViewById(R.id.textView2);
viewinterval.setText("");
startStopButton=(ImageButton) findViewById(R.id.imageButton2);
View activity= this.findViewById(R.id.playerActivity);
stopButton=(ImageButton) findViewById(R.id.imageButton1);
RelativeLayout.LayoutParams params= new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, (int)(VISUALIZER_HEIGHT_DIP * getResources().getDisplayMetrics().density));
params.addRule(RelativeLayout.BELOW, R.id.seekBar2);
mVisualizerView = new VisualizerView(this);
mVisualizerView.setLayoutParams(params);
((ViewGroup) activity).addView(mVisualizerView);
connectButton=(ImageButton) findViewById(R.id.imageButton3);
connectButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
mediaPlayer.pause();
Intent intent= new Intent(getApplicationContext(), WebViewActivity.class);
startActivity(intent);
}
});
if(riskscores.length !=0){
viewinterval.setText("generating audio");
new MIDISequence().execute();
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onPause() {
super.onPause();
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
}
}
class MIDISequence extends AsyncTask<String,Void,String>{
公共类MainActivity扩展活动{
内螺距=60;
专用静态最终浮子可视化仪\u高度\u倾角=50f;
随机rn;
布尔值isRunning=true;
布尔isplay=false;
西格巴滑翔机;
双滑块;
MediaPlayer=新的MediaPlayer();
图像按钮启动按钮;
图像按钮停止按钮;
SeekBar垂直滑翔机;
可视化视图mVisualizerView;
专用可视化工具mVisualizer;
图像按钮连接按钮;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//将滑块指向GUI小部件
rn=新随机数();
fSlider=(SeekBar)findviewbyd(R.id.frequency);
fSlider.setProgress(0);
vSlider=(SeekBar)findViewById(R.id.seekBar2);
vSlider.setMax(10);
vSlider.setProgress(0);
TextView viewinterval=(TextView)findViewById(R.id.textView2);
viewinterval.setText(“”);
startStopButton=(ImageButton)findViewById(R.id.imageButton2);
查看活动=this.findViewById(R.id.playerActivity);
stopButton=(ImageButton)findViewById(R.id.imageButton1);
RelativeLayout.LayoutParams params=新的RelativeLayout.LayoutParams(LayoutParams.MATCH_父项,(int)(可视化工具_高度_倾角*getResources().getDisplayMetrics().density));
参数addRule(RelativeLayout.down,R.id.seekBar2);
mVisualizerView=新的可视化视图(此视图);
mVisualizerView.setLayoutParams(参数);
((视图组)活动).addView(mVisualizerView);
connectButton=(ImageButton)findViewById(R.id.imageButton3);
connectButton.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图arg0){
mediaPlayer.pause();
Intent Intent=新的Intent(getApplicationContext(),WebViewActivity.class);
星触觉(意向);
}
});
如果(riskscores.length!=0){
viewinterval.setText(“生成音频”);
新建MIDISequence().execute();
}
};
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
@凌驾
受保护的void onPause(){
super.onPause();
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
}
}
类MIDISequence扩展异步任务{
下面是我的OAuth活动的代码
public class WebViewActivity extends Activity {
private WebView gWebView;
final String REDIRECT_URI = "https://localhost:5000/receive_code";
final String CLIENT_ID = "can't post it here";
final String CLIENT_SECRET = "can't post it here";
final String SCOPE = "basic names genomes analyses";
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
gWebView = (WebView) findViewById(R.id.webView1);
gWebView.loadUrl("https://api.23andme.com/authorize/?redirect_uri="
+ REDIRECT_URI + "&response_type=code&client_id=" + CLIENT_ID
+ "&scope=" + SCOPE);
Log.d("WEBVIEW", "got to webpage");
gWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (url.startsWith(REDIRECT_URI)) {
Log.d("WEBVIEW", "onpagefinished is called");
System.out.println("got to override");
if (url.indexOf("code=") != -1) {
//if the query contains code
String queryString = null;
try {
queryString = new URL(url).getQuery();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(queryString);
String[] params = queryString.split("&");
String code = null;
for (String param : params) {
if (param.startsWith("code=")) {
code = param.substring(param.indexOf('=') + 1);
}
}
gWebView.setVisibility(View.GONE);
new PostRequest().execute(code);
// don't go to redirectUri
}
}
}
});
}
class PostRequest extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... params) {
code retrieving client data.....
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
System.out.println("CPE" + e);
} catch(SocketException ex)
{
Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage());
ex.printStackTrace();
return "error occured";
} catch (JSONException e) {
e.printStackTrace();
return "error occured";
} catch (IllegalStateException e) {
e.printStackTrace();
return "error occured";
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "error occured";
}
}
return "request complete";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.d("Post result", result);
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
}
}
公共类WebViewActivity扩展活动{
私有网络视图;
最终字符串重定向_URI=”https://localhost:5000/receive_code";
最终字符串CLIENT_ID=“无法在此发布”;
最后一个字符串CLIENT_SECRET=“无法在此处发布”;
final String SCOPE=“基本名称基因组分析”;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
gWebView=(WebView)findViewById(R.id.webView1);
gWebView.loadUrl(“https://api.23andme.com/authorize/?redirect_uri="
+重定向_URI+“&response_type=code&client_id=“+client_id
+“&scope=“+scope”);
Log.d(“网络视图”,“进入网页”);
setWebViewClient(新的WebViewClient(){
@凌驾
public void onPageStarted(WebView视图、字符串url、位图favicon){
//TODO自动生成的方法存根
super.onPageStarted(视图、url、favicon);
}
@凌驾
公共void onPageFinished(WebView视图,字符串url){
super.onPageFinished(视图、url);
if(url.startsWith(重定向URI)){
Log.d(“WEBVIEW”,“称为onpagefinished”);
System.out.println(“得到覆盖”);
如果(url.indexOf(“code=)!=-1){
//如果查询包含代码
字符串queryString=null;
试一试{
queryString=新URL(URL).getQuery();
}捕获(格式错误){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
System.out.println(查询字符串);
String[]params=queryString.split(&);
字符串代码=null;
for(字符串参数:params){
if(参数startsWith(“code=)){
代码=参数子字符串(参数indexOf('=')+1);
}
}
gWebView.setVisibility(View.GONE);
new PostRequest().execute(代码);
//不要去看电影
}
}
}
});
}
类PostRequest扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
正在检索客户端数据的代码。。。。。
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
系统输出打印项次(“CPE”+e);
}捕获(SocketException例外)
{
Log.e(“错误:”,“soapPrimitiveData()上的错误”+ex.getMessage());
例如printStackTrace();
返回“发生错误”;
}捕获(JSONException e){
e、 printStackTrace();
返回“发生错误”;
}捕获(非法状态){
e、 printStackTrace();
返回“发生错误”;
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace()
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.d("Post result", result);
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.d("Post result", result);
finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
if(savedInstanceState == null){
// everything else that doesn't update UI
}
}