代码之家  ›  专栏  ›  技术社区  ›  Paul

安卓kotlin做一个意向。小部件配置类内的ACTION_SEND

  •  0
  • Paul  · 技术社区  · 1 年前

    我有以下配置类 MyWidgetConfigureActivity 对于小部件,但我需要确保如果 "text/plain" 类型 Intent.ACTION_SEND 如下所示,它可以做与我在上做的相同的事情 MyWidgetConfigureActivity onClickListener 以添加小部件。

    我也试着把同样的代码放在main中,它目前工作的地方,但作为appWidgetId,它给了我0。

    你能帮我一把吗?

            val intent = intent
            val action = intent.action
            val type = intent.type
    
            if (Intent.ACTION_SEND == action && type != null) {
                if ("text/plain" == type) {
                    val widgetText = intent.getStringExtra(Intent.EXTRA_TEXT)
                    ...call function
                }
            }
    
    import android.app.Activity
    import android.appwidget.AppWidgetManager
    import android.content.Context
    import android.content.Intent
    import android.os.Bundle
    import android.util.Log
    import android.view.View
    import android.widget.EditText
    
    import com.myapp.test.databinding.MyWidgetConfigureBinding
    
    /**
     * The configuration screen for the [MyWidget] AppWidget.
     */
    class MyWidgetConfigureActivity : Activity() {
        private var appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID
        private lateinit var appWidgetText: EditText
        private var onClickListener = View.OnClickListener {
            val context = this@MyWidgetConfigureActivity
    
            // When the button is clicked, store the string locally
            val widgetText = appWidgetText.text.toString()
            val urlCode = MyWidgetFunction().extractLinks(widgetText)
            Log.d("MyWidgetConfigureActivity-urlCode", urlCode)
            if (urlCode != "") {
    
                Log.d("MyWidgetConfigureActivity-appWidgetId", appWidgetId.toString())
                saveUrlPref(context, appWidgetId, urlCode)
    
                // It is the responsibility of the configuration activity to update the app widget
                val appWidgetManager = AppWidgetManager.getInstance(context)
                updateAppWidget(context, appWidgetManager, appWidgetId)
    
                // Make sure we pass back the original appWidgetId
                val resultValue = Intent()
                resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
                setResult(RESULT_OK, resultValue)
                finish()
            }
        }
        private lateinit var binding: MyWidgetConfigureBinding
    
        public override fun onCreate(icicle: Bundle?) {
            super.onCreate(icicle)
            // Set the result to CANCELED.  This will cause the widget host to cancel
            // out of the widget placement if the user presses the back button.
            setResult(RESULT_CANCELED)
    
            binding = MyWidgetConfigureBinding.inflate(layoutInflater)
            setContentView(binding.root)
    
            appWidgetText = binding.appwidgetText as EditText
            binding.addButton.setOnClickListener(onClickListener)
    
            // Find the widget id from the intent.
            val intent = intent
            val extras = intent.extras
            if (extras != null) {
                appWidgetId = extras.getInt(
                    AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID
                )
            }
    
            // If this activity was started with an intent without an app widget ID, finish with an error.
            if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
                finish()
                return
            }
    
            appWidgetText.setText(loadUrlPref(this@MyWidgetConfigureActivity, appWidgetId))
        }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools">
    
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
    
        <application
            android:usesCleartextTraffic="true"
            android:networkSecurityConfig="@xml/network_security_config"
    
            android:allowBackup="true"
            android:dataExtractionRules="@xml/data_extraction_rules"
            android:fullBackupContent="@xml/backup_rules"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/Theme.Test"
            tools:targetApi="31">
            <activity
                android:name=".MainActivity"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
                <intent-filter>
                    <action android:name="android.intent.action.SEND" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <data android:mimeType="text/plain" />
                </intent-filter>
            </activity>
    
            <receiver
                android:name=".MyWidget"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                </intent-filter>
    
                <meta-data
                    android:name="android.appwidget.provider"
                    android:resource="@xml/widget_info" />
            </receiver>
    
            <receiver
                android:name=".WidgetReceiver"
                android:enabled="true" />
    
            <activity
                android:name=".MyWidgetConfigureActivity"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
                </intent-filter>
            </activity>
    
            <service
                android:name=".WidgetService"
                android:permission="android.permission.BIND_REMOTEVIEWS" />
    
        </application>
    
    </manifest>
    
    0 回复  |  直到 1 年前