2014-10-04 1 views
1

У меня есть одна деятельность, ExampleActivityAndroid Wear, определение типа циферблат - круглый или квадратный

<activity android:name="com.android.ExampleActivity" 
     android:label="@string/app_name" 
     android:allowEmbedded="true"> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

    </activity> 

С этим определить в manifiest, круглый макет обнаружить без проблем.

Но с этим явным, ОЖИДАЕМОЙ деятельностью, то же самое не работает.

<activity android:name="com.android.ExampleActivity" 
     android:label="@string/app_name" 
     android:allowEmbedded="true"> 

     <meta-data android:name="com.google.android.clockwork.home.preview" android:resource="@drawable/example_watch_background" /> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="com.google.android.clockwork.home.category.HOME_BACKGROUND" /> 
     </intent-filter> 

    </activity> 

Для обнаружения круглый макет, Moto 360 устройства, используя onApplyWindowInsets или onReadyForContent, но та же самая проблема.

Любая идея, потому что, когда я использовал эту категорию, com.google.android.clockwork.home.category.HOME_BACKGROUND, не работает?

Благодаря

+0

Можете ли вы опубликовать весь манифест? – kentarosu

ответ

-1

До нового Andrioid SmartWatch SDK не Выпущенный, вы не можете использовать setOnApplyWindowInsetsListener/onApplyWindowInsets на заказ циферблате. Эта функциональность работает только в приложении smartwatch (без добавления манифеста).

Чтобы знать, если часы лицо круглое, вы можете использовать:

public static boolean heightSameAsWidth(Context context) { 
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 

    DisplayMetrics metrics = new DisplayMetrics(); 
    display.getMetrics(metrics); 

    int width = metrics.widthPixels; 
    int height = metrics.heightPixels; 

    return height == width; 
} 

private void checkIfWatchIsRound() { 
    if (heightSameAsWidth(getApplicationContext())) { 
     isRound = false; 
    } else { 
     isRound = true; 
    } 
} 
+0

Это не будет работать на часах Huawei, потому что height = width на huawei – Raffaeu

1

С новым SDK, вы должны сделать это, как это показано на Android Wear for Developers

private class Engine extends CanvasWatchFaceService.Engine { 
    boolean mIsRound; 
    int mChinSize; 

    @Override 
    public void onApplyWindowInsets(WindowInsets insets) { 
     super.onApplyWindowInsets(insets); 
     mIsRound = insets.isRound(); 
     mChinSize = insets.getSystemWindowInsetBottom(); 
    } 
    ... 
} 

Здесь, как вы можно увидеть, вы также можете получить значение нижнего экрана (например, Moto 360).