小编Nik*_*ski的帖子

IntentService:如何正确入队?

在我的代码中,我使用a IntentService来收听位置更新(GPS或网络更新),这IntentService是在收到事件时触发的,因此它是startService()从任何活动开始的.

public class AddLocationService extends IntentService implements LocationListener {
    /*My code here*/
}

    @Override
protected void onHandleIntent(Intent intent) {
    if(getOldLoc() == null) 
    { 
        //Get a new location
        this.locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_INTERVAL_GPS, 0, this);
        this.locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_INTERVAL_GPS, 0, this);
        Log.d(AddLocationService.TAG, "Network listener started");

        this.time_start_listening = System.currentTimeMillis();
        mTimerThread mTimerRunnable = new mTimerThread();
        this.timerThread = new Thread(mTimerRunnable);
        this.timerThread.start();
    }
    else    
        /*REUSE OLD LOCATION*/
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:当两个事件开始这个IntentService并且第二个事件启动它而第一个事件仍在请求更新时,我希望第二个事件等到第一个完全完成(找到位置OR计时器线程完成).但是,无论何时IntentService第二次执行(第一个实例仍在运行),它都会打印日志并执行并行执行.

然而,我认为主要目标IntentService是它是连续的,所以第二个意图必须等到第一个完成...

我错过了什么吗?

service android android-intent intentservice

5
推荐指数
1
解决办法
4665
查看次数

FrameLayout layout_weight以编程方式

我正在尝试以FrameLayout编程方式创建如下(此视图将浮动在a的底部中心LinearLayout):

    FrameLayout bottomFrameLayout = new FrameLayout(context);
    bottomFrameLayout.setLayoutParams(new FrameLayout.LayoutParams(0,LayoutParams.FILL_PARENT,Gravity.CENTER | Gravity.BOTTOM));
Run Code Online (Sandbox Code Playgroud)

自从我设置以来layout_width=0dp,我也想设置layout_weight控制宽度.我怎样才能做到这一点?

android android-layout

5
推荐指数
1
解决办法
2万
查看次数

这是Android Fragments和NavigationDrawer的正确用法吗?

虽然我多年来一直在使用Android,但这是我第一次Fragments在现实生活中使用它.所以我有点困惑:-P

这个应用程序有NavigationDrawer4个主要部分.我只使用一个Activity带有我替换Layout的内容的View主要部分Fragments.当选择了一个选项时NavigationDrawer,我实例化a Fragment并将其放入该内容中View.我正在做这样的事情:

    private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        selectItem(position);
    }
}

public static int drawerSelectedOption = 0;
private void selectItem(int position) {
    drawerSelectedOption = position;
    Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new StoresFragment();
            break;
        case 1:
            //promos
        case 2:
            fragment = new TransactionsFragment();
            break;
        case …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-actionbar navigation-drawer

5
推荐指数
1
解决办法
859
查看次数

TabLayout中的图标

我有一个简单的东西AppCompatActivity,一个简单的东西Toolbar(android.support.v7.widget.Toolbar),一个设计库TabLayout和一个ViewPager

现在,在这种情况下,我有4个片段,它们位于viewpager内部,可以从侧面滑动。很好 但是,一旦我使用mTabLayout.setupWithViewPager(mViewPager);,图标就会消失,但是我可以在空白处进行切换,效果很好。如果我删除该行,图标将再次可见,“滑动”将起作用,但是如果我使用Tab键选择图标,则不会发生任何事情。

我的密码

主要活动

public class MainActivity extends AppCompatActivity {

    private Toolbar mToolbar;
    private TabLayout mTabLayout;
    private ViewPager mViewPager;
    private ViewPagerAdapter mAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initToolbar();
        initTabLayout();
        initViewPager();

        mTabLayout.setupWithViewPager(mViewPager);//Here is the code from above
        mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));

    }

    private void initToolbar() {
        mToolbar = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);

    }

    private void initTabLayout() {
        mTabLayout = (TabLayout) findViewById(R.id.tabLayout);
        mTabLayout.addTab(mTabLayout.newTab().setIcon(R.drawable.ic_fire_white));
        mTabLayout.addTab(mTabLayout.newTab().setIcon(R.drawable.ic_apps_white));
        mTabLayout.addTab(mTabLayout.newTab().setIcon(R.drawable.ic_account_plus_white));
        mTabLayout.addTab(mTabLayout.newTab().setIcon(R.drawable.ic_help_white));

    }

    private void initViewPager() …
Run Code Online (Sandbox Code Playgroud)

android android-tabs android-design-library

5
推荐指数
1
解决办法
4786
查看次数

用字符串中的波斯数字替换英文数字,​​URL除外

我为波斯语字符串编写了一个自定义TextView,这个TextView应该将英文数字替换成波斯数字

public class PersianTextView extends TextView {

    public PersianTextView(Context context) {
        super(context);
    }

    public PersianTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PersianTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        String t = text.toString();
        t = t.replaceAll("0", "?");
        t = t.replaceAll("1", "?");
        t = t.replaceAll("2", "?");
        t = t.replaceAll("3", "?");
        t = t.replaceAll("4", "?");
        t = t.replaceAll("5", "?");
        t = t.replaceAll("6", "?");
        t = t.replaceAll("7", "?");
        t = …
Run Code Online (Sandbox Code Playgroud)

java string android textview

5
推荐指数
1
解决办法
757
查看次数

改造实施最佳实践

我们正在使用 Retrofit 构建一个应用程序,其中我们有一个单独的模块来连接我们的后端。按照目前的设计方式,在模块中,我们有一个 RestClient 类,其中包含用路由定义的其余适配器和接口。为简单起见,我提供了一个示例休息端点。

// Rest adapter instance
    private static RestAdapter getRestAdapter() {

        if (!isDebuggable) {
            URL = URL_PROD;
        } else {
            URL = URL_UAT;
        }

        if (mRestAdapter != null) {
            return mRestAdapter;
        }
        return mRestAdapter = new RestAdapter.Builder()
                .setEndpoint(URL)
                .setRequestInterceptor(authHeader())
                .setLogLevel(RestAdapter.LogLevel.FULL)
                .build();
    }


private interface IApiClient {

        @POST("/register")
        void register(@Body JsonObject dataObject, Callback<SignInResponse> signInResponseCallback);

}
Run Code Online (Sandbox Code Playgroud)

对应的客户端定义如下:

public static void register(JsonObject jsonObject, final ErrorNetworkResponse<SignInResponse> listener) {
        getRestAdapter().create(IApiClient.class).register(jsonObject, new Callback<SignInResponse>() {
            @Override
            public void success(SignInResponse signInResponse, Response response) {

                if …
Run Code Online (Sandbox Code Playgroud)

android retrofit

5
推荐指数
0
解决办法
2479
查看次数

在 android 本机屏幕上浮动的 videoview 上播放视频,并且两者都具有触摸侦听器功能

看了很多类似的问题但没有运气......

我正在尝试找到使用媒体控制器播放视频的正确方法(半屏窗口,需要时也可以全屏)。视频应该漂浮在本机控件之上,视频和本机控件都可以接收触摸事件(都是可点击的。就像 Facebook Messenger 图标)。

现在我正在做的事情:我启动一个透明的活动,并在 a 中播放视频,VideoView并将其布局参数和活动的布局参数设置为占据屏幕的一半。另一半是本机屏幕。我将窗口设置为:

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY)

这样做的作用是,我可以看到正在播放的视频,VideoView 但无法触摸和使用其媒体控制器(播放、暂停等),但我可以看到可以触摸的本机屏幕!

我尝试了不同的标志来启用媒体控制器,但随后VideoView完全消耗触摸事件。这意味着现在我无法触摸它后面的本机屏幕的一半

本机屏幕顶部的 VideoView - 两者都可以处理触摸事件, 我认为可能使用对话框或弹出窗口,但找不到说对话框可以接收触摸事件而本机屏幕也可以接收触摸事件的内容。

视频应该始终位于最上面。提前致谢 !:)

android android-dialog android-windowmanager android-videoview android-popupwindow

5
推荐指数
0
解决办法
750
查看次数

自定义数据类型渲染器部署

我应该如何导出在调试器中用作特定类型的表达式的自定义数据类型渲染器?我应该将其导出为插件jar还是仅包含将在Android Studio目录中引用的类的jar?

我用Idea SDK和插件模块构建它,但到目前为止我没有使用任何软件包,而不是JDK软件包.我尝试将其作为插件导出并从磁盘安装,但我无法在表达式中使用这些类.无论如何,这在开放式思想sdk文档中没有记录.

android jetbrains-ide intellij-idea intellij-plugin android-studio

5
推荐指数
1
解决办法
205
查看次数

从gradle android项目中的依赖项中排除资源

我有一个gradle android项目.我在build.gradle中设置了minifyEnabled

我想从依赖项中排除一些资源文件.例如,gwt.xml文件和日志配置文件.

proguard默认复制所有资源文件.所以,如果我直接使用proguard,我可以写

-injars in.jar(!**/*.gwt.xml)

但是我怎么能用gradle android插件做呢?


我知道的Ps

packagingOptions {exclude'Proj.gwt.xml'}

它看起来每个排除一个文件 使用它在这里列出所有文件是非常不可用的.

android gradle android-proguard

5
推荐指数
0
解决办法
395
查看次数

如何仅在应用程序关闭时运行workmanager任务?

我需要通过 flutter workmanager 运行后台任务,但仅在应用程序关闭时运行。如何实现这样的行为。代码示例会很好。提前致谢

android background-process flutter flutter-workmanager

5
推荐指数
1
解决办法
2066
查看次数