我正在尝试使用一个库,其中必须传递动作和URI,并且要打开活动,我必须使用包名,但问题是,即使我更改包名,它根本不起作用。这是我正在尝试的代码:
Intent intent = new Intent(Intent.ACTION_EDIT, Uri.parse(filename));
intent.putExtra("was_get_content_intent", mWasGetContentIntent);
intent.setClassName("neelay.mediaplayer.beatbox.ringdroid", "neelay.mediaplayer.beatbox.ringdroid.RingdroidEditActivity");
startActivityForResult(intent, REQUEST_CODE_EDIT);
这是我用于设置活动的清单代码。
<activity
android:name=".ringdroid.RingdroidSelectActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.OPENABLE" />
<data android:mimeType="audio/*" />
</intent-filter>
</activity>
<activity
android:name=".ringdroid.RingdroidEditActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<intent-filter android:label="@string/edit_intent">
<action android:name="android.intent.action.EDIT" />
<data android:mimeType="audio/*" />
</intent-filter>
</activity>
包名为package="neelay.mediaplayer.beatbox"
。
我知道通过调用活动的名称很容易打开活动,但在这种情况下,我必须通过uri传递操作,这是我所能看到的唯一可能的方法,指南会很有帮助。
startActivityForResult()
,但是没有调用startActivity
。当你进行这个调用时,你要么会启动所需的活动,要么会崩溃并抛出ActivityNotFoundException
异常。由于这似乎是你自己应用程序中的活动,更安全的构建Intent
的方法是new Intent(this, RingdroidEditActivity.class).setAction(Intent.ACTION_EDIT).setDataAndType(Uri.parse(filename), ...).putExtra("was_get_content_intent", mWasGetContentIntent);
,其中...
被替换为此内容的实际 MIME 类型。 - CommonsWaremedia
不是有效的 MIME 类型,也与您<intent-filter>
中的<data>
元素不匹配。由于这是您的文件,您应该知道实际的 MIME 类型是什么。如果出于某种原因您不知道,可以使用setData()
而不是setDataAndType()
,Android 将尝试根据文件扩展名猜测。此外,我的猜测是您的代码被包装在try
/catch
块中,并且您需要确保它将错误记录到 LogCat,以便在调试应用程序时查看这些错误。 - CommonsWareREQUEST_CODE_EDIT
的值是多少? - David Wasser