And*_*Wid 134 android android-intent
我知道如何更新我自己的程序,我知道如何使用预定义的Uri打开程序(例如短信或电子邮件)
我需要知道如何创建一个Intent来打开MyTracks或任何其他我不知道他们听什么意图的应用程序.
我从DDMS那里获得了这些信息,但我没有成功将其转化为我可以使用的Intent.这是在手动打开MyTracks时获取的.
谢谢你的帮助
05-06 11:22:24.945: INFO/ActivityManager(76): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks bnds=[243,338][317,417] }
05-06 11:22:25.005: INFO/ActivityManager(76): Start proc com.google.android.maps.mytracks for activity com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks: pid=1176 uid=10063 gids={3003, 1015}
05-06 11:22:26.995: INFO/ActivityManager(76): Displayed activity com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks: 1996 ms (total 1996 ms)
Run Code Online (Sandbox Code Playgroud)
小智 229
我像这样工作,
/** Open another app.
* @param context current Context, like Activity, App, or Service
* @param packageName the full package name of the app to open
* @return true if likely successful, false if unsuccessful
*/
public static boolean openApp(Context context, String packageName) {
PackageManager manager = context.getPackageManager();
try {
Intent i = manager.getLaunchIntentForPackage(packageName);
if (i == null) {
return false;
//throw new ActivityNotFoundException();
}
i.addCategory(Intent.CATEGORY_LAUNCHER);
context.startActivity(i);
return true;
} catch (ActivityNotFoundException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
openApp(this, "com.google.android.maps.mytracks");
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助某人.
Gau*_*ish 141
首先,Android中"应用程序"的概念略有扩展.
应用程序 - 在技术上是一个过程 - 可以有多个活动,服务,内容提供者和/或广播听众.如果其中至少有一个正在运行,则应用程序已启动并运行(该过程).
那么,您需要确定的是如何"启动应用程序".
好的...这是你可以试试的:
action=MAIN
和创建一个意图category=LAUNCHER
PackageManager
从当前上下文中获取context.getPackageManager
packageManager.queryIntentActivity(<intent>, 0)
意图有的地方category=LAUNCHER
,action=MAIN
或者packageManager.resolveActivity(<intent>, 0)
用main/launcher获得第一个活动ActivityInfo
你感兴趣的是ActivityInfo
,得到packageName
和name
category=LAUNCHER
,action=MAIN
,componentName = new ComponentName(packageName, name)
和setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(newIntent)
zaw*_*tut 96
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setComponent(ComponentName.unflattenFromString("com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks"));
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
编辑:
如评论中所建议,之前添加一行 startActivity(intent);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Run Code Online (Sandbox Code Playgroud)
Muz*_*ant 38
如果您已经拥有要激活的软件包名称,则可以使用以下代码,这些代码更通用:
PackageManager pm = context.getPackageManager();
Intent appStartIntent = pm.getLaunchIntentForPackage(appPackageName);
if (null != appStartIntent)
{
context.startActivity(appStartIntent);
}
Run Code Online (Sandbox Code Playgroud)
我发现,对于通过常规方法启动MAIN活动未找到主要活动的情况,它更有效.
inv*_*sus 13
这是我基于MasterGaurav解决方案的解决方案的代码:
private void launchComponent(String packageName, String name){
Intent launch_intent = new Intent("android.intent.action.MAIN");
launch_intent.addCategory("android.intent.category.LAUNCHER");
launch_intent.setComponent(new ComponentName(packageName, name));
launch_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(launch_intent);
}
public void startApplication(String application_name){
try{
Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
List<ResolveInfo> resolveinfo_list = activity.getPackageManager().queryIntentActivities(intent, 0);
for(ResolveInfo info:resolveinfo_list){
if(info.activityInfo.packageName.equalsIgnoreCase(application_name)){
launchComponent(info.activityInfo.packageName, info.activityInfo.name);
break;
}
}
}
catch (ActivityNotFoundException e) {
Toast.makeText(activity.getApplicationContext(), "There was a problem loading the application: "+application_name,Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
pet*_*tos 10
使用来自inversus的解决方案,我使用一个函数扩展了代码段,当目前尚未安装所需的应用程序时将调用该函数.所以它的工作方式如下:按包名运行应用程序.如果没有找到,请打开Android市场 - 谷歌播放此套餐.
public void startApplication(String packageName)
{
try
{
Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(intent, 0);
for(ResolveInfo info : resolveInfoList)
if(info.activityInfo.packageName.equalsIgnoreCase(packageName))
{
launchComponent(info.activityInfo.packageName, info.activityInfo.name);
return;
}
// No match, so application is not installed
showInMarket(packageName);
}
catch (Exception e)
{
showInMarket(packageName);
}
}
private void launchComponent(String packageName, String name)
{
Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
intent.setComponent(new ComponentName(packageName, name));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
private void showInMarket(String packageName)
{
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
它使用如下:
startApplication("org.teepee.bazant");
Run Code Online (Sandbox Code Playgroud)
打开应用程序(如果存在),或打开Play Store应用程序进行安装:
private void open() {
openApplication(getActivity(), "com.app.package.here");
}
public void openApplication(Context context, String packageN) {
Intent i = context.getPackageManager().getLaunchIntentForPackage(packageN);
if (i != null) {
i.addCategory(Intent.CATEGORY_LAUNCHER);
context.startActivity(i);
} else {
try {
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageN)));
}
catch (android.content.ActivityNotFoundException anfe) {
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageN)));
}
}
}
Run Code Online (Sandbox Code Playgroud)
用这个 :
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage("com.package.name");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
229579 次 |
最近记录: |