2017-01-28 5 views
0

まだ私のアプリケーションを外界に開放するのに苦労しています。 最初はすべてMainActivityで処理させてもらいますが、ヘッドレスモードがより良い/速い/ち​​らつきのない2つのケース(add + del)があります...ActivityNotFoundExceptionを作成せずにゼロから明示的なインテントを作成する

私は私のアプリマニフェスト:

<activity 
     android:name=".IntStringSynchro" 
     android:label="@string/headless" 
     android:theme="@android:style/Theme.NoDisplay" 
     > 
     <intent-filter> 
      <action android:name="ADD" /> 
      <category android:name="android.intent.category.EMBED" /> 
     </intent-filter> 
    </activity> 

とStackOverflowの上ここで読んで、私は最初、内部でそれをテストしたので、私はそうどこかのonClickで...私の主な活動に

をこの活動にコールする意図を起動するボタンを追加しました:

else if (p1 == testBut) 
{ 
    String tstpathToProject = "AppProjects/IntStringIntentTester/app/src/main/res"; 

    Intent callIt = new Intent(this, IntStringSynchro.class); 
    callIt.addCategory("android.intent.category.EMBED"); 
    callIt.setAction("ADD"); 
    callIt.putExtra("token", "testtoto"); 
    callIt.putExtra("value", "titi"); 
    callIt.putExtra("value-de", "tata"); 
    callIt.setAction("ADD"); 
    callIt.putExtra("path", tstpathToProject);//relative 
    Log.d(TAG, "sending intent " + callIt + " " + callIt.getExtras()); 

    try 
    { 
    startActivityForResult(callIt, ASK_STRINGMOD); 
    } 
    catch (ActivityNotFoundException e) 
    { 
    Toast.makeText(this, "no available activity " + callIt, Toast.LENGTH_SHORT).show(); 
    } 
} 
avertisedとして働いていた

が、それは私のアプリのクラスファイルにアクセスすることができませんので、私は

Intent callIt = new Intent(); 
    callIt.setClassName("com.nohkumado.intstringsynchro", "IntStringSynchro"); 
    callIt.setComponent(new ComponentName("com.nohkumado.intstringsynchro", "IntStringSynchro")); 
    callIt.addCategory("android.intent.category.EMBED"); 
    callIt.setAction("ADD"); 
etc. 
に関連する部分を変更するので、他のアプリは、その意図を構築しようとすると、これは、動作しません。

が、これは今、私はコンテキストを設定する方法があるように思えないので、それは私が作った地元の意図コールに存在している、少し混乱していた例外...

を見つけていない活動を生み出しますbefore ... コンポーネントの部分は、最初の型のコンストラクタで指定された明示的なクラスインスタンスを置き換えることです.setClassNameは、setComponentを2倍にします。

どちらの作品も、どこかに何かが欠けているので、何ですか? saydとして、事は、私は他のアプリから、この目的のコールを作りたい、です...

答えて

0

は、新しい(OKがcallIt.setComponentにそれを適応し

intent.setComponent(new ComponentName("com.package.address","com.package.address.UrActivity")); 
+0

setComponentNameコンストラクタの2番目のパラメータを変更しようComponentName( "com.nohkumado.intstringsynchro"、 "com.nohkumado.intstringsynchro.IntStringSynchro")); それは動作しますが、なぜですか?パッケージ名をもう一度与えるのは少し冗長に思えますか? –

+0

アクティビティクラスを呼び出すには、完全なパッケージ名が必要です。最初のパラメータからそれを取っていますが、ちょっと....きちんとしていないことを認めなければなりません...しかし、それは仕事をします;-) – Aelaf

+0

確かに、これは正式なAPI docuで書かれているはずです... ....いずれにしても、これらの文書化されていない機能のうちの1つは、とにかく感謝しています。 –

関連する問題