我的应用程序中有一个广播接收器,每次用户接到来电时都会被触发.现在,当它发生时,我需要广播接收器来调用特定活动中的特定方法.现在,我尝试将此方法设置为静态,因此可用,但有些东西告诉我这是一个非常糟糕的主意.
因此,我尝试在我的活动中实例化广播接收器而不在我的清单中声明它但问题是 - 当应用程序关闭时,活动不存在,因此我无法调用我的方法.
所以我的问题是 - 当广播接收器被激发时,如何在不使其成为"公共静态"的情况下调用此方法?
这是我的活动代码(我删除了不相关的部分)
package com.silverfix.ringo.activities;
import com.silverfix.ringo.R;
import com.silverfix.ringo.activities.fragments.DataManagerFragment;
import android.app.ActionBar;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class RingtonesActivity extends Activity{
private DataManagerFragment dataManagerFragment;
private IntentFilter filter;
private BroadcastReceiver phoneCall;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ringtones);
ActionBar ab = getActionBar();
ab.setDisplayShowTitleEnabled(false);
ab.setDisplayHomeAsUpEnabled(true);
dataManagerFragment = new DataManagerFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(dataManagerFragment, "DataManagerFragment");
ft.commit();
filter = new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE");
phoneCall = new BroadcastReceiver() {
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的数据库中创建一个具有自动增量ID的表,但每当我尝试将AUTOINCREMENT关键字添加到我的查询时,它告诉我:
AUTOINCREMENT仅允许在INTEGER PRIMARY KEY上使用
这是我的查询:
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_TASKS + " ( "
+ KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT, "
+ KEY_NOTETITLE + " TEXT, " + KEY_NOTECONTENT + " Text, "
+ KEY_STATUS + " INTEGER)";
db.execSQL(sql);
}
Run Code Online (Sandbox Code Playgroud)
我也尝试写AUTO_INCREMENT,但后来我遇到了语法错误.
我发现这是问题的根源,因为每当我尝试删除AUTOINCREMENT字时,它都能正常工作.
那么......你认为这是什么问题?
我需要计算两点之间的角度,其中一个固定点通过一条线与给定的两点相连.
这是一张图片,说明了我的需求:

这是我到目前为止所尝试的:
public static float GetAngleOfLineBetweenTwoPoints(float x1, float x2, float y1, float y2) {
float xDiff = x2 - x1;
float yDiff = y2 - y1;
return (float) (Math.atan2(yDiff, xDiff) * (180 / Math.PI));
}
Run Code Online (Sandbox Code Playgroud)
说它没有提供正确答案毫无意义.
我正在开发一个应用程序,在崩溃的情况下,需要在崩溃时保存一些数据.现在,我将这些数据保存在onDestroy()中,如下所示:
@Override
protected void onDestroy() {
saveState();
super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)
但是每当我故意崩溃我的应用程序时,都不会调用onDestroy()并且不会保存我的数据.
我的问题是,如何在崩溃时保存我的数据?我应该采取哪种方法?因为我还需要保存崩溃的时间,所以这是强制性的.
我正在尝试计算给定数字中素数的总和.例如,对于数字123456,结果将是10,因为2 + 3 + 5 = 10.
我试着编写一个在Lua中执行此操作的代码,但我遇到了一些问题.
首先,这是代码:
function isPrime(num)
if(num == 1 or (num ~= 2 and num%2 == 0)) then
return false
end
for i=3, math.sqrt(num), 2 do
if(num%i == 0) then
return false
end
end
return true
end
function sumOfPrimes(num)
local sum = 0
for digit in string.gmatch(num,"%d") do
local prime = isPrime(digit)
if(isPrime(digit)) then
sum = sum + digit
end
print(digit)
end
return sum
end
function main()
print(sumOfPrimes(123456))
end
main()
Run Code Online (Sandbox Code Playgroud)
它回归9而不是10.我注意到的另一件事是它也加1,但1不是素数.这有什么问题?
我试图在libgdx中使用Box2D但不幸的是我似乎无法理解它的工作方式.
以下是一些让我发疯的例子:
0.1.众所周知,Box2D适用于仪表.大家都知道.然后,为什么我得到像素的结果?例如,如果我定义了一些主体定义并将位置设置为0,1,它会在屏幕的左下角绘制相关的fixture/sprite!我认为Box2D中的0,0点位于屏幕的中心.
0.2.我一直在努力理解和解决的另一个问题是形状,关节和其他东西的价值.让我们从形状开始:我定义了一个像这样的Polygon形状:
shape.setAsBox(1, 2);
Run Code Online (Sandbox Code Playgroud)
现在的形状应该为2 米的宽4 米的高度,但它并非如此.我得到的是一个超小的形状.
最后,关节的价值.我定义了一个具有多边形形状和地面体的主体.现在我使用Revolute Joint将这两个"固定"到地面中心,目标是创造某种在一定范围内旋转良好的弹射器.
现在我也定义了一个鼠标关节,所以我可以很好地来回拖动弹射器(多边形形状),但似乎我需要将关节的maxForce设置为一个巨大的值,这样我才能真正看到它的运动/旋转弹射!我不明白.就我必须设定的价值而言,所有这些问题都应该由较小的值来操作.
这是我的基本代码,包含上述所有内容.请告诉我我做错了什么,我在这里吓坏了:
GameScreen.java
package com.david.box2dpractice;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
import com.badlogic.gdx.physics.box2d.ChainShape;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.PolygonShape;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.physics.box2d.joints.RevoluteJointDef;
import com.badlogic.gdx.utils.Array;
public class GameScreen implements Screen{
private Box2DDebugRenderer debugRenderer;
private Texture texture;
private Sprite sprite;
private Sprite tempSprite;
private SpriteBatch batch;
private Body arm , ground;
private …Run Code Online (Sandbox Code Playgroud) 我正在尝试从图像文件中读取数据并将其写入新文件-进行复制。
这是我的代码,用于读取原始图像的数据并将每个字节写入新图像:
file = open("image2.png", "w")
with open("image.png", "rb") as f:
while True:
byte = f.read(1)
if not byte:
break
file.write(byte)
Run Code Online (Sandbox Code Playgroud)
现在,它确实创建了一个名为“ image2.png”的新文件,但是当我尝试打开它时,出现一个错误,提示图像已损坏或损坏。
如何读取图像数据并将其写入新文件?
我正在尝试通过应用程序修改手机上的某些设置,但我一直收到此错误:
java.lang.SecurityException:Permission denial:写入设置需要android.permission.WRITE_SETTINGS
我已将此权限添加到我的清单中,但错误仍然存在.这是我的清单中的一个片段:
<uses-permission
android:name="android.permission.MEDIA_CONTENT_CONTROL"
android:maxSdkVersion="11" />
<uses-permission
android:name="android.permission.CHANGE_CONFIGURATION"
android:maxSdkVersion="11" />
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
android:maxSdkVersion="11" />
<uses-permission
android:name="android.permission.WRITE_SETTINGS"
android:maxSdkVersion="11" />
Run Code Online (Sandbox Code Playgroud)
这里有什么问题?