从 android 11 小部件启动另一个应用程序?
Posted
技术标签:
【中文标题】从 android 11 小部件启动另一个应用程序?【英文标题】:Launch another app from android 11 widget? 【发布时间】:2021-09-23 20:23:32 【问题描述】:我无法在 android 11 上启动小部件。
此代码适用于我的 android 9 手机, 但 android 11 Google Pixel 3a 模拟器无法正常工作。 我该怎么做。 好的,所以我想做的是创建一个小部件,当小部件被按下时,它会简单地启动另一个应用程序。
小部件 XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<Button
android:text="Whatsapp Launch"
android:id="@+id/button"
android:layout_
android:layout_>
</Button>
<Button
android:layout_marginLeft="30dp"
android:text="Spotify Launch"
android:id="@+id/button2"
android:layout_
android:layout_>
</Button>
</LinearLayout>
小部件类
class SimpleAppWidget : AppWidgetProvider()
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray
)
// There may be multiple widgets active, so update all of them
for (appWidgetId in appWidgetIds)
updateAppWidget(context, appWidgetManager, appWidgetId)
private fun updateAppWidget(
context: Context, appWidgetManager: AppWidgetManager,
appWidgetId: Int
)
// Construct the RemoteViews object
val views = RemoteViews(context.packageName, R.layout.simple_app_widget)
// Construct an Intent object includes web adresss.
val launchIntent12 = context!!.packageManager.getLaunchIntentForPackage("com.spotify.music")
val launchIntent122 = context!!.packageManager.getLaunchIntentForPackage("com.whatsapp")
// In widget we are not allowing to use intents as usually. We have to use PendingIntent instead of 'startActivity'
val pendingIntent = PendingIntent.getActivity(context, 0, launchIntent122, 0)
val pendingIntent2 = PendingIntent.getActivity(context, 0, launchIntent12, 0)
// Here the basic operations the remote view can do.
views.setOnClickPendingIntent(R.id.button, pendingIntent)
views.setOnClickPendingIntent(R.id.button2, pendingIntent2)
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, views)
【问题讨论】:
【参考方案1】:首先,您需要添加package visibility rules to your manifest。就目前而言,getLaunchIntentForPackage()
可能会返回null
。解决此问题后,请完全卸载并重新安装应用程序,然后再继续。
还有:
为您的 PendingIntent
对象使用唯一 ID(它们都在 getActivity()
的第二个参数中为 0
设置)
考虑使用PendingIntent.FLAG_UPDATE_CURRENT
作为getActivity()
的第四个参数
【讨论】:
我应用了您的反馈并再次运行它,但 android 11 仍然无法运行。【参考方案2】:小部件活动
class SimpleAppWidget : AppWidgetProvider()
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray
)
// There may be multiple widgets active, so update all of them
for (appWidgetId in appWidgetIds)
updateAppWidget(context, appWidgetManager, appWidgetId)
@SuppressLint("RemoteViewLayout")
private fun updateAppWidget(
context: Context, appWidgetManager: AppWidgetManager,
appWidgetId: Int
)
// Construct the RemoteViews object
val views = RemoteViews(context.packageName, R.layout.simple_app_widget)
val launchIntent2 = context!!.packageManager.getLaunchIntentForPackage("com.spotify.music")
val pendingIntent2 = PendingIntent.getActivity(context, 1, launchIntent2, PendingIntent.FLAG_UPDATE_CURRENT)
views.setOnClickPendingIntent(R.id.button2, pendingIntent2)
appWidgetManager.updateAppWidget(appWidgetId, views)
【讨论】:
【参考方案3】:小部件权限
<queries>
<package android:name="com.spotify.music"/>
<package android:name="com.example.widget11" />
<intent>
<action android:name="com.spotify.music" />
</intent>
</queries>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Widget11">
<receiver android:name=".SimpleAppWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/simple_app_widget_info" />
</receiver>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
【讨论】:
以上是关于从 android 11 小部件启动另一个应用程序?的主要内容,如果未能解决你的问题,请参考以下文章