Java 为来自库的结果启动活动

Java 为来自库的结果启动活动,java,android,Java,Android,我想为从库中引用的类的结果调用一个活动。 我有一个主项目p1和另一个项目p2,它作为库添加到p1中,在p2中我有一个类:MiddleWareStart,我想从中调用一个属于p2的活动:DeviceListActivity 我曾尝试使用MiddleWareStart的startActivityForResult,但它不起作用并导致运行时错误,因此我尝试在引用MiddleWareStart时放置p1中的主活动 作为: 在MiddleWareStart中,我将活动a放入构造函数中: public Mi

我想为从库中引用的类的结果调用一个活动。 我有一个主项目p1和另一个项目p2,它作为库添加到p1中,在p2中我有一个类:MiddleWareStart,我想从中调用一个属于p2的活动:DeviceListActivity 我曾尝试使用MiddleWareStart的startActivityForResult,但它不起作用并导致运行时错误,因此我尝试在引用MiddleWareStart时放置p1中的主活动 作为:

在MiddleWareStart中,我将活动a放入构造函数中:

public MiddleWareStart(Activity activity)
{
this.a=activity;
Intent intent=new Intent(a,DeviceListActivity.class);   
a.startActivityForResult(intent,1);
}

现在它工作了,activity DeviceListActivity.java启动了,但是在MiddleWareStart内部实现的activity Result上的问题从未被调用。我已经在被调用的活动(DeviceListActivity)中声明了集合result。当我尝试启动p2本身(而不是p1)时,每个想法都能按预期正确工作,并且在活动结果中调用所需的代码:

p1内的内部主活动(游戏活动)

MiddleWareStart x=new (GameActivity.this);
米德尔瓦雷斯塔特内部(p2内部)

输出仅显示Check toast

我还试图在main.java中设置activityresult,但它也没有被调用

内部设备稳定性:

Intent intent = new Intent();
        intent.putExtra(EXTRA_DEVICE_ADDRESS, address);

        // Set result and finish this Activity
        setResult(Activity.RESULT_OK, intent);
这里是主项目的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.android.tictactoe.library"
  android:versionCode="1"
  android:versionName="1.0"
   android:name="com.example.GlobalState">
<uses-sdk android:minSdkVersion="8" />   
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/tie" 
     android:name="com.example.GlobalState">
    <activity android:name=".GameActivity"
              android:label="@string/tie">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.example.DeviceListActivity"
              android:label="@string/select_device"

              android:configChanges="orientation|keyboardHidden" >

    </activity>
    <activity android:name="com.example.MiddleWareStart"
              android:label="@string/select_device"                  
              android:configChanges="orientation|keyboardHidden" >

    </activity>
</application>

这里是图书馆项目的清单:
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk minSdkVersion="6" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.WRITE_GSERVICES"></uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"></uses-permission>


<application android:label="@string/app_name"

              >
    <activity android:name=".MiddleWareStart"
              android:label="@string/app_name"
              android:configChanges="orientation|keyboardHidden">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".com.example.DeviceListActivity"
              android:label="@string/select_device"

              android:configChanges="orientation|keyboardHidden" />
</application>
android:versionCode=“1”
android:versionName=“1.0”>


感谢您阅读任何有用的建议

请小心,在变量中存储对活动的引用可能会导致意外问题,因为Android可以随时销毁活动(以释放内存)


相反,您可以直接从第二个活动调用startActivityForResult(),获取结果,然后使用广播接收器通知您的第一个活动。

MiddleWareStart扩展活动,但您不将其作为活动启动,因此它不在“活动堆栈”中,不能作为调用活动。因此有例外。如果调用a.StartActivityForResult,则-a是调用活动,因此将调用a的onActivityResult。希望这能有所帮助。

请问,我如何才能在不在mainfest文件中注册的情况下将类添加到应用程序中,我想在代码期间动态注册它,因为我的项目是中间件,我想隐藏它。这是不可能的,一旦编译了APK,它将被签名,并且您无法在不使其无效的情况下更改任何内容。为什么会出现运行时错误,可以显示异常吗?Java.lang.RuntimeException:无法启动activity ComponentInfo{com.example.android.tictactoe.library/com.example.android.tictactoe.GameActivity}:Java.lang.NullPointerException当我尝试使用startActivityForResult而不是使用startActivityForResult时,会发生此异常
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.android.tictactoe.library"
  android:versionCode="1"
  android:versionName="1.0"
   android:name="com.example.GlobalState">
<uses-sdk android:minSdkVersion="8" />   
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/tie" 
     android:name="com.example.GlobalState">
    <activity android:name=".GameActivity"
              android:label="@string/tie">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.example.DeviceListActivity"
              android:label="@string/select_device"

              android:configChanges="orientation|keyboardHidden" >

    </activity>
    <activity android:name="com.example.MiddleWareStart"
              android:label="@string/select_device"                  
              android:configChanges="orientation|keyboardHidden" >

    </activity>
</application>
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk minSdkVersion="6" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.WRITE_GSERVICES"></uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"></uses-permission>


<application android:label="@string/app_name"

              >
    <activity android:name=".MiddleWareStart"
              android:label="@string/app_name"
              android:configChanges="orientation|keyboardHidden">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".com.example.DeviceListActivity"
              android:label="@string/select_device"

              android:configChanges="orientation|keyboardHidden" />
</application>