gpt4 book ai didi

java - Android Activity 只有在它是主要 Activity 时才能正常工作吗?

转载 作者:行者123 更新时间:2023-11-30 03:52:58 25 4
gpt4 key购买 nike

当我将一个 Activity 设置为启动器时,它工作正常,但是当我从另一个 Activity 启动这个 Activity 时,它会以显示方式正常打开,有些功能可以工作,有些则不能?!我很困惑。

基本上,如果我打开它,因为启动器数据可以通过串行发送和接收。但是,如果我从另一个 Activity 中打开它,而不是通过串行发送绝对废话并且没有任何返回。但是有些部分工作,例如建立串行连接?!

在启动 Activity 中,这是打开我想要的 Activity 的代码:

public void openTextTerminal(View view)
{
Intent intent = new Intent(this, TextBoxActivity.class);
startActivity(intent);
}

这是 list :(我认为我什至不需要 Intent 过滤器?!)

<activity
android:name="com.example.TextBoxActivity"
android:label="@string/title_activity_text_box" >

<intent-filter>
<action android:name="android.intent.action.TextBoxActivity" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

</activity>

完整 list :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example"
android:installLocation="auto"
android:versionCode="49"
android:versionName="1.0.48" >

<uses-sdk
android:minSdkVersion="12"
android:targetSdkVersion="12" />

<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<permission
android:name="com.example.permission.RUN_SCRIPT"
android:description="@string/permdesc_run_script"
android:label="@string/perm_run_script"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="dangerous" />
<permission
android:name="com.example.permission.APPEND_TO_PATH"
android:description="@string/permdesc_append_to_path"
android:label="@string/perm_append_to_path"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="dangerous" />
<permission
android:name="com.example.permission.PREPEND_TO_PATH"
android:description="@string/permdesc_prepend_to_path"
android:label="@string/perm_prepend_to_path"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="dangerous" />

<application
android:icon="@drawable/ic_launcher"
android:label="@string/application_terminal" >
<activity
android:name="com.example.Term"
android:configChanges="keyboard|keyboardHidden|orientation"
android:launchMode="singleTask"
android:theme="@style/Theme"
android:windowSoftInputMode="adjustResize|stateAlwaysVisible" >
<intent-filter>
<action android:name="android.intent.action.TERM" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

<activity-alias
android:name="com.example.TermInternal"
android:exported="false"
android:targetActivity="Term" >
<intent-filter>
<action android:name="com.example.private.OPEN_NEW_WINDOW" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="com.example.private.SWITCH_WINDOW" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>

<activity
android:name="com.example.RemoteInterface"
android:excludeFromRecents="true" >
<intent-filter>
<action android:name="com.example.OPEN_NEW_WINDOW" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

<activity-alias
android:name="com.example.RunScript"
android:permission="com.example.permission.RUN_SCRIPT"
android:targetActivity="RemoteInterface" >
<intent-filter>
<action android:name="com.example.RUN_SCRIPT" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>

<activity
android:name="com.example.TermPreferences"
android:label="@string/preferences" />
<activity
android:name="com.example.WindowList"
android:label="@string/window_list" />

<service android:name="com.example.TermService" />

<activity
android:name="com.example.MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.TextBoxActivity"
android:label="@string/title_activity_text_box" >

<intent-filter>
<action android:name="android.intent.action.TextBoxActivity" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

</activity>
<activity
android:name="com.example.SerialTerminalActivity"
android:label="@string/title_activity_serial_terminal"
android:screenOrientation="landscape" >
</activity>
</application>

</manifest>

我自己在一个程序中复制了代码(即使用一个 Activity 启动第二个 Activity 而没有其他不相关的类)并且它工作正常。我只是复制和粘贴。我对所有文件进行了比较,实际上没有什么不同,就我所见, list 中只有不相关的内容。明天我将检查整个 list (我花了一整天调试只是为了找到这个错误)并重写它或其他东西。

我很好奇为什么一切看起来都在正常工作,但事实并非如此。我本以为一旦启动该 Activity ,无论我如何启动它,一切都完全相同(因为我什么也没传递)。

可能传递了错误的上下文,这里是完整代码:

public class MainActivity extends Activity implements OnClickListener,       OnItemSelectedListener, AdapterConnectionListener, DataListener{


private Spinner mBaudSpinner;
private Spinner mDataSpinner;
private Spinner mParitySpinner;
private Spinner mStopSpinner;
private Spinner mDeviceSpinner;
private Button mConnect;
private ArrayList<String> mDeviceOutputs;
private ArrayList<USB2SerialAdapter> mDeviceAdapters;
private ArrayAdapter<CharSequence> mDeviceSpinnerAdapter;
private USB2SerialAdapter mSelectedAdapter;
private TextView mCurrentSettings;

private Button mUpdateSettings;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);

mConnect = (Button)findViewById(R.id.deviceConnect);
mConnect.setOnClickListener(this);
mUpdateSettings = (Button)findViewById(R.id.updateSettings);
mUpdateSettings.setOnClickListener(this);


mBaudSpinner = (Spinner)findViewById(R.id.baudSpinner);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mBaudSpinner.setAdapter(adapter);
String[] tempArray = SlickUSB2Serial.BAUD_RATES;
for(int i=0;i<tempArray.length;i++)
{
adapter.add(tempArray[i]);
}
mBaudSpinner.setSelection(SlickUSB2Serial.BaudRate.BAUD_9600.ordinal());

mDataSpinner = (Spinner)findViewById(R.id.dataSpinner);
adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mDataSpinner.setAdapter(adapter);
tempArray = SlickUSB2Serial.DATA_BITS;
for(int i=0;i<tempArray.length;i++)
{
adapter.add(tempArray[i]);

}
mDataSpinner.setSelection(SlickUSB2Serial.DataBits.DATA_8_BIT.ordinal());

mParitySpinner = (Spinner)findViewById(R.id.paritySpinner);
adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mParitySpinner.setAdapter(adapter);
tempArray = SlickUSB2Serial.PARITY_OPTIONS;
for(int i=0;i<tempArray.length;i++)
{
adapter.add(tempArray[i]);

}
mParitySpinner.setSelection(SlickUSB2Serial.ParityOption.PARITY_NONE.ordinal());

mStopSpinner = (Spinner)findViewById(R.id.stopSpinner);
adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mStopSpinner.setAdapter(adapter);
tempArray = SlickUSB2Serial.STOP_BITS;
for(int i=0;i<tempArray.length;i++)
{
adapter.add(tempArray[i]);

}
mStopSpinner.setSelection(SlickUSB2Serial.StopBits.STOP_1_BIT.ordinal());

mDeviceAdapters = new ArrayList<USB2SerialAdapter>();
mDeviceOutputs = new ArrayList<String>();

mDeviceSpinner = (Spinner)findViewById(R.id.deviceSpinner);
mDeviceSpinnerAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item);
mDeviceSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mDeviceSpinner.setAdapter(mDeviceSpinnerAdapter);
mDeviceSpinner.setOnItemSelectedListener(this);

mCurrentSettings = (TextView)findViewById(R.id.currentSettings);


SlickUSB2Serial.initialize(this);



}

public void openTerminal(View view) {
// Do something in response to button
Intent intent = new Intent(this, Term.class);
startActivity(intent);
}

public void openTextTerminal(View view) {
// Do something in response to button
Intent intent = new Intent(this, TextBoxActivity.class);
startActivity(intent);

}

public void openSerialTerminal(View view) {
// Do something in response to button
Intent intent = new Intent(this, SerialTerminalActivity.class);
startActivity(intent);

}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
changeSelectedAdapter(mDeviceAdapters.get(position));
}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}

public void changeSelectedAdapter(USB2SerialAdapter adapter){
Toast.makeText(this, "in changeselectedadapter", Toast.LENGTH_SHORT).show();
//if(mSelectedAdapter!=null){
//mDeviceOutputs.set(mDeviceSpinnerAdapter.getPosition(mSelectedAdapter.getDeviceId()+""),mReceiveBox.getText().toString());

mSelectedAdapter = adapter;
mBaudSpinner.setSelection(adapter.getBaudRate().ordinal());
mDataSpinner.setSelection(adapter.getDataBit().ordinal());
mParitySpinner.setSelection(adapter.getParityOption().ordinal());
mStopSpinner.setSelection(adapter.getStopBit().ordinal());

updateCurrentSettingsText();

//mReceiveBox.setText(mDeviceOutputs.get(mDeviceSpinner.getSelectedItemPosition()));
Toast.makeText(this, "Adapter switched toooo: "+adapter.getDeviceId()+"!", Toast.LENGTH_SHORT).show();
}


@Override
public void onClick(View v) {

if(v==mConnect){
SlickUSB2Serial.autoConnect(this);
if(mSelectedAdapter==null){
Toast.makeText(this, "no adapters detected", Toast.LENGTH_SHORT).show();
return;
//String data = mSendBox.getText().toString() + "\r\n";
// mSelectedAdapter.sendData(data.getBytes());
//mSendBox.setText("");

}

Intent intent = new Intent(this, SerialTerminalActivity.class);
startActivity(intent);
}


else if(v==mUpdateSettings){
if(mSelectedAdapter==null){
return;
}

mSelectedAdapter.setCommSettings(BaudRate.values()[mBaudSpinner.getSelectedItemPosition()],
DataBits.values()[mDataSpinner.getSelectedItemPosition()],
ParityOption.values()[mParitySpinner.getSelectedItemPosition()],
StopBits.values()[mStopSpinner.getSelectedItemPosition()]);

updateCurrentSettingsText();
Toast.makeText(this, "Updated Settings", Toast.LENGTH_SHORT).show();

}

}

@Override
public void onAdapterConnected(USB2SerialAdapter adapter) {
adapter.setDataListener(this);
mDeviceAdapters.add(adapter);
mDeviceOutputs.add("");
mDeviceSpinnerAdapter.add(""+adapter.getDeviceId());
mDeviceSpinner.setSelection(mDeviceSpinnerAdapter.getCount()-1);

Toast.makeText(this, "Adapter: "+adapter.getDeviceId()+" Connected!", Toast.LENGTH_SHORT).show();
//Toast.makeText(this, "Baud: "+adapter.getBaudRate()+" Connected!", Toast.LENGTH_SHORT).show();
}

@Override
public void onAdapterConnectionError(int error, String msg) {
// TODO Auto-generated method stub
if(error==AdapterConnectionListener.ERROR_UNKNOWN_IDS){
final AlertDialog dialog = new AlertDialog.Builder(this)
.setIcon(0)
.setTitle("Choose Adapter Type")
.setItems(new String[]{"Prolific", "FTDI"}, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int optionSelected){
if(optionSelected==0)
{
SlickUSB2Serial.connectProlific(MainActivity.this);
}
else
{
SlickUSB2Serial.connectFTDI(MainActivity.this);
}
}
}).create();
dialog.show();
return;
}
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}

private void updateCurrentSettingsText(){
mCurrentSettings.setText("Current Settings Areeee: "+mBaudSpinner.getSelectedItem().toString()
+", "+mDataSpinner.getSelectedItem().toString()
+", "+mParitySpinner.getSelectedItem().toString()
+", "+mStopSpinner.getSelectedItem().toString());
}

@Override
public void onDataReceived(int arg0, byte[] arg1) {
// TODO Auto-generated method stub
Toast.makeText(this, "IN ONDATARECIEVED OHOH", Toast.LENGTH_SHORT).show();
}


public void onDestroy() {
SlickUSB2Serial.cleanup(this);
super.onDestroy();
}

}

最佳答案

这里你使用了this作为上下文,首先你应该了解不同的上下文。

  • this 指的是您当前的对象。在您的情况下,您必须在内部类或某些 ClickEvent 中实现了 Intent ,这就是它指向的内容。

  • Activity.this 指向您当前所在的 Activity 的实例。

  • getApplicationContext() 指的是应用程序的上下文。

现在如果 this 上下文直接在 Activity 的 oncreate() 下,而不在任何其他类或某个按钮的 onClick() 事件,则与 Activity 的上下文相同。

但是最好使用 getApplicationContext(),因为当同一个 Activity 完成时, Activity 的上下文就消失了。

关于java - Android Activity 只有在它是主要 Activity 时才能正常工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13857000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com