我有下面的函数pinAppWidget
,我在MainActivity
中使用它,但我需要能够在ConfigurableWidgetConfigureActivity
中使用它,这样我就不会有一个重复的函数,我想创建一个包含它们的类。
但我遇到了一些问题。
原始代码:
fun pinAppWidget(text: String?) {
val urlCode = extractLinks(text)
if (urlCode != "" && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val mAppWidgetManager = getSystemService(
AppWidgetManager::class.java
)
if (!mAppWidgetManager.isRequestPinAppWidgetSupported) {
Toast.makeText(
this@MainActivity,
"Pin app widget is not supported",
Toast.LENGTH_SHORT
).show()
return
}
val myProvider = ComponentName(this@MainActivity, MyWidget::class.java)
val pinnedWidgetCallbackIntent = Intent(this@MainActivity, MyWidget::class.java)
val successCallback = PendingIntent.getBroadcast(
this@MainActivity, 0,
pinnedWidgetCallbackIntent, PendingIntent.FLAG_IMMUTABLE
)
mAppWidgetManager.requestPinAppWidget(myProvider, Bundle(), successCallback)
}
}
fun extractLinks(text: String?): String {
val index = text!!.lastIndexOf("/")
return text.substring(index + 1)
}
类函数:
import android.app.Activity
import android.app.PendingIntent
import android.appwidget.AppWidgetManager
import android.content.ComponentName
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.widget.Toast
class function : Activity() {
fun pinAppWidget(text: String?) {
val urlCode = extractLinks(text)
if (urlCode != "" && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val mAppWidgetManager = getSystemService(
AppWidgetManager::class.java
)
if (!mAppWidgetManager.isRequestPinAppWidgetSupported) {
Toast.makeText(
this@function,
"Pin app widget is not supported",
Toast.LENGTH_SHORT
).show()
return
}
val myProvider = ComponentName(this@function, MyWidget::class.java)
val pinnedWidgetCallbackIntent = Intent(this@function, MyWidget::class.java)
val successCallback = PendingIntent.getBroadcast(
this@function, 0,
pinnedWidgetCallbackIntent, PendingIntent.FLAG_IMMUTABLE
)
mAppWidgetManager.requestPinAppWidget(myProvider, Bundle(), successCallback)
}
}
fun extractLinks(text: String?): String {
val index = text!!.lastIndexOf("/")
return text.substring(index + 1)
}
}
当我在MainActivity
函数内部调用时,我会遇到以下问题:
我该怎么做,你能帮我吗?
3条答案
按热度按时间3okqufwl1#
你可以把pinAppWidget方法放到一个对象中,这样你就可以在Activity:
另一种方法是,您可以创建BaseActivity并将pinAppWidget放入其中。然后让你的MainActivity扩展BaseActivity,你可以从这里轻松调用pinAppWidget
cx6n0qe32#
可以将
Context
对象作为参数传递给function
类中的pinAppWidget
函数。现在您可以在
MainActivity
和ConfigurableWidgetConfigureActivity
中使用MyWidgetFunction
类。调用pinAppWidget
函数时,请确保传递适当的Context
对象。在
MainActivity
中:在
ConfigurableWidgetConfigureActivity
中:注意:确保将
MyWidget
替换为小部件类的实际名称。qhhrdooz3#
这个问题至少包括两件事:架构决策和Android平台限制。
从软件架构的Angular 来看,您可以:
object:
)可以是这两个选项的替代方案。kotlin
还提供了扩展,这可能是实现任务的第四种方式。从Android平台的Angular 来看,组件代码只能从组件(Activity、Service、BroadcastReceiver、ContentProvder)调用。你的函数使用组件代码(
mAppWidgetManager.requestPinAppWidget(...)
),最好将其保留在组件中而不要放在外部。尽管如此,仍然可以将其放入一个单独的类中,并传递context
来运行此代码。