getExtras() return 应用程序级别为空 (-class)
getExtras() return null on Application level (-class)
在我的 Application
级别,我收到 null getExtras()
,但在 Activity
级别我可以正确看到它们。
public class MyApplication extends Application
{
@Override
public void onCreate() {
super.onCreate();
Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.MyApp");
if (intent != null){
String mStaticWorldUrl = intent.getStringExtra("arg1Name");
String mStaticWorldIconUrl = intent.getStringExtra("arg2Name");
Log.i("LOG", mStaticWorldUrl + " --- " + mStaticWorldIconUrl);
}
}
}
我正在通过以下代码创建的一些快捷方式调用应用程序:
(- 每个快捷方式都有不同的 Extras
发送到 Intent
)
// create a shortcut for the specific app
public static void createShortcutForPackage(Context context,
String packageName, String className, String shortcutName,
String arg1Name, String arg1Val, String arg2Name, String arg2Val,
int iconID) {
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, className));
PackageManager pm = context.getPackageManager();
Context pkgContext = createPackageContext(context, packageName);
if (pkgContext == null)
return;
Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
Intent shortcutIntent = pm.getLaunchIntentForPackage(packageName);
if (arg1Name != null)
shortcutIntent.putExtra(arg1Name, arg1Val);
if (arg2Name != null)
shortcutIntent.putExtra(arg2Name, arg2Val);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(context, iconID));
shortcut.putExtra("duplicate", false);
context.sendBroadcast(shortcut);
}
如何在 Application
级别阅读这些 Extras
?
或者是否有任何其他方法可以为应用程序创建不同的快捷方式并在 Application
上读取其 "parameters" 数据?
Application
class 对于应用程序来说是静态的:对于您的应用程序进程,它只有一个实例。如果您的应用程序是通过正常启动 Intent
而不是您创建的快捷方式启动的,则不会出现任何额外内容。当按下 HOME 或 BACK 时,应用程序进程不会死掉,因此用于启动程序包的 Intent
可能不是您认为的那样。
您应该不需要在 Application
级别查看 Intent
。 Intent
对象不打算在 "sent" 那里,而是 Activity
、Service
或 BroadcastReceiver
.
这是概念性错误,在应用程序 class 中使用 Intent
的方法 getExtra 获取数据时面临
出现此问题的原因:
没有额外的是因为查询的意图是生成的
前一行,这是 OS 为
按照以下代码中的要求进行打包:Intent intent =
getPackageManager().getLaunchIntentForPackage("com.example.MyApp");
应用程序 class 实例中的 Intent 对象:它们不是
送到那里
当任何人想要在应用程序级别获取数据时,让我们了解以下要在即将使用中使用的东西
- 什么是意图?
- 意图有什么用?
- 我们还可以使用哪些其他东西来实现这一目标?
什么是意图?
Intent 提供了一种工具来执行不同应用程序中的代码之间的后期运行时绑定。它最重要的用途是启动活动,可以将其视为活动之间的粘合剂。它基本上是一个被动数据结构,包含对要执行的操作的抽象描述。
extras - 这是一个任何附加信息的集合。这可用于向组件提供扩展信息。例如,如果我们有发送电子邮件消息的操作,我们还可以在此处包含额外的数据片段以提供主题、正文等。
Intent有什么用?
用于意图以多种方式促进组件之间的通信,以下是标准用法
- 开始activity。
- 启动服务。
- 进行广播
我们还可以用什么东西来实现这个目标?
我们可以使用很多东西来实现和解决这个问题
问题。
但是现在我在这里只提到了一个标准和安全的
使用应用程序
内容提供者:从您的应用程序向另一个应用程序提供文件是为了
向接收应用程序发送文件的内容 URI 并授予临时权限
对该 URI 的访问权限。具有临时 URI 的内容 URI
访问权限是安全的,因为它们仅适用于
收到 URI,它们会自动过期。
在我的 Application
级别,我收到 null getExtras()
,但在 Activity
级别我可以正确看到它们。
public class MyApplication extends Application
{
@Override
public void onCreate() {
super.onCreate();
Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.MyApp");
if (intent != null){
String mStaticWorldUrl = intent.getStringExtra("arg1Name");
String mStaticWorldIconUrl = intent.getStringExtra("arg2Name");
Log.i("LOG", mStaticWorldUrl + " --- " + mStaticWorldIconUrl);
}
}
}
我正在通过以下代码创建的一些快捷方式调用应用程序:
(- 每个快捷方式都有不同的 Extras
发送到 Intent
)
// create a shortcut for the specific app
public static void createShortcutForPackage(Context context,
String packageName, String className, String shortcutName,
String arg1Name, String arg1Val, String arg2Name, String arg2Val,
int iconID) {
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, className));
PackageManager pm = context.getPackageManager();
Context pkgContext = createPackageContext(context, packageName);
if (pkgContext == null)
return;
Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
Intent shortcutIntent = pm.getLaunchIntentForPackage(packageName);
if (arg1Name != null)
shortcutIntent.putExtra(arg1Name, arg1Val);
if (arg2Name != null)
shortcutIntent.putExtra(arg2Name, arg2Val);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(context, iconID));
shortcut.putExtra("duplicate", false);
context.sendBroadcast(shortcut);
}
如何在 Application
级别阅读这些 Extras
?
或者是否有任何其他方法可以为应用程序创建不同的快捷方式并在 Application
上读取其 "parameters" 数据?
Application
class 对于应用程序来说是静态的:对于您的应用程序进程,它只有一个实例。如果您的应用程序是通过正常启动 Intent
而不是您创建的快捷方式启动的,则不会出现任何额外内容。当按下 HOME 或 BACK 时,应用程序进程不会死掉,因此用于启动程序包的 Intent
可能不是您认为的那样。
您应该不需要在 Application
级别查看 Intent
。 Intent
对象不打算在 "sent" 那里,而是 Activity
、Service
或 BroadcastReceiver
.
这是概念性错误,在应用程序 class 中使用 Intent
的方法 getExtra 获取数据时面临出现此问题的原因:
没有额外的是因为查询的意图是生成的 前一行,这是 OS 为 按照以下代码中的要求进行打包:Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.MyApp");
应用程序 class 实例中的 Intent 对象:它们不是
送到那里
当任何人想要在应用程序级别获取数据时,让我们了解以下要在即将使用中使用的东西
- 什么是意图?
- 意图有什么用?
- 我们还可以使用哪些其他东西来实现这一目标?
什么是意图?
Intent 提供了一种工具来执行不同应用程序中的代码之间的后期运行时绑定。它最重要的用途是启动活动,可以将其视为活动之间的粘合剂。它基本上是一个被动数据结构,包含对要执行的操作的抽象描述。
extras - 这是一个任何附加信息的集合。这可用于向组件提供扩展信息。例如,如果我们有发送电子邮件消息的操作,我们还可以在此处包含额外的数据片段以提供主题、正文等。
Intent有什么用?
用于意图以多种方式促进组件之间的通信,以下是标准用法
- 开始activity。
- 启动服务。
- 进行广播
我们还可以用什么东西来实现这个目标?
我们可以使用很多东西来实现和解决这个问题 问题。
但是现在我在这里只提到了一个标准和安全的 使用应用程序
内容提供者:从您的应用程序向另一个应用程序提供文件是为了 向接收应用程序发送文件的内容 URI 并授予临时权限 对该 URI 的访问权限。具有临时 URI 的内容 URI 访问权限是安全的,因为它们仅适用于 收到 URI,它们会自动过期。