0

을 클릭하여 홈 위젯에서 2 개의 다른 활동 내가이 활동이 :안드로이드 열기 내 간단한 예제 응용 프로그램에서 다른 버튼

  1. MainActivity.java
  2. NewAppWidgetConfigureActivity.java

을 또한 내 애플 리케이션에서 나는 클래스가있다 NewAppWidget.java 을 확장 한 사람 AppWidgetProvider 0 내가 화면 집에 위젯을 추가 할 때, 내가 먼저 활동 NewAppWidgetConfigureActivity.java를 열려면

: 1,

은 무엇 내가 달성하고자하는 것은 이것이다. 지금까지는 괜찮습니다, 잘 작동합니다.

위젯을 화면에 추가하면 내 위젯에는 2 개의 버튼과 하나의 TextView가 있습니다. 는 내가 원하는 것은 이것이다 : 내가 첫 번째 버튼을 클릭하면

  1. , 난 내가 두 번째 버튼을 클릭하면
  2. MainActivity.java를 열려면, 내가 NewAppWidgetConfigureActivity.java를 열고 자.

그러나 작동하지 않습니다. 버튼을 클릭하면 아무 일도 일어나지 않습니다. 다른 질문에서 해결책을 구현하려고하지만 작동하지 않습니다.

여기에 코드입니다 :

매니페스트 파일 코드 :

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.petar.mywidgetwitbuttons"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver android:name=".NewAppWidget"> 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      </intent-filter> 

      <meta-data 
       android:name="android.appwidget.provider" 
       android:resource="@xml/new_app_widget_info" /> 
     </receiver> 

     <activity android:name=".NewAppWidgetConfigureActivity"> 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> 
      </intent-filter> 
     </activity> 
    </application> 

이 코드 곳의 라인을 포함하여 내가 내 위젯에 필요한 모든 정보를 추가 new_ap_widget_info.xml, 대한 코드입니다 나는 위젯을 추가 할 때 자동으로 NewAppWidgetConfigureActivity.java 활동을 엽니 다.

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:configure="com.example.petar.mywidgetwitbuttons.NewAppWidgetConfigureActivity" 
    android:initialKeyguardLayout="@layout/new_app_widget" 
    android:initialLayout="@layout/new_app_widget" 
    android:minHeight="110dp" 
    android:minWidth="180dp" 
    android:previewImage="@drawable/example_appwidget_preview" 
    android:resizeMode="horizontal|vertical" 
    android:updatePeriodMillis="86400000" 
    android:widgetCategory="home_screen" /> 

의 AppWidgetProvider 내가 제공 정보에서 코드 줄을 제거 할 때 또한

package com.example.petar.mywidgetwitbuttons; 

import android.app.PendingIntent; 
import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.widget.RemoteViews; 

/** 
* Implementation of App Widget functionality. 
* App Widget Configuration implemented in {@link NewAppWidgetConfigureActivity NewAppWidgetConfigureActivity} 
*/ 
public class NewAppWidget extends AppWidgetProvider { 

    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, 
           int appWidgetId) { 

     CharSequence widgetText = NewAppWidgetConfigureActivity.loadTitlePref(context, appWidgetId); 
     // Construct the RemoteViews object 
     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget); 
     views.setTextViewText(R.id.appwidget_text, widgetText); 

     Log.d("widget", "onUpdatePrvo: Widget testiramo"); 

     // Instruct the widget manager to update the widget 
     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     // There may be multiple widgets active, so update all of them 
     for (int appWidgetId : appWidgetIds) { 
      updateAppWidget(context, appWidgetManager, appWidgetId); 

      Intent intent = new Intent(context, MainActivity.class); 
      Intent intent2 = new Intent(context, NewAppWidgetConfigureActivity.class); 
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
      PendingIntent pendingIntent2 = PendingIntent.getActivity(context, 0, intent2, 0); 


      // Get the layout for the App Widget and attach an on-click listener 
      // to the button 
      RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget); 
      views.setOnClickPendingIntent(R.id.buttonCLICK, pendingIntent); 
      views.setOnClickPendingIntent(R.id.buttonCLICK2, pendingIntent2); 


      appWidgetManager.updateAppWidget(appWidgetId, views); 
     } 
    } 

    @Override 
    public void onDeleted(Context context, int[] appWidgetIds) { 
     // When the user deletes the widget, delete the preference associated with it. 
     for (int appWidgetId : appWidgetIds) { 
      NewAppWidgetConfigureActivity.deleteTitlePref(context, appWidgetId); 
     } 
    } 

    @Override 
    public void onEnabled(Context context) { 
     // Enter relevant functionality for when the first widget is created 
    } 

    @Override 
    public void onDisabled(Context context) { 
     // Enter relevant functionality for when the last widget is disabled 
    } 
} 

, 다음, 내가 MainActivity.java를 열 수를 확장 NewAppWidget.java 클래스에 대한 코드 첫 번째 버튼 클릭시을 클릭해도 여전히 두 번째 버튼을 클릭하여 NewAppWidgetConfigureActivity.java을 열 수 없습니다. 안드로이드 : = "com.example.petar.mywidgetwitbuttons.NewAppWidgetConfigureActivity"여기

및 구성은 안드로이드없이 전체 업체 정보 코드 :이 쉬운 단계가 당신을 도울 수있는 구성 = ""

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:configure="com.example.petar.mywidgetwitbuttons.NewAppWidgetConfigureActivity" 
    android:initialKeyguardLayout="@layout/new_app_widget" 
    android:initialLayout="@layout/new_app_widget" 
    android:minHeight="110dp" 
    android:minWidth="180dp" 
    android:previewImage="@drawable/example_appwidget_preview" 
    android:resizeMode="horizontal|vertical" 
    android:updatePeriodMillis="86400000" 
    android:widgetCategory="home_screen" /> 

답변

0

문제를 해결하십시오.

  1. 응용 프로그램 위젯은 모든 UI 컨트롤을 허용하지 않습니다. 그러므로 허용되는 것과 그렇지 않은 것을 확인하십시오. https://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout

  2. 사용자 지정 UI 컨트롤 클래스를 확장하거나 만들지 마십시오. Ex; - class CustomButton extends Button

  3. 의도에 여분의 매개 변수가 없습니다. 이는 PendingIntent 비교 논리를 내부적으로 혼동시킬 수 있습니다. 따라서 인 텐트에 사용자 정의 액션 또는 몇 가지 추가 매개 변수를 추가하십시오. EX; -

    의도 a = 새로운 의도 ("MainActivity"); 의도 b = 새로운 의도 ("ConfigureActivity");

+0

내가보기에, 내가 사용하는 모든 것은 허용됩니다. 내 집 위젯 UI에서 사용하는 것은 모두 2 개의 버튼과 상대 레이아웃입니다. 나는 다음과 같은 differnet 인 텐트를 사용한다 : Intent intent = new Intent (context, MainActivity.class); 의도 intent2 = 새로운 의도 (context, NewAppWidgetConfigureActivity.class); onUpdate() 메소드에서. 맞습니까? 내가 공급자 정보 android : configure = ""에서 제거하면, 첫 번째 버튼을 클릭하여 MainActivity를 실제로 열 수 있지만 두 번째 버튼을 클릭하여 두 번째 활동을 열 수 없습니다. – beginner

+0

위에서 말한 다른 의도 액션을 설정해 보았습니까? 의도 a = 새 의도 ("MainActivity- 이것은 활동 1의 의도 동작입니다."); 의도 b = 새로운 의도 ("ConfigureActivity - 이것은 activity2의 의도 동작입니다"); – albeee

+0

이 2 줄의 코드를 추가하려고해도 여전히 작동하지 않습니다. intent.setAction ("MainActivity"); intent2.setAction ("NewAppWidgetConfigureActivity"); – beginner