从头创建显式意图而不创建ActivityNotFoundException

时间:2017-01-28 15:12:25

标签: java android android-intent

我仍然在努力向外界开放我的应用程序。 起初我让一切都由MainActivity处理,但我有2个案例(添加+ del),其中无头模式更好/更快/没有闪烁等...

所以我第二次进入我的app Manifest:

<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.

但现在这会产生一个未找到活动的例外...

我有点困惑,因为似乎没有设置上下文的方法,这是我之前做的本地意图调用... 组件部分是替换第一个类型构造函数中给出的显式类实例,setClassName是setComponent的两倍,不是没用吗?

既然没有工作,我在某处遗漏了什么,但是什么? 事实上,事情是,我想从另一个应用程序进行这个意图调用......

1 个答案:

答案 0 :(得分:0)

尝试更改setComponentName构造函数

的第二个参数
intent.setComponent(new ComponentName("com.package.address","com.package.address.UrActivity"));