[英]create explicit intent from scratch without creating an ActivityNotFoundException
我仍在努力向外部開放我的應用程序。 起初我讓一切都由MainActivity處理,但是我有2種情況(添加+刪除),其中無頭模式更好/更快/沒有閃爍等。
所以我第二次進入了我的應用清單:
<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();
}
}
可以避免,但是當另一個應用程序試圖建立該意圖時,它將無法工作,因為它無法訪問我應用程序的類文件,因此我將相關部分更改為
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.
但這現在產生一個活動未找到異常...
我有點困惑,因為似乎沒有設置上下文的方法,該方法存在於我之前進行的本地intent調用中...組件部分是替換第一種類型中給出的顯式類實例構造函數setClassName將setComponent加倍,不是嗎?
由於這兩種方法都不起作用,所以我在某處缺少了什么,但是又怎樣呢? 就像說的那樣,事情是,我想從另一個應用程序發出這個意圖調用...
嘗試更改setComponentName
構造函數的第二個參數
intent.setComponent(new ComponentName("com.package.address","com.package.address.UrActivity"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.