1

私はアンドロイド用のアナログ時計ウィジェットを開発しています。ウィジェットにイメージビューがあります。クリックリスナーを追加する必要があるため、クリックするとアクティビティ (Facebook 共有アクティビティ) が開始されます。コードは次のとおりです。

public class Widget extends AppWidgetProvider
{    
    public void onReceive(Context context, Intent intent)
    { 
        super.onReceive(context, intent);
        PackageManager packageManager = context.getPackageManager();
        Intent alarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER);
        Log.d("ARH","CLICKK");
        String clockImpls[][] = {
                {"HTC Alarm Clock", "com.htc.android.worldclock", "com.htc.android.worldclock.WorldClockTabControl" },
                {"Standar Alarm Clock", "com.android.deskclock", "com.android.deskclock.AlarmClock"},
                {"Froyo Nexus Alarm Clock", "com.google.android.deskclock", "com.android.deskclock.DeskClock"},
                {"Moto Blur Alarm Clock", "com.motorola.blur.alarmclock",  "com.motorola.blur.alarmclock.AlarmClock"},
                {"Samsung Galaxy Clock", "com.sec.android.app.clockpackage","com.sec.android.app.clockpackage.ClockPackage"}
        };

        boolean foundClockImpl = false;

        for(int i=0; i<clockImpls.length; i++) {
            String vendor = clockImpls[i][0];
            String packageName = clockImpls[i][1];
            String className = clockImpls[i][2];
            try {
                ComponentName cn = new ComponentName(packageName, className);
                ActivityInfo aInfo = packageManager.getActivityInfo(cn, PackageManager.GET_META_DATA);
                alarmClockIntent.setComponent(cn);   
                foundClockImpl = true;
            } catch (Exception e) {
                System.out.println(vendor + " does not exists");
            }
        }

        if (foundClockImpl) {
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, alarmClockIntent, 0);
            String action = intent.getAction();
            Log.v("info",action);
            if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action))
            {

                RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);


                Intent fbook = new Intent(context,FacebookShare.class);
                PendingIntent fbookPIntent = PendingIntent.getActivity(context, 0, fbook, 0);  

                views.setOnClickPendingIntent(R.id.facebooksharebtn, fbookPIntent); 
                AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views);
            }else{ 
            }
        }

    }





}

表示する必要があるアクティビティは

public class FacebookShare extends Activity {


    Facebook facebook = new Facebook("304105172993733");  
    boolean isLoggedIn = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.facebook);

        facebook.authorize(this, new String[]{"publish_stream"}, new DialogListener(){

            public void onComplete(Bundle values) {

                Log.d("COMPLETE","AUTH COMPLETE. VALUES: "+values.size());
                Log.d("AUTH TOKEN","== "+values.getString(Facebook.TOKEN));
                updateStatus(values.getString(Facebook.TOKEN));
            }

            public void onFacebookError(FacebookError e) {
                Log.d("FACEBOOK ERROR","FB ERROR. MSG: "+e.getMessage()+", CAUSE: "+e.getCause());
            }

            public void onError(DialogError e) {
                Log.e("ERROR","AUTH ERROR. MSG: "+e.getMessage()+", CAUSE: "+e.getCause());
            }

            public void onCancel() {
                Log.d("CANCELLED","AUTH CANCELLED");
            }
        });
    }

    public void updateStatus(String accessToken){
        try {
            Bundle bundle = new Bundle();
            bundle.putString("message", "test update");  
            bundle.putString(Facebook.TOKEN,accessToken); 
            String response = facebook.request("me/feed",bundle,"POST");
            Log.d("UPDATE RESPONSE",""+response);
        } catch (MalformedURLException e) {
            Log.e("MALFORMED URL",""+e.getMessage());
        } catch (IOException e) {
            Log.e("IOEX",""+e.getMessage());
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        Log.d("onActivityResult","onActivityResult");
        facebook.authorizeCallback(requestCode, resultCode, data);
    }

}

どちらも同じパッケージに入っています

これは、イメージビューをクリックしたときに発生する例外です

E/AndroidRuntime(1130): java.lang.RuntimeException: アクティビティを開始できません ComponentInfo{com.mnet.rockwell.widgets.AnalogClock/com.mnet.widgets.AnalogClock.FacebookShare}: android.view.InflateException: バイナリ XML ファイル行#31: クラス android.widget.FrameLayout の拡張エラー

また、これはlogcatでログを取得しません

ここに私がログのために試したものがあります

 Log.d("ARH","CLICKK");
Log.e("ARH","CLICKK");
Log.v("ARH","CLICKK");
Log.i("ARH","CLICKK");

私は Android 開発は初めてですが、Java 開発者です。提案があれば教えてください。

ここにfacebook.xmlがあります

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Thank You For Sharing Rockwell Widget" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1"
        android:layout_marginRight="27dp"
        android:layout_marginTop="40dp"
        android:text="   Close   " />

</RelativeLayout>
4

0 に答える 0