使用android我意识到隐含意图在大多数情况下是很好的选择,因为它们具有灵活性.但是什么是显性意图呢?使用它们有什么好处?什么是常见的情况,使用它们是一个好习惯?
android android-intent android-implicit-intent explicit-intent
android中显式和隐式活动调用有什么区别?如果用简单的例子解释答案就会很好.
android android-activity android-implicit-intent explicit-intent
我想使用我在 firebase 中的链接数据打开一堆音乐应用程序链接。我想打开,amazonPrimeMusic、Ganna、Spotify、Wynk、JioSavaan 等等。
Widget buildResultCard(data) {
List items = [Text(data['Ganna']),
IconButton(icon:Icon(Icons.all_inclusive),
onPressed: ()=> {Text("Ganna")}
),
Text(data['Wynk']),
IconButton(icon:Icon(Icons.all_inclusive),
onPressed: ()=> {Text("Ganna")}
),
Text(data['JioSavaan']),
IconButton(icon:Icon(Icons.all_inclusive),
onPressed: ()=> {Text("Ganna")}
),
Text(data['PrimeMusic']),
IconButton(icon:Icon(Icons.all_inclusive),
onPressed: ()=> {Text("Ganna")}
)
];
return ListView.builder(
padding: EdgeInsets.only(top: 20),
itemCount: items.length,
itemBuilder: (BuildContext context, int index) {
return items[index];
},
);
}
Run Code Online (Sandbox Code Playgroud)
当我点击列表中的按钮时,它应该打开链接所在的特定应用程序,例如 AmazonPrimeMusic 链接,它应该打开亚马逊音乐应用程序。
我编写了两个不同的应用程序,我们将它们称为 AppA 和 AppB。我正在尝试使用意图从 AppB 启动 AppA 中的活动。我正试图以明确的意图来实现这一目标。
在 AppB 中,我创建如下意图:
ComponentName cn = new ComponentName("com.example.user.appa",
"appaActivity");
Intent infoIntent = new Intent();
infoIntent.setComponent(cn);
infoIntent.setAction("com.example.DO_SOMETHING");
infoIntent.putStringArrayListExtra("arrList", incInfo);
startActivity(infoIntent);
Run Code Online (Sandbox Code Playgroud)
在 AppA 的 AndroidManifest.xml 中,我包含了以下内容:
<activity
android:name=".appaActivity"
android:label="@string/title_activity">
<intent-filter>
<action android:name="com.example.DO_SOMETHING"/>
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
当我尝试运行 AppB(将 Intent 发送到 AppA)时,出现以下错误:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.appb/com.example.user.appb.MainActivity}: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.user.appa/appaActivity}; have you declared this activity in your AndroidManifest.xml?
Run Code Online (Sandbox Code Playgroud)
因为我可以清楚地看到我已经在 AppA AndroidManifest.xml 中定义了 appaActivity,所以谁能告诉我我可能会忽略什么?
我正在尝试从命令行启动特定的活动。我正在为 Android O (api 26) 构建应用程序,并且我尝试显式启动该活动来模拟深层链接
活动清单
<activity
android:name=".activities.ChatActivity"
android:label="@string/chat_action_bar_title"
android:launchMode="singleTask"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
我的包是:package="com.my.app"
我正在使用这个命令:
adb shell am start -n com.my.app.activities/.ChatActivity
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Starting: Intent { cmp=com.my.app.activities/.ChatActivity }
Error type 3
Error: Activity class {com.my.app.activities/com.my.app.activities.ChatActivity} does not exist.
Run Code Online (Sandbox Code Playgroud)
我尝试添加
-a android.intent.action.VIEW
Run Code Online (Sandbox Code Playgroud)
和
-c android.intent.category.DEFAULT
Run Code Online (Sandbox Code Playgroud)
但我无法开始该活动,
我究竟做错了什么?
shell android android-manifest android-intent explicit-intent