2011-07-29 7 views
0

状況: 複数のアプリを1つの.apkアプリに統合する必要があります。私は何をしていますか: 私が働いているメインのapp1プロジェクトにapp2パッケージをコピーしました。私のapp1は2つのパッケージを持っています。Androidの別のパッケージからアクティビティを呼び出すときに問題が発生する

App2が、このマニフェストファイルを持っていた:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.package.app2" android:versionCode="3" android:versionName="1.2"> 

<application android:label="App2" android:icon="@drawable/icon"> 
    <activity android:name="Activity1" android:launchMode="singleTask"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity>   

<activity android:name="Activity2" android:excludeFromRecents="true"></activity> 
</application> 

<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 
<uses-permission android:name="android.permission.VIBRATE"></uses-permission> 
</manifest> 

私の元App1のマニフェストファイル:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.package.app1"> 
<application android:icon="@drawable/icon" android:debuggable="true"> 
    <activity android:name=".Start" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="com.package.app1.PlayerList" /> 
    <activity android:name="com.package.app1.CreateNewPlayer" /> 
    <activity android:name="com.package.app1.Profile" />      
    <activity android:name="com.package.app1.Braintrainer" /> 
</application> 
</manifest> 

私はAPP2パッケージ内のアクティビティを呼び出すために使用していますAPP1のコード:

Intent i = new Intent(); 
i.setClassName("com.package.app1", "com.package.app2.Activity1");      
startActivity(i); 

質問: app1マニフェストファイルを変更してappのアクティビティを持たせるにはどうすればよいですか2。 、私はAPP2に簡単なHelloWorldのテストクラスを作成した場合、それが動作 コール同じコードを使用して、ちょうどAPP1のマニフェストにこれを含める:

物事は試してみましたi`ve

 <activity android:name="com.package.app2.Test" /> 

しかし、私は把握することはできませんapp2マニフェストファイルを最初のものに実装する方法。あらゆる方法で私はエラーを出さないようにしようとしますが、そのアクティビティを呼び出すときにクラッシュします。 App2だけで正常に動作するので、アクティビティファイルには問題はありません。

これに感謝しています。暗闇の中で

答えて

3
Intent i = new Intent(); 
i.setClassName("com.package.app1", "com.package.app2.Activity1");      
startActivity(i); 

ショット:com.package.app2

変更com.package.app1。あなたが今しようとしていることを私は呼びました。私はいつも呼びたいクラスのパッケージを指定しなければなりませんでした。

[OK]をPackageManagerはあなたの解決策ではありません、私は間違って読んで2つのアプリがあり、1つのアプリが別のアプリを呼びたいと思った。 1つのアプリがほしいと思うようです。

はこのようにあなたはapp1のマニフェストを変更します。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.package.app1"> 
<application android:icon="@drawable/icon" android:debuggable="true"> 
    <activity android:name=".Start" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="com.package.app2.Activity1" /> 
    <activity android:name="com.package.app2.Activity2" android:excludeFromRecents="true"></activity> 
    <activity android:name="com.package.app1.PlayerList" /> 
    <activity android:name="com.package.app1.CreateNewPlayer" /> 
    <activity android:name="com.package.app1.Profile" />      
    <activity android:name="com.package.app1.Braintrainer" /> 
</application> 
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 
<uses-permission android:name="android.permission.VIBRATE"></uses-permission> 
</manifest> 

そして再び最初の方法を試してみてください。

+0

私はそれをapp2に変更していますが、単純なテストクラスでも動作しません。setComponentを呼び出してapp2を呼び出しても、テストクラスで動作するので何も変更しません。 app2クラス。マニフェストファイルとは関係がありませんか? – Jonas

+0

パッケージマネージャはソリューションのように聞こえますが、この場合のマニフェストファイルはどうですか?どのように私はcom.packageでどのアクティビティを選択するのですか?app2パッケージをyoruの例で開くと、パッケージにプロジェクトにコピーしたときにマニフェストファイルがない場合 – Jonas

+0

app2で単純なHelloWorldクラスを使用して、単にが動作しますが、最初にapp2マニフェストアクティビティを追加する方法はわかりません。コンテンツフィルタを使用してすべてのアクティビティを追加するだけでクラッシュすると、 – Jonas

0

私はいくつかのパッケージを持っており、私のアプリで同様のことをする必要があります。

この方法に注意する必要があります。そうしないと、メモリリークが発生します。

私のベースコントローラ(アクティビティ)クラスで自分のアクティビティを静的変数として宣言しました。すべてのコントローラクラスはこのクラスを継承しているため、すべてのコントローラクラスがそのクラスにアクセスできます。アクティビティーにアクセスする必要があるコントローラークラス外のものの引数としてアクティビティーを渡します。

関連する問題