簡體   English   中英

如何顯示我的MenuActivity?

[英]How do I get my MenuActivity to show up?

我正在一個新項目中遵循Compass示例中使用的模式,並且大多數邏輯都起作用。 但是,當我在顯示我的實時卡時點擊時,會聽到“咔嗒”聲,但菜單活動沒有顯示。 我認為我錯過了一個難題,但是到目前為止我還無法弄清楚是什么。

當我點擊時,除了點擊之外,我還在logcat中看到了這一點:

01-08 10:02:26.796: I/ActivityManager(196): START {flg=0x10008000 cmp=com.example.speeddisplay/.SpeedDisplayMenuActivity} from pid -1

因此,看起來它應該開始了我的活動,但沒有顯示。 這里是一些相關的代碼...盡管我不確定問題出在哪里。

AndroidManifest.xml中的服務部分:

    <service
        android:name="com.example.speeddisplay.service.SpeedService"
        android:enabled="true"
        android:icon="@drawable/ic_drive_50"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="com.google.android.glass.action.VOICE_TRIGGER" />
        </intent-filter>

        <meta-data
            android:name="com.google.android.glass.VoiceTrigger"
            android:resource="@xml/voiceinput_speeddisplay" />
    </service>

SpeedService.java中的onStartCommand方法:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (Constants.DEBUG) {
        Log.d(TAG, "onStartCommand");
    }
    if (liveCard == null) {
        liveCard = timelineManager.createLiveCard(LIVE_CARD_ID);
        speedRenderer = new SpeedRenderer(this, speedManager);
        liveCard.setDirectRenderingEnabled(true);
        liveCard.getSurfaceHolder().addCallback(speedRenderer);

        // Display the options menu when the live card is tapped.
        Intent menuIntent = new Intent(this, SpeedDisplayMenuActivity.class);
        menuIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        liveCard.setAction(PendingIntent.getActivity(this, 0, menuIntent, 0));
        liveCard.publish(PublishMode.REVEAL);

        if(Constants.DEBUG){
            Log.d(TAG, "liveCard published");
        }
    }

    return START_STICKY;

}

這是我的SpeedDisplayMenuActivity.java。 這些方法都沒有被調用。

public class SpeedDisplayMenuActivity extends Activity {

private SpeedService.SpeedBinder speedService;
private boolean mResumed;

private ServiceConnection mConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        if (Constants.DEBUG) {
            Log.e("Service Stuff", "Service connected.");
        }
        if (service instanceof SpeedService.SpeedBinder) {
            speedService = (SpeedService.SpeedBinder) service;
            openOptionsMenu();
        }
        if (Constants.DEBUG) {
            Log.e("Service Stuff", "service was an instance of " + service.getClass().getName());
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        // Do nothing.
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    if(Constants.DEBUG){
        Log.e("Menu", "Created.");
    }
    super.onCreate(savedInstanceState);
    bindService(new Intent(this, SpeedService.class), mConnection, 0);
}

@Override
protected void onResume() {
    if(Constants.DEBUG){
        Log.e("Menu", "Resumed.");
    }
    super.onResume();
    mResumed = true;
    openOptionsMenu();
}

@Override
protected void onPause() {
    if(Constants.DEBUG){
        Log.e("Menu", "Paused.");
    }
    super.onPause();
    mResumed = false;
}

@Override
public void openOptionsMenu() {
    if (Constants.DEBUG) {
        Log.e("Options Menu", "Open");
    }
    if (mResumed && speedService != null) {
        if (Constants.DEBUG) {
            Log.e("Options Menu", "Open with correct params");
        }
        super.openOptionsMenu();
    } else {
        if (Constants.DEBUG) {
            Log.e("Options Menu", "Open with INCORRECT params");
        }
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (Constants.DEBUG) {
        Log.e("Options Menu", "Created");
    }
    getMenuInflater().inflate(R.menu.speed, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (Constants.DEBUG) {
        Log.e("Options Menu", "Item Selected");
    }
    switch (item.getItemId()) {
    // case R.id.read_aloud:
    // mCompassService.readHeadingAloud();
    // return true;
    case R.id.stop:
        if (Constants.DEBUG) {
            Log.e("Options Menu", "Stop");
        }
        stopService(new Intent(this, SpeedService.class));
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

@Override
public void onOptionsMenuClosed(Menu menu) {
    if (Constants.DEBUG) {
        Log.e("Options Menu", "Closed");
    }
    super.onOptionsMenuClosed(menu);

    unbindService(mConnection);

    // We must call finish() from this method to ensure that the activity
    // ends either when an
    // item is selected from the menu or when the menu is dismissed by
    // swiping down.
    finish();
}

有人看到我想念的東西嗎?

沒錯,在這種情況下,聲明SpeedDisplayMenuActivity是問題。

我曾看到在Glass中可以正常處理通常在Android環境中發生的許多其他類型的異常/崩潰的情況。

這絕對有利於用戶體驗,但在開發上幾乎沒有困難。 希望將來會有某種設置來啟用例外!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM